Bestenliste.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "Bestenliste.h"
  2. // Inhalt der Bestenliste Klasse aus Bestenliste.h
  3. // Konstruktor
  4. Bestenliste::Bestenliste()
  5. {
  6. spielerPunkte = new Array< int >();
  7. spielerNummern = new Array< int >();
  8. teamPunkte = new Array< int >();
  9. teamMaxPunkte = new Array< int >();
  10. teamNummern = new Array< int >();
  11. spielerAnzahl = 0;
  12. teamAnzahl = 0;
  13. ref = 1;
  14. }
  15. // Destruktor
  16. Bestenliste::~Bestenliste()
  17. {
  18. spielerPunkte->release();
  19. spielerNummern->release();
  20. teamPunkte->release();
  21. teamMaxPunkte->release();
  22. teamNummern->release();
  23. }
  24. // nicht constant
  25. void Bestenliste::setTeamMaxPunkte( int team, int mP )
  26. {
  27. int i = -1;
  28. for( int j = 0; j < teamAnzahl; j++ )
  29. {
  30. if( teamNummern->hat( j ) && teamNummern->get( j ) == team )
  31. {
  32. i = j;
  33. break;
  34. }
  35. }
  36. if( i < 0 )
  37. {
  38. i = teamAnzahl;
  39. teamNummern->add( team, teamAnzahl );
  40. teamPunkte->add( 0, teamAnzahl );
  41. teamMaxPunkte->add( 0, teamAnzahl );
  42. teamAnzahl++;
  43. }
  44. teamMaxPunkte->set( mP, i );
  45. }
  46. void Bestenliste::setTeamPunkte( int team, int p )
  47. {
  48. for( int i = 0; i < teamAnzahl; i++ )
  49. {
  50. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  51. {
  52. teamPunkte->set( p, i );
  53. return;
  54. }
  55. }
  56. }
  57. void Bestenliste::setSpielerPunkte( int spieler, int p )
  58. {
  59. int i = -1;
  60. for( int j = 0; j < spielerAnzahl; j++ )
  61. {
  62. if( spielerNummern->hat( j ) && spielerNummern->get( j ) == spieler )
  63. {
  64. i = j;
  65. break;
  66. }
  67. }
  68. if( i < 0 )
  69. {
  70. i = spielerAnzahl;
  71. spielerNummern->add( spieler, spielerAnzahl );
  72. spielerPunkte->add( 0, spielerAnzahl );
  73. spielerAnzahl++;
  74. }
  75. spielerPunkte->set( p, i );
  76. }
  77. void Bestenliste::addTeamPunkt( int team, bool plus )
  78. {
  79. for( int i = 0; i < teamAnzahl; i++ )
  80. {
  81. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  82. {
  83. int jetzt = teamPunkte->hat( i ) ? teamPunkte->get( i ) : 0;
  84. if( plus )
  85. jetzt++;
  86. else
  87. jetzt--;
  88. if( jetzt < 0 )
  89. jetzt = 0;
  90. teamPunkte->set( jetzt, i );
  91. return;
  92. }
  93. }
  94. }
  95. void Bestenliste::addSpielerPunkt( int spieler, bool plus )
  96. {
  97. for( int i = 0; i < spielerAnzahl; i++ )
  98. {
  99. if( spielerNummern->hat( i ) && spielerNummern->get( i ) == spieler )
  100. {
  101. if( plus )
  102. spielerPunkte->set( ( spielerPunkte->hat( i ) ? spielerPunkte->get( i ) : 0 ) + 1, i );
  103. else
  104. spielerPunkte->set( ( spielerPunkte->hat( i ) ? spielerPunkte->get( i ) : 0 ) - 1, i );
  105. return;
  106. }
  107. }
  108. }
  109. // constant
  110. bool Bestenliste::istTeamAmLeben( int team ) const
  111. {
  112. for( int i = 0; i < teamAnzahl; i++ )
  113. {
  114. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  115. return teamPunkte->hat( i ) && teamPunkte->get( i ) != 0;
  116. }
  117. return 0;
  118. }
  119. bool Bestenliste::hatTeamGewonnen( int team ) const
  120. {
  121. for( int i = 0; i < teamAnzahl; i++ )
  122. {
  123. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  124. return ( ( teamPunkte->hat( i ) && teamMaxPunkte->hat( i ) ) ? ( teamPunkte->get( i ) >= teamMaxPunkte->get( i ) ) : 0 );
  125. }
  126. return 0;
  127. }
  128. int Bestenliste::getTeamPunkte( int team ) const
  129. {
  130. for( int i = 0; i < teamAnzahl; i++ )
  131. {
  132. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  133. return teamPunkte->hat( i ) ? teamPunkte->get( i ) : 0;
  134. }
  135. return 0;
  136. }
  137. int Bestenliste::getTeamMaxPunkte( int team ) const
  138. {
  139. for( int i = 0; i < teamAnzahl; i++ )
  140. {
  141. if( teamNummern->hat( i ) && teamNummern->get( i ) == team )
  142. return teamMaxPunkte->hat( i ) ? teamMaxPunkte->get( i ) : 0;
  143. }
  144. return 0;
  145. }
  146. // Reference Counting
  147. Bestenliste *Bestenliste::getThis()
  148. {
  149. ref++;
  150. return this;
  151. }
  152. Bestenliste *Bestenliste::release()
  153. {
  154. ref--;
  155. if( !ref )
  156. delete this;
  157. return 0;
  158. }