class CardGame: def __init__(self, name1, name2, num_cards=10): self.player1 = Player(name1) self.player2 = Player(name2) self.num_cards = num_cards self.deck = DeckOfCards() self.new_game() def new_game(self): """"shuffling the deck if the deck is full, giving to the players cards else giving an error """ if len(self.deck.list_cards) == 52: self.deck.shuffle() self.player1.set_hand(self.deck) self.player2.set_hand(self.deck) else: print("Error, deck is not full cant start a new game") def get_winner(self): """check and pronounce who is the winner return None if its draw""" if len(self.player1.player_hand) > len(self.player2.player_hand): return self.player2.name elif len(self.player1.player_hand) < len(self.player2.player_hand): return self.player1.name elif len(self.player1.player_hand) == len(self.player2.player_hand): return None
class CardGame: def __init__(self, name1="player-1", name2="player-2", num_cards=10): """מקבלת כמה קלפים לחלק לכל שחקן, מגדירה 2 שחקנים, יוצרת חפיסה ומתחילה משחק חדש""" if type(num_cards) == int: # נכנסת רק כאשר המספר הוא שלם ותקין if 1 <= num_cards: # בודקת שכמות הקלפים היא תיקנית ולא פחות מ1 if num_cards > 26: # אם כמות הקלפים לחלוקה גדול מ26 היא תחלק רק 26 קלפים ותעדכן את המשתמש print("only 26 cards dealt") num_cards = 26 self.num_cards = num_cards self.player_1 = Player(name1, self.num_cards) self.player_2 = Player(name2, self.num_cards) self.deck_cards = DeckOfCards() self.new_game() else: exit("ERROR!") # אם הכמות היא פחות מ1 תדפיס שגיאה else: exit("ERROR!") # אם המספר אינו תיקני def get_winner(self): """מחזירה את השם של השחקן עם הרשימה הקצרה ביותר או אם הם שווים אז none""" if len(self.player_1.player_deck) < len(self.player_2.player_deck): return self.player_1.name elif len(self.player_1.player_deck) == len(self.player_2.player_deck): return None else: return self.player_2.name def new_game(self): """מערבבת את החפיסה השלימה ומחלקת קלפים לשני השחקנים, במידה והפונקציה הופעלה במהלך המשחק היא תציג שגיאה""" if len(self.deck_cards.show()) == 52: self.deck_cards.shuffle() self.player_1.set_hand(self.deck_cards) self.player_2.set_hand(self.deck_cards) else: exit("Error!")
class TestPlayer(TestCase): def setUp(self): self.player_1 = Player("dima", 2) self.player_2 = Player("shahar", 27) self.deck_cards = DeckOfCards() self.card_1 = Card(1, 3) self.card_2 = Card(2, 1) @mock.patch("games_cards.DeckOfCards.DeckOfCards.deal_one", return_value=Card(2, 1)) def test_set_hand(self, mock_1): """בודקת האם CARD נמצא בPLAYER_DECK""" card = Card(2, 1) self.player_1.set_hand(self.deck_cards) self.assertIn(card, self.player_1.player_deck) def test_set_hand_2(self): """בודקת האם בPLAYER DECK לא יהיה יותר מ26 קלפים""" self.player_2.set_hand(self.deck_cards) self.assertEqual(26, len(self.player_2.player_deck)) def test_set_hand_3(self): """בודקת אם נכנס לחפיסה משהו שהוא לא אובייקט Card""" deck_cards = DeckOfCards() deck_cards.cards.append(1) # מכניסים סתם מספר במקום אובייקט with self.assertRaises(SystemExit): self.player_1.set_hand(deck_cards) @mock.patch("games_cards.Player.Player.random_get_card", return_value=1) def test_get_card(self, mock_rand): """בדיקה האם פונקציה מחזירה קלף אשר נמצא במקום השני ברשימת PLAYER_DECK """ self.player_1.player_deck = [self.card_1, self.card_2] self.assertIs(self.card_2, self.player_1.get_card()) def test_add_card(self): """בודקת האם ADD_CARD מוסיפה CARD1""" self.player_1.set_hand(self.deck_cards) self.player_1.add_card(self.card_1) self.assertIn(self.card_1, self.player_1.player_deck)
def test_set_hand_all_cards_set(self): """checks the game will played for 10 rounds""" deck = DeckOfCards() player = Player('Ohad') player.set_hand(deck) self.assertEqual(len(player.player_hand), player.cards_number)
def test_set_hand1(self, mock_deal_one): """checks the player really get cards from the deck""" deck = DeckOfCards() player = Player('Ohad') player.set_hand(deck) self.assertEqual(player.player_hand.count(Card(11, 2)), 10)
class TestPlayer(TestCase): def setUp(self): print("Set_up") self.c1 = Card(1, "Diamond") self.c2 = Card(2, "Diamond") self.c3 = Card(3, "Diamond") self.c4 = Card(4, "Diamond") self.p_1 = Player("p_1", 5000, 5) self.list = [self.c1, self.c2, self.c3, self.c4] self.dc = DeckOfCards() def tearDown(self): print("Tear_down") def test_set_hand(self): # check that after "set_hand" the card in player's cards with patch('games_cards.DeckOfCards.DeckOfCards.deal_one') as mocked_deal_one: mocked_deal_one.return_value = self.c1 self.p_1.set_hand(self.dc) self.assertIn(self.c1, self.p_1.cards) def test_get_card_1(self): # check that the card from the list self.p_1.cards = [self.c1, self.c2, self.c3, self.c4] temp_list = self.p_1.cards.copy() card = self.p_1.get_card() self.assertIn(card, temp_list) def test_get_card_2(self): # check that after "get_card" the card not in player's cards self.p_1.cards = [self.c1, self.c2, self.c3, self.c4] card = self.p_1.get_card() self.assertNotIn(card, self.p_1.cards) def test_get_card_3(self): # check that "get_card" with list empty is ERROR self.p_1.cards = [] self.assertEqual("ERROR", self.p_1.get_card()) def test_add_card(self): # check that after "add_card" the card in player's cards self.p_1.add_card(self.c1) self.assertIn(self.c1, self.p_1.cards) def test_reduce_amount_1(self): # check tha change after "reduce_amount" self.p_1.reduce_amount(100) self.assertEqual(self.p_1.money, 4900) def test_reduce_amount_2(self): # check tha change after "reduce_amount" self.p_1.reduce_amount(100000) print(self.p_1.money) self.assertEqual(self.p_1.money, 5000) def test_add_amount_1(self): # check tha change after "reduce_amount" self.p_1.add_amount(100) self.assertEqual(self.p_1.money, 5100) def test_add_amount_2(self): # check tha change after "reduce_amount" self.p_1.add_amount(100000) self.assertEqual(self.p_1.money, 105000)