diff --git a/__pycache__/card.cpython-310.pyc b/__pycache__/card.cpython-310.pyc new file mode 100644 index 0000000..5b87096 Binary files /dev/null and b/__pycache__/card.cpython-310.pyc differ diff --git a/__pycache__/deck.cpython-310.pyc b/__pycache__/deck.cpython-310.pyc new file mode 100644 index 0000000..30ea1bd Binary files /dev/null and b/__pycache__/deck.cpython-310.pyc differ diff --git a/__pycache__/player.cpython-310.pyc b/__pycache__/player.cpython-310.pyc new file mode 100644 index 0000000..7ed0e2c Binary files /dev/null and b/__pycache__/player.cpython-310.pyc differ diff --git a/__pycache__/rules.cpython-310.pyc b/__pycache__/rules.cpython-310.pyc new file mode 100644 index 0000000..5db0c63 Binary files /dev/null and b/__pycache__/rules.cpython-310.pyc differ diff --git a/main.py b/main.py index 57a5dc6..d3f4e0b 100644 --- a/main.py +++ b/main.py @@ -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') diff --git a/player.py b/player.py index 60b8cfe..e3198fc 100644 --- a/player.py +++ b/player.py @@ -42,7 +42,8 @@ class BotPlayer(player): if 'card_count' in rule and rule['card_count'] == len(self.hand): commands.append(rule['command']) #print(f'Commands: {commands}') - return ' and '.join(commands) if commands else None + return ' and '.join(commands) if commands else '' + def play(self, deck): for card in self.hand: if card.suit == deck.discard_pile[-1].suit or card.value == deck.discard_pile[-1].value: @@ -50,8 +51,8 @@ class BotPlayer(player): deck.discard_pile.append(player_card) print(f'{self.name} played {player_card}') commands = self.command(player_card) - if commands is not None: - print(f'{self.name} announced: {commands}') + #if commands is not None: + #print(f'{self.name} announced: {commands}') return True, commands else: print(f'{self.name} cannot play') @@ -67,10 +68,10 @@ class HumanPlayer(player): print(f'Your hand:') for i, card in enumerate(self.hand): print(f'{i}: {card}') - card_index = input('Enter the index of the card you want to play(or type N to pass your go): ') - if card_index == 'N' or card_index == 'n': + card_index = input('Enter the index of the card you want to play(or type N to pass your go): ').lower() + if card_index == 'n': return False, None card = self.hand.pop(int(card_index)) deck.discard_pile.append(card) - command = input('Enter your command: ') - return True, command \ No newline at end of file + command = input('Enter your command: ').lower() + return True, command diff --git a/rules.json b/rules.json index bcdbb5b..2d48d69 100644 --- a/rules.json +++ b/rules.json @@ -1,8 +1,8 @@ [ - {"suit": "Hearts", "command": "Nah"}, - {"suit": "Spades", "command":"Pass me the shovel"}, - {"value": 1, "command": "Klondike"}, - {"value": 7, "command": "Good Morning"}, + {"suit": "Hearts", "command": "nah"}, + {"suit": "Spades", "command":"pass me the shovel"}, + {"value": 1, "command": "klondike"}, + {"value": 7, "command": "good morning"}, {"value": 8, "command": "bang"}, {"value": 11, "command": "punch"}, {"value": 13, "command": "god save the king"}, diff --git a/rules.py b/rules.py index 6f8e53c..45406a4 100644 --- a/rules.py +++ b/rules.py @@ -25,11 +25,11 @@ class RuleEngine: print(f'Added rule: {rule_json}') def check_rule(self, card, hand): - commands = [] + commands = set() for game_rule in self.rules: if (game_rule.suit is not None and game_rule.suit == card.suit) or \ (game_rule.value is not None and game_rule.value == card.value) or \ (game_rule.card_count != 99 and game_rule.card_count == len(hand)): - commands.append(game_rule.command) - return ' and '.join(commands) if commands else '' + commands.add(game_rule.command) + return commands \ No newline at end of file