Spieler.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #include "Spieler.h"
  2. #include <math.h>
  3. #include <TastaturEreignis.h>
  4. #include <Globals.h>
  5. // Inhalt der Spieler Klasse aus Spieler.h
  6. // Konstruktor
  7. Spieler::Spieler( SpielerTyp typ, int mapBr, int mapHö, RandomGenerator *zRand )
  8. : ReferenceCounter()
  9. {
  10. if( typ == GEGNER )
  11. {
  12. xSpeed = ( ( zRand->rand() * 8001 ) / 1000.0 - 4.0 ) * 60;
  13. ySpeed = ( ( zRand->rand() * 8001 ) / 1000.0 - 4.0 ) * 60;
  14. durchlässig = 3;
  15. farbe = 0xFFFF0000;
  16. }
  17. if( typ == ZIEL )
  18. {
  19. xSpeed = ( ( zRand->rand() * 7001 ) / 1000.0 - 4.0 ) * 60;
  20. ySpeed = ( ( zRand->rand() * 7001 ) / 1000.0 - 4.0 ) * 60;
  21. durchlässig = 3;
  22. farbe = 0xFF00FFFF;
  23. }
  24. if( typ == SPIELER )
  25. {
  26. xSpeed = 0;
  27. ySpeed = 0;
  28. farbe = 0xFF00FF00;
  29. durchlässig = 0;
  30. }
  31. xPos = ( zRand->rand() * ( mapBr - 100 ) ) + 50;
  32. yPos = ( zRand->rand() * ( mapHö - 100 ) ) + 50;
  33. }
  34. Spieler::Spieler( SpielerTyp typ, Datei *zD )
  35. : ReferenceCounter()
  36. {
  37. if( typ == GEGNER )
  38. farbe = 0xFFFF0000;
  39. if( typ == ZIEL )
  40. farbe = 0xFF00FFFF;
  41. if( typ == SPIELER )
  42. farbe = 0xFF00FF00;
  43. zD->lese( (char *)&xPos, 8 );
  44. zD->lese( (char *)&yPos, 8 );
  45. zD->lese( (char *)&xSpeed, 8 );
  46. zD->lese( (char *)&ySpeed, 8 );
  47. zD->lese( (char *)&durchlässig, 8 );
  48. }
  49. Spieler::Spieler()
  50. : ReferenceCounter()
  51. {}
  52. // Destruktor
  53. Spieler::~Spieler()
  54. {}
  55. // nicht constant
  56. void Spieler::tick( double z, int mapBr, int mapHö, char tastenStände )
  57. {
  58. if( farbe == 0xFF00FF00 )
  59. {
  60. if( ( tastenStände | 4 ) == tastenStände )
  61. xPos -= 150 * z;
  62. if( ( tastenStände | 2 ) == tastenStände )
  63. xPos += 150 * z;
  64. if( ( tastenStände | 1 ) == tastenStände )
  65. yPos -= 150 * z;
  66. if( ( tastenStände | 8 ) == tastenStände )
  67. yPos += 150 * z;
  68. }
  69. if( durchlässig )
  70. {
  71. durchlässig -= z;
  72. if( durchlässig < 0 )
  73. durchlässig = 0;
  74. }
  75. xPos += xSpeed * z;
  76. yPos += ySpeed * z;
  77. if( xPos < 10 )
  78. {
  79. xPos = 10;
  80. xSpeed = -xSpeed;
  81. }
  82. else if( xPos > mapBr - 10 )
  83. {
  84. xPos = mapBr - 10;
  85. xSpeed = -xSpeed;
  86. }
  87. if( yPos < 10 )
  88. {
  89. yPos = 10;
  90. ySpeed = -ySpeed;
  91. }
  92. else if( yPos > mapHö - 10 )
  93. {
  94. yPos = mapHö - 10;
  95. ySpeed = -ySpeed;
  96. }
  97. }
  98. void Spieler::render( Bild &zRObj )
  99. {
  100. if( !durchlässig || (int)( durchlässig * 8 ) % 2 )
  101. {
  102. zRObj.drawKreis( (int)xPos, (int)yPos, 10, farbe );
  103. zRObj.drawKreis( (int)xPos - 3, (int)yPos - 3, 2, farbe );
  104. zRObj.drawKreis( (int)xPos + 3, (int)yPos - 3, 2, farbe );
  105. zRObj.drawLinieV( (int)xPos, (int)yPos - 1, 4, farbe );
  106. zRObj.drawLinieH( (int)xPos - 3, (int)yPos + 5, 6, farbe );
  107. }
  108. }
  109. // constant
  110. bool Spieler::berührt( double px, double py ) const
  111. {
  112. return !durchlässig && sqrt( (double)( px - xPos ) * ( px - xPos ) + ( py - yPos ) * ( py - yPos ) ) <= 20;
  113. }
  114. int Spieler::getX() const
  115. {
  116. return (int)xPos;
  117. }
  118. int Spieler::getY() const
  119. {
  120. return (int)yPos;
  121. }
  122. float Spieler::getXSpeed() const
  123. {
  124. return (float)xSpeed;
  125. }
  126. float Spieler::getYSpeed() const
  127. {
  128. return (float)ySpeed;
  129. }
  130. void Spieler::save( Datei *zD ) const
  131. {
  132. zD->schreibe( (char *)&xPos, 8 );
  133. zD->schreibe( (char *)&yPos, 8 );
  134. zD->schreibe( (char *)&xSpeed, 8 );
  135. zD->schreibe( (char *)&ySpeed, 8 );
  136. zD->schreibe( (char *)&durchlässig, 8 );
  137. }
  138. Spieler *Spieler::copy() const
  139. {
  140. Spieler *ret = new Spieler();
  141. ret->xPos = xPos;
  142. ret->yPos = yPos;
  143. ret->xSpeed = xSpeed;
  144. ret->ySpeed = ySpeed;
  145. ret->durchlässig = durchlässig;
  146. ret->farbe = farbe;
  147. return ret;
  148. }