69 |
g_assert (p != NULL); |
g_assert (p != NULL); |
70 |
send_message_SAY_resume (sock_id, g); |
send_message_SAY_resume (sock_id, g); |
71 |
send_message_SAY_cards_in_hand (sock_id, g, i); |
send_message_SAY_cards_in_hand (sock_id, g, i); |
72 |
g->rules->bids[i] = LIBMT_BID_UNDEF; |
RULES (g->rules)->bids[i] = LIBMT_BID_UNDEF; |
73 |
} |
} |
74 |
} |
} |
75 |
|
|
89 |
s1 = g_array_index (g->players, int, turn); |
s1 = g_array_index (g->players, int, turn); |
90 |
p1 = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s1)); |
p1 = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s1)); |
91 |
g_assert (p1 != NULL); |
g_assert (p1 != NULL); |
92 |
if ((g->rules->bids[turn] == LIBMT_BID_UNDEF) |
if ((RULES (g->rules)->bids[turn] == LIBMT_BID_UNDEF) |
93 |
|| |
|| |
94 |
((LIBMT_BID_CMP (g->rules->bids[turn], LIBMT_BID_PASSE) |
((LIBMT_BID_CMP (RULES (g->rules)->bids[turn], LIBMT_BID_PASSE) |
95 |
&& LIBMT_BID_CMP (g->rules->bids[turn], g->rules->bid)))) |
&& LIBMT_BID_CMP (RULES (g->rules)->bids[turn], |
96 |
|
RULES (g->rules)->bid)))) |
97 |
{ |
{ |
98 |
p1->state = PLAYER_STATE_ASKING_BID; |
p1->state = PLAYER_STATE_ASKING_BID; |
99 |
p1->state_change_date = 0; |
p1->state_change_date = 0; |
114 |
int i; |
int i; |
115 |
for (i = 0; i < g->players->len; i++) |
for (i = 0; i < g->players->len; i++) |
116 |
{ |
{ |
117 |
int s1; |
int s; |
118 |
player_t *p1; |
player_t *p; |
119 |
s1 = g_array_index (g->players, int, i); |
s = g_array_index (g->players, int, i); |
120 |
p1 = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s1)); |
p = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s)); |
121 |
g_assert (p1 != NULL); |
g_assert (p != NULL); |
122 |
send_ask_bids (s1, p1, 1); |
send_ask_bids (s, p, 1); |
123 |
} |
} |
124 |
g->state = GAME_STATE_CHECKING_BIDS; |
g->state = GAME_STATE_CHECKING_BIDS; |
125 |
} |
} |
133 |
* Please do not remove this comment |
* Please do not remove this comment |
134 |
* Yves (June 6th 2003) |
* Yves (June 6th 2003) |
135 |
*/ |
*/ |
136 |
if ((LIBMT_BID_CMP (g->rules->bid, LIBMT_BID_PRISE)) |
if ((LIBMT_BID_CMP (RULES (g->rules)->bid, LIBMT_BID_PRISE)) |
137 |
&& (LIBMT_BID_CMP (g->rules->bid, LIBMT_BID_GARDE))) |
&& (LIBMT_BID_CMP (RULES (g->rules)->bid, LIBMT_BID_GARDE))) |
138 |
{ |
{ |
139 |
g->state = GAME_STATE_PLAYING_GAME; |
g->state = GAME_STATE_ASKING_CHIEN_DONE; |
140 |
} |
} |
141 |
else |
else |
142 |
{ |
{ |
152 |
g_assert (p1 != NULL); |
g_assert (p1 != NULL); |
153 |
send_info_chien (s1, p1); |
send_info_chien (s1, p1); |
154 |
} |
} |
155 |
s1 = g_array_index (g->players, int, g->rules->preneur); |
s1 = g_array_index (g->players, int, RULES (g->rules)->preneur); |
156 |
p1 = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s1)); |
p1 = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s1)); |
157 |
g_assert (p1 != NULL); |
g_assert (p1 != NULL); |
158 |
if (g->nb_players_max == 3) |
if (g->nb_players_max == 3) |
165 |
pos = player_get_position (p1); |
pos = player_get_position (p1); |
166 |
for (i = 0; i < nb; i++) |
for (i = 0; i < nb; i++) |
167 |
{ |
{ |
168 |
g->rules->card_status[g->rules->chien[i]] = pos; |
RULES (g->rules)->card_status[RULES (g->rules)->chien[i]] = pos; |
169 |
} |
} |
170 |
send_ask_chien (s1, p1); |
send_ask_chien (s1, p1); |
171 |
g->state = GAME_STATE_ASKING_CHIEN; |
g->state = GAME_STATE_ASKING_CHIEN; |
172 |
} |
} |
173 |
} |
} |
174 |
|
|
175 |
void |
gboolean |
176 |
|
test_end_turn (game_t * g) |
177 |
|
{ |
178 |
|
int previous_winner = g->turn_starter; |
179 |
|
int winner; |
180 |
|
int i; |
181 |
|
winner = g->rule_compute_winner (g, previous_winner); |
182 |
|
|
183 |
|
for (i = 0; i < g->nb_players_max; i++) |
184 |
|
{ |
185 |
|
RULES (g->rules)->card_status[RULES (g->rules)->board[i]] = 10 + winner; |
186 |
|
} |
187 |
|
|
188 |
|
g->turn = winner; |
189 |
|
g->turn_nb++; |
190 |
|
if ((g->turn_nb == 15) && (g->nb_players_max == 5)) |
191 |
|
return (TRUE); |
192 |
|
if ((g->turn_nb == 18) && (g->nb_players_max == 4)) |
193 |
|
return (TRUE); |
194 |
|
if ((g->turn_nb == 24) && (g->nb_players_max == 3)) |
195 |
|
return (TRUE); |
196 |
|
return (FALSE); |
197 |
|
} |
198 |
|
|
199 |
|
gboolean |
200 |
play_game (game_t * g) |
play_game (game_t * g) |
201 |
{ |
{ |
202 |
|
int i; |
203 |
|
int turn = g->turn; |
204 |
|
gboolean rv; |
205 |
|
for (i = 0; i < g->nb_players_max; i++) |
206 |
|
{ |
207 |
|
int s; |
208 |
|
player_t *p; |
209 |
|
turn++; |
210 |
|
if (turn >= g->nb_players_max) |
211 |
|
turn = 0; |
212 |
|
|
213 |
|
s = g_array_index (g->players, int, turn); |
214 |
|
p = g_tree_lookup (config->sock_id, GINT_TO_POINTER (s)); |
215 |
|
g_assert (p != NULL); |
216 |
|
if (RULES (g->rules)->board[turn] == -1) |
217 |
|
{ |
218 |
|
p->state = PLAYER_STATE_ASKING_CARD; |
219 |
|
p->state_change_date = 0; |
220 |
|
g->turn = turn; |
221 |
|
send_waiting_for_player (p); |
222 |
|
break; |
223 |
|
|
224 |
|
} |
225 |
|
} |
226 |
|
rv = FALSE; |
227 |
|
if (i == g->nb_players_max) |
228 |
|
rv = test_end_turn (g); |
229 |
|
return (rv); |
230 |
} |
} |
231 |
|
|
232 |
gboolean |
gboolean |
269 |
g->state = GAME_STATE_NOT_PLAYING_GAME; |
g->state = GAME_STATE_NOT_PLAYING_GAME; |
270 |
for (i = 0; i < g->nb_players_max; i++) |
for (i = 0; i < g->nb_players_max; i++) |
271 |
{ |
{ |
272 |
if (g->rules->bids[i] != LIBMT_BID_PASSE) |
if (RULES (g->rules)->bids[i] != LIBMT_BID_PASSE) |
273 |
{ |
{ |
274 |
g_assert (g->rules->bids[i] != LIBMT_BID_UNDEF); |
g_assert (RULES (g->rules)->bids[i] != LIBMT_BID_UNDEF); |
275 |
g->state = GAME_STATE_CHIEN_MANAGMENT; |
g->state = GAME_STATE_CHIEN_MANAGMENT; |
276 |
} |
} |
277 |
} |
} |
279 |
else if (g->state == GAME_STATE_NOT_PLAYING_GAME) |
else if (g->state == GAME_STATE_NOT_PLAYING_GAME) |
280 |
{ |
{ |
281 |
/* Do we restart the game here ? */ |
/* Do we restart the game here ? */ |
282 |
|
g->state = GAME_STATE_PLAY_AGAIN; |
283 |
} |
} |
284 |
else if (g->state == GAME_STATE_CHIEN_MANAGMENT) |
else if (g->state == GAME_STATE_CHIEN_MANAGMENT) |
285 |
{ |
{ |
291 |
} |
} |
292 |
else if (g->state == GAME_STATE_ASKING_CHIEN_DONE) |
else if (g->state == GAME_STATE_ASKING_CHIEN_DONE) |
293 |
{ |
{ |
294 |
|
int i; |
295 |
|
for (i = 0; i < 5; i++) |
296 |
|
RULES (g->rules)->board[i] = -1; |
297 |
|
g->turn = g->game_turn; |
298 |
|
g->turn_nb = 0; |
299 |
g->state = GAME_STATE_PLAYING_GAME; |
g->state = GAME_STATE_PLAYING_GAME; |
300 |
} |
} |
301 |
else if (g->state == GAME_STATE_PLAYING_GAME) |
else if (g->state == GAME_STATE_PLAYING_GAME) |
302 |
{ |
{ |
303 |
play_game (g); |
if (play_game (g)) |
304 |
|
{ |
305 |
|
g->state = GAME_STATE_END_GAME_RESULTS; |
306 |
|
} |
307 |
|
} |
308 |
|
else if (g->state == GAME_STATE_END_GAME_RESULTS) |
309 |
|
{ |
310 |
|
/* We should compute the scores here and send them */ |
311 |
|
g->state = GAME_STATE_PLAY_AGAIN; |
312 |
|
} |
313 |
|
else if (g->state == GAME_STATE_PLAY_AGAIN) |
314 |
|
{ |
315 |
|
/* What do we do here to start a new game ? */ |
316 |
|
state_change (g, PLAYER_STATE_PLAY_AGAIN, GAME_STATE_PLAY_AGAIN); |
317 |
} |
} |
318 |
return (FALSE); |
return (FALSE); |
319 |
} |
} |
346 |
case PLAYER_STATE_ASKING_BID: |
case PLAYER_STATE_ASKING_BID: |
347 |
send_ask_bids (sock_id, p, 0); |
send_ask_bids (sock_id, p, 0); |
348 |
break; |
break; |
349 |
|
case PLAYER_STATE_ASKING_CARD: |
350 |
|
send_ask_card (sock_id, p, 0); |
351 |
|
break; |
352 |
|
case PLAYER_STATE_PLAY_AGAIN: |
353 |
|
protocol_send (sock_id, PROTOCOL_ASK_PLAY_AGAIN, "Do you want to play again (not implemented yet) ?"); |
354 |
|
break; |
355 |
case PLAYER_STATE_UNDEF: |
case PLAYER_STATE_UNDEF: |
356 |
protocol_send (sock_id, PROTOCOL_WARNING, "Undefined state"); |
protocol_send (sock_id, PROTOCOL_WARNING, "Undefined state"); |
357 |
break; |
break; |