looks like it works
This commit is contained in:
parent
c851d42bd1
commit
a7d9df1885
14
server.py
14
server.py
@ -11,19 +11,7 @@ def main():
|
|||||||
print("main started")
|
print("main started")
|
||||||
|
|
||||||
random.seed()
|
random.seed()
|
||||||
|
wiz_game.the_game.start_game()
|
||||||
#wiz_game.the_game.create_deck()
|
|
||||||
#wiz_game.the_game.add_player("p1", 1)
|
|
||||||
#wiz_game.the_game.add_player("p2", 2)
|
|
||||||
#wiz_game.the_game.add_player("p3", 3)
|
|
||||||
#wiz_game.the_game.add_player("p4", 4)
|
|
||||||
#wiz_game.the_game.deal_cards(12)
|
|
||||||
wiz_game.the_game.add_player("p1")
|
|
||||||
wiz_game.the_game.add_player("p2")
|
|
||||||
wiz_game.the_game.add_player("p3")
|
|
||||||
wiz_game.the_game.add_player("p4")
|
|
||||||
wiz_game.the_game.init_game()
|
|
||||||
|
|
||||||
|
|
||||||
api.run(port=19203, address="127.0.0.1")
|
api.run(port=19203, address="127.0.0.1")
|
||||||
exit(0)
|
exit(0)
|
||||||
|
@ -11,13 +11,7 @@
|
|||||||
<strong> Table </strong><br>
|
<strong> Table </strong><br>
|
||||||
{% for player,card in played_cards %}
|
{% for player,card in played_cards %}
|
||||||
||
|
||
|
||||||
{% if player.id == active_player %}
|
|
||||||
<font color="red">
|
|
||||||
{% endif %}
|
|
||||||
{{player.name}}: {{card}}
|
{{player.name}}: {{card}}
|
||||||
{% if player.id == active_player %}
|
|
||||||
</font>
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
||
|
||
|
||||||
<br>
|
<br>
|
||||||
@ -36,7 +30,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if choose_trump_color %}
|
{% if choose_trump_color and (player == choose_trump_player) %}
|
||||||
<strong>Choose Trump Color:</strong>
|
<strong>Choose Trump Color:</strong>
|
||||||
<a href="/player/{{player}}/set_trump/r">Red></a>
|
<a href="/player/{{player}}/set_trump/r">Red></a>
|
||||||
<a href="/player/{{player}}/set_trump/g">Green></a>
|
<a href="/player/{{player}}/set_trump/g">Green></a>
|
||||||
|
@ -9,17 +9,23 @@ def show(req, resp, player: str):
|
|||||||
name = the_game.players[p].name
|
name = the_game.players[p].name
|
||||||
tcard = the_game.trump_card
|
tcard = the_game.trump_card
|
||||||
tcolor = the_game.get_trump_color()
|
tcolor = the_game.get_trump_color()
|
||||||
table = the_game.table
|
#isActive = the_game.is_players_turn(p)
|
||||||
isActive = the_game.is_players_turn(p)
|
try:
|
||||||
active_player = the_game.active_player
|
isActive = the_game.players_ordered[the_game.active_player].id == p
|
||||||
|
print("show p: {} | {}".format(the_game.players_ordered[the_game.active_player].id, p))
|
||||||
|
except IndexError:
|
||||||
|
isActive = False
|
||||||
|
print("show p: {} | {}".format('None', p))
|
||||||
|
|
||||||
|
#active_player = the_game.active_player
|
||||||
prev_player = the_game.get_prev_player()
|
prev_player = the_game.get_prev_player()
|
||||||
if tcard.value == 'Z' and p == prev_player and tcolor == '-':
|
if tcard.value == 'Z' and tcolor == '-':
|
||||||
choose_trump_color = True
|
choose_trump_color = True
|
||||||
else:
|
else:
|
||||||
choose_trump_color = False
|
choose_trump_color = False
|
||||||
resp.content = api.template('home/player.html', playerActive=isActive, active_player=active_player, player=p,
|
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,
|
cards=the_game.players[p].cards, choose_trump_color=choose_trump_color,
|
||||||
trump_card=tcard, trump_color=tcolor, played_cards=table.played_cards)
|
trump_card=tcard, trump_color=tcolor, played_cards=the_game.played_cards)
|
||||||
|
|
||||||
|
|
||||||
@api.route("/player/{player}/play/{card}")
|
@api.route("/player/{player}/play/{card}")
|
||||||
|
144
wiz_game.py
144
wiz_game.py
@ -107,6 +107,146 @@ class Table:
|
|||||||
|
|
||||||
|
|
||||||
class WizGame:
|
class WizGame:
|
||||||
|
def __init__(self, player_names: list):
|
||||||
|
self.players = [Player(pn, idx) for idx, pn in enumerate(player_names)]
|
||||||
|
if len(self.players) > 6:
|
||||||
|
raise Exception # TODO: figure out more specific type
|
||||||
|
self.card_deck = []
|
||||||
|
self.trump_card = None
|
||||||
|
self.start_player = 0
|
||||||
|
self.active_player = 0
|
||||||
|
self.current_round = 1
|
||||||
|
self.num_tricks_played = 0
|
||||||
|
self.played_cards = list()
|
||||||
|
self.players_ordered = self.players
|
||||||
|
|
||||||
|
def start_game(self):
|
||||||
|
self.create_deck()
|
||||||
|
self.current_round = 1
|
||||||
|
self.active_player = 0
|
||||||
|
self.start_player = 0
|
||||||
|
self.deal_cards(1)
|
||||||
|
self.played_cards = list()
|
||||||
|
self.players_ordered = self.players
|
||||||
|
|
||||||
|
def create_deck(self):
|
||||||
|
self.card_deck = []
|
||||||
|
for color in ["b", "r", "g", "y"]:
|
||||||
|
for val in range(1, 14):
|
||||||
|
self.card_deck.append(Card(color, val))
|
||||||
|
for _ in range(1, 5):
|
||||||
|
self.card_deck.append(Card('-', 'Z'))
|
||||||
|
for _ in range(1, 5):
|
||||||
|
self.card_deck.append(Card('-', 'N'))
|
||||||
|
|
||||||
|
def get_trump_color(self):
|
||||||
|
card = self.trump_card
|
||||||
|
if card:
|
||||||
|
if card.color:
|
||||||
|
return card.color
|
||||||
|
elif card.value == 'Z':
|
||||||
|
return 'choose'
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
def deal_cards(self, cards_per_player):
|
||||||
|
random.shuffle(self.card_deck)
|
||||||
|
cs = list(chunks(self.card_deck, cards_per_player))
|
||||||
|
for idx, p in enumerate(self.players):
|
||||||
|
p.set_cards(cs[idx])
|
||||||
|
if len(cs) > len(self.players):
|
||||||
|
cc = cs[len(self.players)]
|
||||||
|
c = cc[0]
|
||||||
|
self.trump_card = c
|
||||||
|
else:
|
||||||
|
self.trump_card = None
|
||||||
|
|
||||||
|
def get_trick_winner(self):
|
||||||
|
cards = self.played_cards
|
||||||
|
high_player, high_card = cards[0]
|
||||||
|
|
||||||
|
for player, card in cards[1:]:
|
||||||
|
if get_higher_card(high_card, card, self.trump_card.color):
|
||||||
|
high_card = card
|
||||||
|
high_player = player
|
||||||
|
return high_player, high_card
|
||||||
|
|
||||||
|
def is_trick_finished(self):
|
||||||
|
if len(self.played_cards) < len(self.players):
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def is_hand_finished(self):
|
||||||
|
h = self.is_trick_finished()
|
||||||
|
if h and self.num_tricks_played == self.current_round:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def next_hand(self):
|
||||||
|
max_hands = len(self.card_deck)/len(self.players)
|
||||||
|
if self.current_round <= max_hands:
|
||||||
|
self.current_round += 1
|
||||||
|
self.start_player += 1
|
||||||
|
if self.start_player >= len(self.players):
|
||||||
|
self.start_player = 0
|
||||||
|
self.active_player = 0
|
||||||
|
self.players_ordered = self.players[self.start_player:] + self.players[:self.start_player]
|
||||||
|
self.played_cards.clear()
|
||||||
|
self.deal_cards(self.current_round)
|
||||||
|
self.num_tricks_played = 0
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def next_trick(self):
|
||||||
|
win = self.get_trick_winner()
|
||||||
|
winner = win[0]
|
||||||
|
#self.start_player = winner.id
|
||||||
|
starter = winner.id
|
||||||
|
self.players_ordered = self.players[starter:] + self.players[:starter]
|
||||||
|
self.active_player = 0
|
||||||
|
self.played_cards.clear()
|
||||||
|
|
||||||
|
def play_card(self, player, card):
|
||||||
|
p = self.players[player]
|
||||||
|
c = p.play_card(card)
|
||||||
|
t = (p, c)
|
||||||
|
self.played_cards.append(t)
|
||||||
|
#self.next_player()
|
||||||
|
self.active_player += 1
|
||||||
|
if self.is_trick_finished():
|
||||||
|
self.num_tricks_played += 1
|
||||||
|
|
||||||
|
def set_trump_color(self, trump_color):
|
||||||
|
if self.trump_card.value != 'Z':
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
if trump_color not in ["b", "r", "g", "y"]:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
self.trump_card.color = trump_color
|
||||||
|
return True
|
||||||
|
|
||||||
|
# def next_player(self):
|
||||||
|
# if not self.is_hand_finished():
|
||||||
|
# self.active_player += 1
|
||||||
|
# if self.active_player >= len(self.players):
|
||||||
|
# self.active_player = 0
|
||||||
|
# else:
|
||||||
|
# self.active_player = None
|
||||||
|
|
||||||
|
def get_prev_player(self):
|
||||||
|
if self.start_player == 0:
|
||||||
|
return len(self.players)-1
|
||||||
|
else:
|
||||||
|
return self.start_player-1
|
||||||
|
|
||||||
|
|
||||||
|
class WizGame_legacy:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.players = []
|
self.players = []
|
||||||
self.card_deck = []
|
self.card_deck = []
|
||||||
@ -254,5 +394,7 @@ class WizGame:
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
the_game = WizGame()
|
|
||||||
|
p = ["p1", "p2", "p3", "p4"]
|
||||||
|
the_game = WizGame(p)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user