From d4e1b0872653b7ac2c087ed04f9e0ef08c578bc5 Mon Sep 17 00:00:00 2001 From: berryman Date: Fri, 14 Dec 2012 16:55:30 -0500 Subject: [PATCH 1/3] end_round takes a winner, and a dictionary of cards that were played, removes the cards from the players hand, and gives them a new card. --- cah.py | 43 +++++++++++++++++++++++++++++-------------- test.py | 29 ++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 15 deletions(-) diff --git a/cah.py b/cah.py index bc082da..304d797 100644 --- a/cah.py +++ b/cah.py @@ -1,6 +1,7 @@ from random import choice import os import json +import test # Settings you change card_folder = 'cards' @@ -9,12 +10,10 @@ question_cards_file_name = ['question_cards', 'question_cards1', 'question_cards # Settings that are used #this is one level hire then it should be -base_directory = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(".")))) - +base_directory = os.path.dirname(os.path.abspath(__file__)) class Deck(object): def __init__(self): - print base_directory self.answerDb = self.parse_card_file('answer') self.questionDb = self.parse_card_file('question') @@ -72,6 +71,9 @@ class Card(object): self.text = text for key, value in kwargs.iteritems(): setattr(self, key, value) + def __str__(self): + return self.text + class Game(object): def __init__(self, players, round_limit = 5, rule_set="house"): @@ -98,7 +100,16 @@ class Game(object): self.question = self.deck.drawCard('question') return {'question': self.question, 'hands': self.players} - def displayAnswer(self): + def end_round(self, winner_name, cards_played): + self.score_keeping(winner_name, cards_played[winner_name]) + for player in cards_played.keys(): + if isinstance(cards_played[player], Card): + cards_played[player] = [cards_played[player]] + for card in cards_played[player]: + self.players[player].card_list.remove(card) + self.players[player].deal_hand(self.deck) + + def score_keeping(self, player_name, cards): pass def cardSubmit(self): @@ -118,18 +129,22 @@ class Round(object): class PlayerHand(object): def __init__(self, deck): - self.card_list = self.dealHand(deck) + self.card_list = [] + self.deal_hand(deck) - def dealHand(self, deck): - hand = [] - while len(hand) < 5: + def deal_hand(self, deck): + while len(self.card_list) < 5: card = deck.drawCard('answer') - hand.append(card) - return hand - - def showHand(self): + self.card_list.append(card) + + def text_list(self): + card_text = [] for index, card in enumerate(self.card_list): - print '%s: %s' % (index + 1, card.text) + card_text.append ( card.text) + return card_text + + def showHand(self): + print '%s' % self.text_list() @@ -150,4 +165,4 @@ if __name__=="__main__": for index, card in enumerate(game.players['Bear'].card_list): print '%s: %s' % (index + 1, card.text) - + print "\nEnd the round by picking a random cards amd winner: %s" % str(test.build_end_round_data(game)) diff --git a/test.py b/test.py index 826548c..9b78ef3 100644 --- a/test.py +++ b/test.py @@ -1,3 +1,5 @@ +from collections import deque + __author__ = 'Bear' from cah import * @@ -30,6 +32,8 @@ def test_game(): for player in game.players.keys(): hand = game.players[player] test_player_hand(hand) + test_round_advancement(game) + def test_round_advancement(game=None): @@ -41,9 +45,32 @@ def test_round_advancement(game=None): bot_gets = game.next_round() assert isinstance(bot_gets, dict) assert bot_gets.has_key('question') - + assert game.has_key('question') assert bot_gets.has_key('hands') +def build_end_round_data(game): + winner = choice(game.players.keys()) + cards_played = {} + #Get random cards from player's hand to satisfy the question card + for player in game.players.keys(): + player_cards = game.players[player].card_list[:game.question.answers] + cards_played[player] = player_cards #player_cards is a deque object -> tuple(list,maxlen) + return {'winner': winner, 'cards_played': cards_played} + +def test_end_round(game=None): + if game is None: + game = Game(['Bear','Swim', 'Jazz']) + game.next_round() + game.question.answers = 2 + fake_end_round = build_end_round_data(game) + game.end_round(fake_end_round['winner'],fake_end_round['cards_played']) + for player in game.players.keys(): + assert len(game.players[player].card_list) == 5 + if isinstance(fake_end_round['cards_played'][player], Card): + fake_end_round['cards_played'][player] = list(fake_end_round['cards_played'][player]) + for card in fake_end_round['cards_played'][player]: + assert card not in game.players[player].card_list + def test_player_hand(hand=None): if hand is None: From 4f3fae7e79fc852aebc62c5d9dbdd1fb52c5665d Mon Sep 17 00:00:00 2001 From: berryman Date: Fri, 14 Dec 2012 17:03:44 -0500 Subject: [PATCH 2/3] simple score dict. --- cah.py | 10 +++++++--- test.py | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/cah.py b/cah.py index 304d797..a61cfb0 100644 --- a/cah.py +++ b/cah.py @@ -82,6 +82,7 @@ class Game(object): self.players = self.build_player_list(players) self.round = None self.question = None + self.score = {} def build_player_list(self, players): player_list = {} @@ -101,7 +102,7 @@ class Game(object): return {'question': self.question, 'hands': self.players} def end_round(self, winner_name, cards_played): - self.score_keeping(winner_name, cards_played[winner_name]) + self.score_keeping(winner_name) for player in cards_played.keys(): if isinstance(cards_played[player], Card): cards_played[player] = [cards_played[player]] @@ -109,8 +110,11 @@ class Game(object): self.players[player].card_list.remove(card) self.players[player].deal_hand(self.deck) - def score_keeping(self, player_name, cards): - pass + def score_keeping(self, player_name): + if self.score.has_key(player_name): + self.score[player_name] = self.score[player_name] + 1 + else: + self.score[player_name] = 1 def cardSubmit(self): for player in self.players: diff --git a/test.py b/test.py index 9b78ef3..5d42ab9 100644 --- a/test.py +++ b/test.py @@ -47,6 +47,7 @@ def test_round_advancement(game=None): assert bot_gets.has_key('question') assert game.has_key('question') assert bot_gets.has_key('hands') + test_end_round(game) def build_end_round_data(game): winner = choice(game.players.keys()) @@ -70,6 +71,7 @@ def test_end_round(game=None): fake_end_round['cards_played'][player] = list(fake_end_round['cards_played'][player]) for card in fake_end_round['cards_played'][player]: assert card not in game.players[player].card_list + assert game.score.has_key(fake_end_round['winner']) def test_player_hand(hand=None): From 6bffe76416bf5c3367c543ec280924a5f5dd79d9 Mon Sep 17 00:00:00 2001 From: berryman Date: Fri, 14 Dec 2012 17:33:26 -0500 Subject: [PATCH 3/3] cleaning up incrementation --- cah.py | 8 +++++--- test.py | 2 -- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cah.py b/cah.py index a61cfb0..df8f087 100644 --- a/cah.py +++ b/cah.py @@ -76,7 +76,7 @@ class Card(object): class Game(object): - def __init__(self, players, round_limit = 5, rule_set="house"): + def __init__(self, players, round_limit = 5): self.round_limit = round_limit self.deck = Deck() self.players = self.build_player_list(players) @@ -94,7 +94,7 @@ class Game(object): if self.round is None: self.round = 0 if self.round < self.round_limit: - self.round = self.round + 1 + self.round += 1 else: raise IndexError @@ -111,8 +111,10 @@ class Game(object): self.players[player].deal_hand(self.deck) def score_keeping(self, player_name): + if not self.players.has_key(player_name): + raise NameError if self.score.has_key(player_name): - self.score[player_name] = self.score[player_name] + 1 + self.score[player_name] += 1 else: self.score[player_name] = 1 diff --git a/test.py b/test.py index 5d42ab9..9b58d0d 100644 --- a/test.py +++ b/test.py @@ -1,5 +1,3 @@ -from collections import deque - __author__ = 'Bear' from cah import *