22import logging
33
44from telegram .keyboardbutton import KeyboardButton
5- from telegram .replykeyboardhide import ReplyKeyboardHide
5+ from telegram .replykeyboardremove import ReplyKeyboardRemove
66from telegram .replykeyboardmarkup import ReplyKeyboardMarkup
77
88from database .statistics import add_game_played , set_game_won
99from game .cardDeck import CardDeck
1010from game .dealer import Dealer
11+ from game .message import Message
1112from game .player import Player
1213from lang .language import translate
1314
@@ -23,7 +24,7 @@ class BlackJack(object):
2324 # Adds Player to the Game
2425 def add_player (self , user_id , first_name , message_id , silent = None ):
2526 if not self .game_running :
26- if self .get_index_by_user_id (user_id ) == None and len (self .players ) <= self .MAX_PLAYERS :
27+ if self .get_index_by_user_id (user_id ) is None and len (self .players ) < self .MAX_PLAYERS :
2728 self .logger .debug ("Adding user '" + first_name + "' to players." )
2829 player = Player (user_id , first_name , self .deck )
2930 self .players .append (player )
@@ -33,31 +34,28 @@ def add_player(self, user_id, first_name, message_id, silent=None):
3334 # TODO When game is multiplayer then print current players?
3435 self .send_message (self .chat_id , translate ("playerJoined" , self .lang_id ).format (first_name ), message_id = message_id , game_id = self .__game_id )
3536 else :
36- self .logger .debug ("User '" + first_name + "' already in player list." )
37+ self .logger .debug ("User '" + first_name + "' already in player list. Or max players reached " )
3738
3839 def get_index_by_user_id (self , user_id ):
39- index = 0
40- for user in self .players :
40+ for index , user in enumerate (self .players ):
4141 if user .get_userid () == user_id :
4242 return index
43- index += 1
4443
4544 return None
4645
4746 def get_user_by_user_id (self , user_id ):
4847 for user in self .players :
4948 if user .get_userid () == user_id :
5049 return user
51-
5250 return None
5351
5452 def next_player (self ):
5553 if self .game_running :
56- if self .current_player is not None and ( self .current_player + 1 ) < len (self .players ):
54+ if self .current_player is not None and self .current_player < ( len (self .players ) - 1 ):
5755 self .logger .debug ("Next Player!" )
5856 self .current_player += 1
5957 self .send_message (self .chat_id , translate ("overview" , self .lang_id ) + "\n \n " + self .get_player_overview (show_points = True ) + "\n " +
60- translate ("nextPlayer" , self .lang_id ).format (self .players [self .current_player ].first_name ),
58+ translate ("nextPlayer" , self .lang_id ).format (self .players [self .current_player ].get_first_name () ),
6159 message_id = self .join_message_ids [self .current_player ], reply_markup = self .keyboard_running , game_id = self .__game_id )
6260
6361 self .give_player_one ()
@@ -69,58 +67,62 @@ def next_player(self):
6967 # gives player one card
7068 def give_player_one (self ):
7169 if self .game_running :
72- player_index = self .current_player
73- user = self .players [player_index ]
74- self .logger .debug ("Giving player one card | chatID: " + str (self .chat_id ) + " | player: " + user .first_name )
70+ user = self .players [self .current_player ]
71+ self .logger .debug ("Giving player one card | chatID: " + str (self .chat_id ) + " | player: " + user .get_first_name ())
7572
76- if user .get_number_of_cards () == 0 :
73+ if not user .has_cards () :
7774 # give user 2 cards at beginning
78- for i in range (2 ):
75+ for _ in range (2 ):
7976 card = self .deck .pick_one_card ()
8077 cardvalue = self .deck .get_card_value (card )
81-
8278 user .give_card (card , cardvalue )
8379
84- # TODO check if cardvalue = 21. If yes, mention it in the message
8580 cards_string = "\n " + user .get_cards_string () + "\n "
86- self .send_message (self .chat_id , str (translate ("yourCardsAre" , self .lang_id ).format (
87- user .first_name , cards_string , str (user .cardvalue ))), reply_markup = self .keyboard_running ,
88- message_id = self .join_message_ids [self .current_player ], game_id = self .__game_id )
81+ if user .cardvalue == 21 :
82+ got21_text = "\n \n " + user .first_name + " " + translate ("got21" , self .lang_id )
83+
84+ self .send_message (self .chat_id , str (translate ("yourCardsAre" , self .lang_id ).format (
85+ user .first_name , cards_string , str (user .cardvalue ))) + got21_text , reply_markup = ReplyKeyboardRemove , game_id = self .__game_id )
86+ self .next_player ()
87+ else :
88+ self .send_message (self .chat_id , str (translate ("yourCardsAre" , self .lang_id ).format (
89+ user .first_name , cards_string , str (user .cardvalue ))), reply_markup = self .keyboard_running ,
90+ message_id = self .join_message_ids [self .current_player ], game_id = self .__game_id )
8991 else :
9092 card = self .deck .pick_one_card ()
9193 cardvalue = self .deck .get_card_value (card )
94+ message = Message ()
9295
9396 if user .has_ace and (user .cardvalue + cardvalue > 21 ):
94- # user got an ace
95- cardvalue = 1
97+ # user got already an ace -> soft hand
9698 user .remove_ace ()
97- self . send_message ( self . chat_id , translate ("softHandLater" , self .lang_id ), game_id = self . __game_id )
99+ message . add_text ( translate ("softHandLater" , self .lang_id ))
98100
99101 if self .game_type == self .PRIVATE_CHAT :
100- player_drew = translate ("playerDraws1" , self .lang_id ).format (str (self .deck .get_card_name (card )))
102+ message . add_text ( translate ("playerDraws1" , self .lang_id ).format (str (self .deck .get_card_name (card ) )))
101103 else :
102- player_drew = translate ("playerDrew" , self .lang_id ).format (user .first_name , str (self .deck .get_card_name (card )))
104+ message . add_text ( translate ("playerDrew" , self .lang_id ).format (user .first_name , str (self .deck .get_card_name (card ) )))
103105
104106 user .give_card (card , cardvalue )
105-
106- player_drew += "\n " + translate ("cardvalue" , self .lang_id ).format (str (user .cardvalue ))
107+ message .add_text_nl (translate ("cardvalue" , self .lang_id ).format (str (user .cardvalue )))
107108
108109 if user .cardvalue >= 21 :
109110 if user .cardvalue > 21 :
110111 if self .game_type == self .GROUP_CHAT :
111- player_drew += "\n \n " + translate ("playerBusted" , self .lang_id ).format (user .first_name )
112+ message . add_text ( "\n \n " + translate ("playerBusted" , self .lang_id ).format (user .first_name ) )
112113
113114 elif user .cardvalue == 21 :
114- player_drew += "\n \n " + user .first_name + " " + translate ("got21" , self .lang_id )
115+ message . add_text ( "\n \n " + user .first_name + " " + translate ("got21" , self .lang_id ) )
115116
116- self .send_message (self .chat_id , text = player_drew , game_id = self .__game_id )
117+ self .send_message (self .chat_id , text = message . get_text () , game_id = self .__game_id )
117118 self .next_player ()
118119 else :
119- self .send_message (self .chat_id , text = player_drew , reply_markup = self .keyboard_running , game_id = self .__game_id )
120+ self .send_message (self .chat_id , text = message . get_text () , reply_markup = self .keyboard_running , game_id = self .__game_id )
120121
121122 # Gives the dealer cards
122123 def dealers_turn (self ):
123124 if self .dealer .get_number_of_cards () < 2 :
125+ card = None
124126 for i in range (2 ):
125127 card = self .deck .pick_one_card ()
126128 cardvalue = self .deck .get_card_value (card )
@@ -153,7 +155,7 @@ def dealers_turn(self):
153155 self .evaluation ()
154156
155157 def start_game (self , message_id = None ):
156- if ((self .game_type == self .GROUP_CHAT or self .game_type == self .MULTIPLAYER_GAME ) and len (self .players ) >= 1 ) or self .game_type == self .PRIVATE_CHAT :
158+ if ((self .game_type == self .GROUP_CHAT or self .game_type == self .MULTIPLAYER_GAME ) and len (self .players ) > 1 ) or self .game_type == self .PRIVATE_CHAT :
157159 if not self .game_running :
158160 self .game_running = True
159161
@@ -338,5 +340,4 @@ def __init__(self, chat_id, user_id, lang_id, first_name, game_handler, message_
338340
339341 # When game is being ended / object is destructed
340342 def __del__ (self ):
341- self .send_message (self .chat_id , translate ("gameEnded" , self .lang_id ), reply_markup = ReplyKeyboardHide (), game_id = self .__game_id )
342- pass
343+ self .send_message (self .chat_id , translate ("gameEnded" , self .lang_id ), reply_markup = ReplyKeyboardRemove (), game_id = self .__game_id )
0 commit comments