Tarot game:

- draw game managed
- we can now play continuously \o/
This commit is contained in:
Goffi 2011-05-23 00:46:51 +02:00
commit 2ff3e80b08

View file

@ -205,7 +205,6 @@ class Tarot():
@param played: cards currently on the table
@param winner: nick of the trick winner"""
#TODO: manage the case where excuse is played on the last trick (and lost)
#TODO: gof: manage excuse (fool)
players_data = game_data['players_data']
excuse = TarotCard(("atout","excuse"))
@ -260,6 +259,20 @@ class Tarot():
debug(_("%(excuse_owner)s keep the Excuse but has not card to give, %(winner)s is waiting for one") % {'excuse_owner':excuse_player, 'winner':winner})
def __draw_game(self, game_data):
"""The game is draw, no score change
@param game_data: data of the game
@return: tuple with (string victory message, list of winners, list of loosers)"""
players_data = game_data['players_data']
scores_str = _('Draw game')
scores_str+='\n'
for player in game_data['players']:
scores_str+=_("\n--\n%(player)s:\nscore for this game ==> %(score_game)i\ntotal score ==> %(total_score)i") % {'player':player, 'score_game':0, 'total_score': players_data[player]['score']}
debug(scores_str)
return (scores_str, [], [])
def __calculate_scores(self, game_data):
"""The game is finished, time to know who won :)
@param game_data: data of the game
@ -547,7 +560,7 @@ class Tarot():
hand = game_data['hand'] = {}
hand_size = game_data['hand_size']
chien = game_data['chien'] = []
for i in range(4): #TODO: distribute according to real Tarot rules (3 by 3 counter-clockwise, 1 card at once to chien)
for i in range(4):
hand[players[i]] = deck[0:hand_size]
del deck[0:hand_size]
chien.extend(deck)
@ -617,7 +630,6 @@ class Tarot():
mess.firstChildElement().addChild(self.__ask_contrat())
self.host.profiles[profile].xmlstream.send(mess)
else:
#TODO: gof: manage "everybody pass" case
best_contrat = [None, "Passe"]
for player in game_data['players']:
contrat = players_data[player]['contrat']
@ -626,6 +638,16 @@ class Tarot():
if idx_pl > idx_best:
best_contrat[0] = player
best_contrat[1] = contrat
if best_contrat[1] == "Passe":
debug(_("Everybody is passing, round ended"))
to_jid = jid.JID(room_jid.userhost())
mess = self.createGameElt(to_jid)
mess.firstChildElement().addChild(self.__give_scores(*self.__draw_game(game_data)))
self.host.profiles[profile].xmlstream.send(mess)
game_data['init_player'] = (game_data['init_player'] + 1) % len(game_data['players']) #we change the dealer
for player in game_data['players']:
game_data['status'][player] = "init"
return
debug (_("%(player)s win the bid with %(contrat)s") % {'player':best_contrat[0],'contrat':best_contrat[1]})
game_data['contrat'] = best_contrat[1]
@ -718,6 +740,9 @@ class Tarot():
mess = self.createGameElt(to_jid)
chien_elt = mess.firstChildElement().addChild(self.__give_scores(*self.__calculate_scores(game_data)))
self.host.profiles[profile].xmlstream.send(mess)
game_data['init_player'] = (game_data['init_player'] + 1) % len(game_data['players']) #we change the dealer
for player in game_data['players']:
game_data['status'][player] = "init"
return
#next player is the winner
next_player = game_data['first_player'] = self.__next_player(game_data, winner)