-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
92 lines (70 loc) · 2.48 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from utils import (
distribute_cards,
finish_round,
get_cards,
wait_finish_round,
wait_for_cards,
send_bids,
wait_and_respond_to_bids,
wait_get_cards,
)
from network import Network
import logging
import socket
import os
logging.basicConfig(level=logging.DEBUG)
def main():
# Init network and players
network = Network()
address = socket.gethostbyname(socket.gethostname())
local_player = network.get_chair(address)
loser = False
winner = False
counter = up_down_counter()
while any(player.hp > 0 for player in network.players):
cards_in_round = next(counter)
print(f"You have {local_player.hp} HP")
# Apenas o dealer envia as mensagens do tipo "shuffle" para entregar as cartas,
# Outros players aguardam as mensagens, se forem destinatarios enviam "shuffle" com confirm="true" para o dealer enviar a proxima carta
# Quando acabam as cartas, o dealer envia um "end_shuffle"
if local_player.dealer:
distribute_cards(local_player, network, cards_in_round)
else:
wait_for_cards(local_player, network)
print(f"Your cards are: {local_player.cards}. Wait to bid.")
# Novamente apenas o dealer ira enviar as mensagens do tipo "bid" para cada outro jogador.
# Outros players aguardam a mensagem, se forem destinararios, colocam a "bid" e confirm=true na mensagem, e enviam para o dealer
# Quandos acabarem os players, o dealer envia uma mensagem para todos com "end_bid"
if local_player.dealer:
send_bids(network, cards_in_round)
else:
wait_and_respond_to_bids(local_player, network, cards_in_round)
if local_player.dealer:
get_cards(network, cards_in_round)
else:
wait_get_cards(network, local_player)
if local_player.dealer:
finish_round(network)
else:
wait_finish_round(network, local_player)
network.pass_dealer()
if local_player.hp == 0:
loser = True
break
network.remove_dead_players()
if len(network.players) == 1:
winner = True
break
network.reset_players_for_new_round()
if loser:
print("You lost!")
if winner:
print("You won!")
def up_down_counter():
while True:
for i in range(13, 0, -1):
yield i
for i in range(2, 14):
yield i
if __name__ == "__main__":
main()