80 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from app_instance import api
 | |
| 
 | |
| from wiz_game import the_game
 | |
| from starlette.websockets import WebSocketDisconnect
 | |
| import asyncio
 | |
| 
 | |
| 
 | |
| playing_lock = asyncio.Lock()
 | |
| 
 | |
| 
 | |
| @api.route("/player/{player}")
 | |
| def show(req, resp, player: str):
 | |
|     p = int(player)
 | |
|     tcard = the_game.trump_card
 | |
|     tcolor = the_game.get_trump_color()
 | |
|     try:
 | |
|         isActive = the_game.players_ordered[the_game.active_player].id == p
 | |
|     except IndexError:
 | |
|         isActive = False
 | |
| 
 | |
|     prev_player = the_game.get_prev_player()
 | |
|     if tcard and tcard.value == 'Z' and tcolor == '-':
 | |
|         choose_trump_color = True
 | |
|     else:
 | |
|         choose_trump_color = False
 | |
|     resp.content = api.template('home/player.html', player=p, playerActive=isActive, choose_trump_player=prev_player,
 | |
|                                 cards=the_game.players[p].cards, choose_trump_color=choose_trump_color,
 | |
|                                 trump_card=tcard, trump_color=tcolor, played_cards=the_game.played_cards, last_trick=the_game.last_trick)
 | |
| 
 | |
| 
 | |
| async def play_card(player, card):
 | |
|     global playing_lock
 | |
|     async with playing_lock:
 | |
|         try:
 | |
|             isActive = the_game.players_ordered[the_game.active_player].id == player
 | |
|         except IndexError:
 | |
|             isActive = False
 | |
|         if isActive:
 | |
|             the_game.play_card(player, card)
 | |
|             if the_game.is_hand_finished():
 | |
|                 trick_winner, highest_card = the_game.get_trick_winner()
 | |
|                 trick_winner.take_trick()
 | |
|             elif the_game.is_trick_finished():
 | |
|                 trick_winner, highest_card = the_game.get_trick_winner()
 | |
|                 trick_winner.take_trick()
 | |
|                 the_game.next_trick()
 | |
|     await the_game.send_page_reload()
 | |
| 
 | |
| 
 | |
| @api.route("/player/{player}/play/{card}")
 | |
| async def play(req, resp, player: str, card: str):
 | |
|     p = int(player)
 | |
|     c = int(card)
 | |
|     play_card(p, c)
 | |
|     url = '/player/'+player
 | |
|     api.redirect(resp, url, status_code=303)
 | |
| 
 | |
| @api.route("/player/{player}/set_trump/{trump}")
 | |
| async def set_trump_color(req, resp, player, trump):
 | |
|     p = int(player)
 | |
|     the_game.set_trump_color(trump)
 | |
|     url = '/player/'+player
 | |
|     await the_game.send_page_reload()
 | |
|     api.redirect(resp, url, status_code=303)
 | |
| 
 | |
| 
 | |
| @api.route('/ws', websocket=True)
 | |
| async def websocket(ws):
 | |
|     await ws.accept()
 | |
|     the_game.websockets.append(ws)
 | |
|     try:
 | |
|         cmd = await ws.receive_text()
 | |
|         fct, args = cmd.split()
 | |
|         if fct == "playcard":
 | |
|             p, c = map(int, args.split(':'))
 | |
|             await play_card(p, c)
 | |
|     except WebSocketDisconnect:
 | |
|         the_game.websockets.remove(ws)
 | |
| 
 |