Skip to content

Commit cdb5e3c

Browse files
committed
Raised renders to Play class
1 parent 288c0c2 commit cdb5e3c

File tree

6 files changed

+31
-35
lines changed

6 files changed

+31
-35
lines changed

rummy/game/players.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ def __init__(self):
1515
def choose_players(self):
1616
self.number_of_players = int(UserInput.create_input(MenuActionDialog.human_players()))
1717
for _ in range(int(self.number_of_players)):
18-
self.players.append(Human(len(self.players)))
18+
self.players.append(Human(len(self.players) + 1))
1919

2020
def choose_opponents(self):
2121
if self.number_of_players in [-1, 0, 1]:
2222
self.number_of_opponents = int(
2323
UserInput.create_input(MenuActionDialog.ai_players(self.number_of_players)))
2424
ai_only = self.is_ai_only()
2525
for _ in range(int(self.number_of_opponents)):
26-
self.players.append(AI(len(self.players), ai_only))
26+
self.players.append(AI(len(self.players) + 1, ai_only))
2727

2828
def is_ai_only(self):
2929
return True if self.number_of_players is 0 else False

rummy/game/score.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ def is_end_of_game(self):
2828
return True
2929
return False
3030

31-
def end_game(self):
31+
def show_winners(self):
3232
winners = self.find_lowest_scores()
3333
if len(winners) == 1:
34-
View.render(Colour.green("%s is the Winner!!" % winners[0]))
34+
return Colour.green("%s is the Winner!!" % winners[0])
3535
else:
36-
View.render(Colour.green(", ".join([str(w) for w in winners]) + " are joint winners!"))
36+
return Colour.green(", ".join([str(w) for w in winners]) + " are joint winners!")
3737

3838
def find_lowest_scores(self):
3939
lowest = []

rummy/play.py

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,31 +42,36 @@ def play_game(self):
4242
self.round.prepare_turn()
4343
player = self.players[self.round.current_player]
4444
player.turn(self.round)
45+
View.render(player.show_turn_start())
46+
View.render(player.has_someone_knocked())
47+
View.render(player.draw_from_deck_or_discard_pile())
48+
View.render(player.show_turn_end())
49+
player.discard_or_knock()
50+
View.render(player.show_discard())
4551
self.round.end_turn()
46-
self.end_round()
52+
View.render(self.end_round())
4753
sleep(1.2)
48-
self.start_new_round_or_end_game()
49-
50-
def start_new_round_or_end_game(self):
5154
if self.score.is_end_of_game():
52-
self.score.end_game()
55+
View.render(self.score.show_winners())
5356
else:
54-
self.round.rotate_first_player()
55-
if not self.ai_only:
56-
self.confirm_start_new_round()
57-
self.round.prepare_new_round()
58-
self.round.deal_cards(self.players)
59-
self.play_game()
57+
self.start_new_round()
58+
59+
def start_new_round(self):
60+
self.round.rotate_first_player()
61+
if not self.ai_only:
62+
self.confirm_start_new_round()
63+
self.round.prepare_new_round()
64+
self.round.deal_cards(self.players)
65+
self.play_game()
6066

6167
@staticmethod
6268
def confirm_start_new_round():
6369
UserInput.create_input(MenuActionDialog.next_round())
6470

6571
def end_round(self):
6672
self.score.update_player_scores()
67-
View.render(
68-
View.template_this_round_score(self.score.get_end_of_round_scores(), self.score.get_current_game_scores())
69-
)
73+
return View.template_this_round_score(self.score.get_end_of_round_scores(),
74+
self.score.get_current_game_scores())
7075

7176

7277
# start game

rummy/player/player.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,6 @@ def __str__(self):
2323

2424
def turn(self, game_round):
2525
self.round = game_round
26-
self.has_someone_knocked()
27-
# Todo: the methods used below should only return the data,
28-
# Todo: the data should be passed to the render method with the view to use.
29-
View.render(self.show_turn_start())
30-
View.render(self.draw_from_deck_or_discard_pile())
31-
View.render(self.show_turn_end())
32-
self.discard_or_knock()
33-
View.render(self.show_discard())
3426

3527
def take_from_deck(self):
3628
self.hand.draw_card(self.round.deck.take_card())
@@ -62,7 +54,7 @@ def display_round_score(self):
6254

6355
def has_someone_knocked(self):
6456
if self.round.knocked:
65-
View.render(View.prepare_template('/knocked.txt'))
57+
return View.prepare_template('/knocked.txt')
6658

6759
@abstractmethod
6860
def show_turn_start(self):

tests/game/test_score.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# coding=utf-8
22

33
from rummy.game.score import Score
4-
from rummy.player.player import Player
54
from rummy.player.human import Human
5+
from rummy.player.player import Player
66

77

88
class TestScore:
@@ -29,14 +29,13 @@ def test_is_end_of_game(self, mocker):
2929
mocker.patch.object(Player, 'get_game_score', side_effect=[80, 85, 90, 99])
3030
assert not score.is_end_of_game()
3131

32+
# ToDo: End game is now handled in Play, not sure how to fix this test
3233
def test_end_game(self, mocker):
3334
mocker.patch('builtins.print')
3435
mocker.patch.object(Score, 'find_lowest_scores', side_effect=[[Human(1)], [Human(1), Human(2)]])
3536
score = Score([Human(1), Human(2)])
36-
score.end_game()
37-
print.assert_called_with('\x1b[0;32mPlayer 1 is the Winner!!\x1b[0m')
38-
score.end_game()
39-
print.assert_called_with('\x1b[0;32mPlayer 1, Player 2 are joint winners!\x1b[0m')
37+
assert '\x1b[0;32mPlayer 1 is the Winner!!\x1b[0m' == score.show_winners()
38+
assert '\x1b[0;32mPlayer 1, Player 2 are joint winners!\x1b[0m' == score.show_winners()
4039

4140
def test_find_lowest_scores(self, mocker):
4241
human1 = mocker.MagicMock()

tests/player/test_player.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ def test_turn(self, mocker):
4242
assert not player.ai_only
4343
assert isinstance(player.hand, Hand)
4444
assert isinstance(player.melds, Melds)
45-
assert DummyPlayer.has_someone_knocked.call_count == 1
46-
assert DummyPlayer.discard_or_knock.call_count == 1
45+
# assert DummyPlayer.has_someone_knocked.call_count == 1
46+
# assert DummyPlayer.discard_or_knock.call_count == 1
4747

4848
def test_get_name(self):
4949
player = DummyPlayer(1)

0 commit comments

Comments
 (0)