Check-in Lasker-2.2.3 tar ball from samba.org
[capablanca.git] / lasker-2.2.3 / bots / mamer / TourneyPlayers.cc
1 //--------------------------------------------------------------------------
2 // TourneyPlayers.cc - Source file for the TourneyPlayers class
3 //
4 // Matthew E. Moses && Michael A. Long
5 //
6 // $Revision: 1.7 $
7 // $Date: 1998/09/10 19:57:17 $
8 //
9 // $Author: mlong $
10 // $Locker:  $
11 //
12 // $Log: TourneyPlayers.cc,v $
13 // Revision 1.7  1998/09/10 19:57:17  mlong
14 // lots of little bug fixes and a few new features
15 //
16 // Revision 1.6  1998/04/29 15:23:19  mlong
17 // prepairing for the move to daimi
18 // new sorting routine.
19 //
20 //
21 // Revision 1.2  1997/10/08 21:03:35  chess
22 // preparing for move to oracle machine at eworks.
23 //
24 // Revision 1.1  1997/05/14 16:59:13  chess
25 // Initial revision
26 //
27 //
28 //--------------------------------------------------------------------------
29
30 // static char RCSid[] = "$Id: TourneyPlayers.cc,v 1.7 1998/09/10 19:57:17 mlong Exp $";
31
32 #include "TourneyPlayers.hh"
33
34 //- Constructor -----------------------------------------------------------
35 TourneyPlayers::TourneyPlayers(char *n, int r, float s) {
36   perform=0;
37   upset=0;
38
39   totalWhites = 0;
40   totalBlacks = 0;
41   consecutiveBlacks = 0;
42   consecutiveWhites = 0;
43
44   activeFlag = 1;
45   sortValue = r/10000.0;
46
47   dueColor = 0;
48   paired = 0;
49
50   memset(oppName, '\0', NAMELEN);
51
52   memset(name, '\0', NAMELEN);
53   strcpy(name, n);
54
55   rating = r;
56   score = s;
57
58   oppChoice=0;
59   location=ONLINE;
60 }
61
62 //- Constructor -----------------------------------------------------------
63 TourneyPlayers::TourneyPlayers() {
64   perform=0;
65   upset=0;
66
67   totalWhites = 0;
68   totalBlacks = 0;
69   consecutiveBlacks = 0;
70   consecutiveWhites = 0;
71
72   activeFlag = 1;
73   sortValue = 0.0;
74
75   dueColor = 0;
76   paired = 0;
77
78   memset(oppName, '\0', NAMELEN);
79
80   memset(name, '\0', NAMELEN);
81   rating = 0;
82   score = 0;
83
84   oppChoice=0;
85   location=ONLINE;
86 }
87
88 //- DeConstructor ---------------------------------------------------------
89 TourneyPlayers::~TourneyPlayers() {
90 }
91
92 //- AlreadyPlayed --------------------------------------------------------
93 int TourneyPlayers::AlreadyPlayed(char *oppName) {
94   Player *temp;
95
96   LinkListIter<Player> opponentIter(opponentList);
97
98   while((temp = opponentIter.Next())) {
99     if(!strcmp(oppName, temp->name)) {
100       return 1;
101     }
102   }
103
104   return 0;
105 }
106
107 //- Start of RemovePotentialOppList
108 int TourneyPlayers::RemovePotentialOppList() {
109   Player *temp;
110
111   LinkListIter<Player> opponentIter(potentialOpponentList);
112   
113   while((temp = opponentIter.Next())) {
114     potentialOpponentList.Delete(temp);
115   }
116   return 1;
117 }//- end of RemovePotentialOppList
118
119 //- Start of RemoveFromOppList -------------------------------------------------
120 void TourneyPlayers::RemoveFromOppList(char *name) {
121   Player *p=NULL;
122
123   LinkListIter<Player> opponentIter(opponentList);
124
125   while((p = opponentIter.Next())) {
126     if(strcasecmp(p->name, name) == 0) {
127       opponentList.Delete(p);
128       break;
129     }
130   }
131 }//- end RemoveFromOppList -----------------------------------------------------
132
133 //- Start of RemoveLastOpponent -------------------------------------------------
134 void TourneyPlayers::RemoveLastOpponent() {
135   Player *p=NULL, *last=NULL;
136   LinkListIter<Player> opponentIter(opponentList);
137
138   opponentIter.Reset();
139   while((p = opponentIter.Next()))
140     last = p;
141
142   cout << name << " " << last->name << endl;  
143   opponentList.Delete(last);
144 }//- end RemoveLastOpponent -----------------------------------------------------    
145        
146 //- Start GetOpponentPlayer --------------------------------------------------------
147 Player *TourneyPlayers::GetOpponentPlayer(char *oppName) {
148   Player *temp=NULL;
149   LinkListIter<Player> opponentIter(opponentList);
150
151   while((temp = opponentIter.Next())) {
152     if(!strcmp(oppName, temp->name)) {
153       return temp;
154     }
155   }
156
157   return NULL;
158 }//- end of GetOpponentPlayer
159
160 //- IsPaired ---------------------------------
161 int TourneyPlayers::IsPaired(void) {
162   return paired;
163 }//- end IsPaired
164
165 //- ColorDue ---------------------------------
166 int TourneyPlayers::ColorDue(void) {
167   return dueColor;
168 }//- end colorDue
169
170 //- NowPaired ---------------------------------
171 void TourneyPlayers::NowPaired(int value) {
172   paired = value;
173 }//- end NowPaired
174
175 //-ChangeColorDue ---------------------------------
176 void TourneyPlayers::ChangeColorDue(int value) {
177   dueColor = value;
178 }//- end ToggleColorDue
179
180 //- AddWhite ---------------------------------
181 void TourneyPlayers::AddWhite(void) {
182   consecutiveWhites++;
183   ChangeColorDue(0);
184   ClearBlacks();
185 }//- end AddWhite  
186
187 //- AddBlack ---------------------------------
188 void TourneyPlayers::AddBlack(void) {
189   consecutiveBlacks++;
190   ChangeColorDue(1);
191   ClearWhites();
192 }//- end AddBlack
193
194 //- ClearWhites ---------------------------------
195 void TourneyPlayers::ClearWhites(void) {
196   consecutiveWhites = 0;
197 }//- end ClearWhites
198
199 //- ClearBlacks ---------------------------------
200 void TourneyPlayers::ClearBlacks(void) {
201   consecutiveBlacks = 0;
202 }//- end ClearBlacks
203
204 //- GetTotalWhites ---------------------------------
205 int TourneyPlayers::GetTotalWhites(void) {
206   return totalWhites;
207 }//- end GetTotalWhites
208
209 //- GetTotalBlacks ---------------------------------
210 int TourneyPlayers::GetTotalBlacks(void) {
211   return totalBlacks;
212 }//- end GetTotalBlacks
213
214 //- GetConsecutiveWhites ---------------------------------
215 int TourneyPlayers::GetConsecutiveWhites(void) {
216   return consecutiveWhites;
217 }//- end GetConsecutiveWhites
218
219 //- GetConsecutiveBlacks ---------------------------------
220 int TourneyPlayers::GetConsecutiveBlacks(void) {
221   return consecutiveBlacks;
222 }//- end GetConsecutiveBlacks
223
224 //- CalculateScore --------------------------------------
225 void TourneyPlayers::CalculateScore(void) {
226   score = 0.0;
227   Player *opp;
228   LinkListIter<Player> opponentIter(opponentList);
229
230   while((opp = opponentIter.Next())) {
231     if(opp->floatValue > 0.0) {
232       score += opp->floatValue;
233     }
234   }
235   CalculatePerform();
236 }//- End of CalculateScore -------------------
237
238 //- CalculatePerform --------------------------------------
239 void TourneyPlayers::CalculatePerform(void) {
240   int total=0, counter=0, upsetpoints=0, rtng=0;
241   Player *opp;
242   LinkListIter<Player> opponentIter(opponentList);
243
244   while((opp = opponentIter.Next())) {
245     if(!strcmp(opp->name, "_BYE_")) continue;
246     rtng = opp->rating;
247     if(opp->rating <= 0) rtng = 1675;
248     if(opp->floatValue == 0.5) {
249       total += rtng;
250       if(rtng > rating)
251         upsetpoints += (rtng - rating)/2;
252     } else if(opp->floatValue == 1.0) {
253       total += (rtng + 400);
254       if(rtng > rating)
255         upsetpoints += (rtng - rating);
256     } else if(opp->floatValue == 0.0) {
257       total += (rtng - 400);
258     }
259     counter++;
260   }
261
262   if(counter > 0)
263     perform = total/counter;
264   else
265     perform = 0;
266   upset = upsetpoints;
267 }//- End of CalculatePerform -------------------
268
269
270