Spieler.cpp 3.8 KB

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