implement undo function
This commit is contained in:
		@@ -26,6 +26,8 @@
 | 
				
			|||||||
                Winner: {{trick_winner}} with Card {{highest_card}}
 | 
					                Winner: {{trick_winner}} with Card {{highest_card}}
 | 
				
			||||||
                <a href="/control/next_hand/">start next hand</a>
 | 
					                <a href="/control/next_hand/">start next hand</a>
 | 
				
			||||||
                {% endif %}
 | 
					                {% endif %}
 | 
				
			||||||
 | 
					                <br>
 | 
				
			||||||
 | 
					                <a href="/control/undo_last/">undo last card</a>
 | 
				
			||||||
<!--
 | 
					<!--
 | 
				
			||||||
            <ul>
 | 
					            <ul>
 | 
				
			||||||
                <li>
 | 
					                <li>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,3 +51,34 @@ async def start_next_trick(req, resp):
 | 
				
			|||||||
            pass
 | 
					            pass
 | 
				
			||||||
    api.redirect(resp, '/control/', status_code=303)
 | 
					    api.redirect(resp, '/control/', status_code=303)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@api.route("/control/undo_last/")
 | 
				
			||||||
 | 
					async def undo_last(req, resp):
 | 
				
			||||||
 | 
					    hand_finished = the_game.is_hand_finished()
 | 
				
			||||||
 | 
					    if the_game.played_cards:
 | 
				
			||||||
 | 
					        if not hand_finished:
 | 
				
			||||||
 | 
					            p, c = the_game.played_cards.pop()
 | 
				
			||||||
 | 
					            the_game.active_player -= 1
 | 
				
			||||||
 | 
					            p.add_card(c)
 | 
				
			||||||
 | 
					            for ws in the_game.websockets:
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    await ws.send_text("reload")
 | 
				
			||||||
 | 
					                except Exception as e:
 | 
				
			||||||
 | 
					                    pass
 | 
				
			||||||
 | 
					    else:
 | 
				
			||||||
 | 
					        if the_game.num_tricks_played > 0:
 | 
				
			||||||
 | 
					            the_game.num_tricks_played -= 1;
 | 
				
			||||||
 | 
					            the_game.played_cards = the_game.last_trick;
 | 
				
			||||||
 | 
					            the_game.active_player = len(the_game.players) - 1
 | 
				
			||||||
 | 
					            player, _ = the_game.get_trick_winner()
 | 
				
			||||||
 | 
					            player.tricks_taken -= 1
 | 
				
			||||||
 | 
					            the_game.players_ordered = [p for p, _ in the_game.played_cards]
 | 
				
			||||||
 | 
					            p, c = the_game.played_cards.pop()
 | 
				
			||||||
 | 
					            p.add_card(c)
 | 
				
			||||||
 | 
					            for ws in the_game.websockets:
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    await ws.send_text("reload")
 | 
				
			||||||
 | 
					                except Exception as e:
 | 
				
			||||||
 | 
					                    pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    api.redirect(resp, '/control/', status_code=303)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,6 +73,10 @@ class Player:
 | 
				
			|||||||
    def take_trick(self):
 | 
					    def take_trick(self):
 | 
				
			||||||
        self.tricks_taken += 1
 | 
					        self.tricks_taken += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def add_card(self, card):
 | 
				
			||||||
 | 
					        self.cards.append(card)
 | 
				
			||||||
 | 
					        self.cards = sorted(self.cards, key=attrgetter('color', 'value'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class WizGame:
 | 
					class WizGame:
 | 
				
			||||||
    def __init__(self, player_names: list):
 | 
					    def __init__(self, player_names: list):
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user