added dynamic rule checking
This commit is contained in:
@@ -6,16 +6,17 @@ from rules import Rule, RuleEngine
|
||||
|
||||
import time
|
||||
|
||||
d = deck()
|
||||
d.shuffle()
|
||||
#d.show()
|
||||
d.first_card()
|
||||
deck = deck()
|
||||
deck.shuffle()
|
||||
#deck.show()
|
||||
deck.first_card()
|
||||
|
||||
player_count = int(input('How many players do you want to play with? '))
|
||||
players = []
|
||||
for i in range(player_count):
|
||||
player_name = input(f'Enter the name of player {i+1}: ')
|
||||
players.append(HumanPlayer(player_name))
|
||||
print(f'player {player_name} has been added')
|
||||
|
||||
bot_count = int(input('How many bots do you want to play against? '))
|
||||
bots = []
|
||||
@@ -34,9 +35,9 @@ for person in bots:
|
||||
# Now you can use your player objects
|
||||
for game_player in players:
|
||||
print(f'dealing 3 cards to {game_player.name}')
|
||||
game_player.draw(d)
|
||||
game_player.draw(d)
|
||||
game_player.draw(d)
|
||||
game_player.draw(deck)
|
||||
game_player.draw(deck)
|
||||
game_player.draw(deck)
|
||||
|
||||
# In your main game loop
|
||||
rule_engine = RuleEngine()
|
||||
@@ -51,20 +52,28 @@ for i in range(50):
|
||||
print(f'round: {round_counter}')
|
||||
for game_player in players:
|
||||
if isinstance(game_player, HumanPlayer):
|
||||
has_played, given_command = game_player.play(d)
|
||||
has_played, given_command = game_player.play(deck)
|
||||
else:
|
||||
has_played, given_command = game_player.play(d) # Bot player's turn
|
||||
has_played, given_command = game_player.play(deck) # Bot player's turn
|
||||
|
||||
if has_played: # if the player has played a card
|
||||
command = rule_engine.check_rule(d.discard_pile[-1], game_player.hand)
|
||||
print(f'expected command: {command}')
|
||||
if deck.discard_pile[-2].suit != deck.discard_pile[-1].suit and deck.discard_pile[-2].value != deck.discard_pile[-1].value:
|
||||
print(f'player {game_player.name} has played a wrong card')
|
||||
game_player.hand.append(deck.discard_pile.pop())
|
||||
game_player.draw(deck)
|
||||
continue
|
||||
command = rule_engine.check_rule(deck.discard_pile[-1], game_player.hand)
|
||||
print(f'{game_player.name} announced: {given_command}')
|
||||
expected_command = ' and '.join(command)
|
||||
print(f'expected command: {expected_command}')
|
||||
time.sleep(1)
|
||||
if given_command != command:
|
||||
given_command_set = set(given_command.split(' and '))
|
||||
if given_command_set != command:
|
||||
print(f'{game_player.name} made the wrong announcement')
|
||||
#need to put the card back in the hand
|
||||
game_player.hand.append(d.discard_pile.pop())
|
||||
game_player.draw(d)
|
||||
if given_command == command:
|
||||
game_player.hand.append(deck.discard_pile.pop())
|
||||
game_player.draw(deck)
|
||||
if given_command_set == command:
|
||||
print(f'{game_player.name} announced the correct rule')
|
||||
print(f'{game_player.name} has {game_player.check_hand()} cards left\n')
|
||||
time.sleep(1)
|
||||
@@ -73,15 +82,15 @@ for i in range(50):
|
||||
print(f'rounds played: {round_counter}')
|
||||
exit()
|
||||
else:
|
||||
game_player.draw(d) # if the player has not played a card, draw a card
|
||||
game_player.draw(deck) # if the player has not played a card, draw a card
|
||||
print(f'{game_player.name} drew a card')
|
||||
print(f'{game_player.name} has {game_player.check_hand()} cards left\n')
|
||||
time.sleep(1)
|
||||
if d.check_empty(): # if the deck is empty
|
||||
d.shuffle()
|
||||
d.first_card()
|
||||
#game_player.draw(d)
|
||||
if deck.check_empty(): # if the deck is empty
|
||||
deck.shuffle()
|
||||
deck.first_card()
|
||||
#game_player.draw(deck)
|
||||
|
||||
print(f'discard pile: {d.discard_pile[-1]}')
|
||||
print(f'cards in deck: {len(d.cards)}\n')
|
||||
print(f'discard pile: {deck.discard_pile[-1]}')
|
||||
print(f'cards in deck: {len(deck.cards)}\n')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user