Spieler.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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ö )
  8. {
  9. if( typ == GEGNER )
  10. {
  11. xSpeed = ( ( rand() % 8001 ) / 1000.0 - 4.0 ) * 60;
  12. ySpeed = ( ( rand() % 8001 ) / 1000.0 - 4.0 ) * 60;
  13. durchlässig = 3;
  14. farbe = 0xFFFF0000;
  15. }
  16. if( typ == ZIEL )
  17. {
  18. xSpeed = ( ( rand() % 7001 ) / 1000.0 - 4.0 ) * 60;
  19. ySpeed = ( ( 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 = ( rand() % ( mapBr - 100 ) ) + 50;
  31. yPos = ( 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. // Destruktor
  50. Spieler::~Spieler()
  51. {
  52. }
  53. // nicht constant
  54. void Spieler::tick( double z, int mapBr, int mapHö )
  55. {
  56. if( farbe == 0xFF00FF00 )
  57. {
  58. if( getTastenStand( T_Links ) )
  59. xPos -= 150 * z;
  60. if( getTastenStand( T_Rechts ) )
  61. xPos += 150 * z;
  62. if( getTastenStand( T_Oben ) )
  63. yPos -= 150 * z;
  64. if( getTastenStand( T_Unten ) )
  65. yPos += 150 * z;
  66. }
  67. if( durchlässig )
  68. {
  69. durchlässig -= z;
  70. if( durchlässig < 0 )
  71. durchlässig = 0;
  72. }
  73. xPos += xSpeed * z;
  74. yPos += ySpeed * z;
  75. if( xPos < 10 )
  76. {
  77. xPos = 10;
  78. xSpeed = -xSpeed;
  79. }
  80. else if( xPos > mapBr - 10 )
  81. {
  82. xPos = mapBr - 10;
  83. xSpeed = -xSpeed;
  84. }
  85. else if( yPos < 10 )
  86. {
  87. yPos = 10;
  88. ySpeed = -ySpeed;
  89. }
  90. else if( yPos > mapHö - 10 )
  91. {
  92. yPos = mapHö - 10;
  93. ySpeed = -ySpeed;
  94. }
  95. }
  96. void Spieler::render( Bild &zRObj )
  97. {
  98. if( !durchlässig || (int)( durchlässig * 8 ) % 2 )
  99. {
  100. zRObj.drawKreis( (int)xPos, (int)yPos, 10, farbe );
  101. zRObj.drawKreis( (int)xPos - 3, (int)yPos - 3, 2, farbe );
  102. zRObj.drawKreis( (int)xPos + 3, (int)yPos - 3, 2, farbe );
  103. zRObj.drawLinieV( (int)xPos, (int)yPos - 1, 4, farbe );
  104. zRObj.drawLinieH( (int)xPos - 3, (int)yPos + 5, 6, farbe );
  105. }
  106. }
  107. // constant
  108. bool Spieler::berührt( double px, double py ) const
  109. {
  110. return !durchlässig && sqrt( (double)( px - xPos ) * ( px - xPos ) + ( py - yPos ) * ( py - yPos ) ) <= 20;
  111. }
  112. int Spieler::getX() const
  113. {
  114. return (int)xPos;
  115. }
  116. int Spieler::getY() const
  117. {
  118. return (int)yPos;
  119. }
  120. void Spieler::save( Datei *zD ) const
  121. {
  122. zD->schreibe( (char*)&xPos, 8 );
  123. zD->schreibe( (char*)&yPos, 8 );
  124. zD->schreibe( (char*)&xSpeed, 8 );
  125. zD->schreibe( (char*)&ySpeed, 8 );
  126. zD->schreibe( (char*)&durchlässig, 8 );
  127. }
  128. // Reference Counting
  129. Spieler *Spieler::getThis()
  130. {
  131. ref++;
  132. return this;
  133. }
  134. Spieler *Spieler::release()
  135. {
  136. ref--;
  137. if( !ref )
  138. delete this;
  139. return 0;
  140. }