diff options
author | 2020-04-09 17:14:23 +0300 | |
---|---|---|
committer | 2020-04-09 17:14:23 +0300 | |
commit | ed7bbbcb635dcc6bf5e4028cc6fd1bc4abfe97a2 (patch) | |
tree | 387c5bbe98985282ca3182ed670cf59201eb95cb /bot/exts/evergreen/tic_tac_toe.py | |
parent | (TicTacToe): Created function `Game.play`. (diff) |
(TicTacToe): Redesigned board system, applied it's changes + created new function to `Player` class: `get_move`.
Diffstat (limited to 'bot/exts/evergreen/tic_tac_toe.py')
-rw-r--r-- | bot/exts/evergreen/tic_tac_toe.py | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/bot/exts/evergreen/tic_tac_toe.py b/bot/exts/evergreen/tic_tac_toe.py index 260c8c2f..1df4571b 100644 --- a/bot/exts/evergreen/tic_tac_toe.py +++ b/bot/exts/evergreen/tic_tac_toe.py @@ -21,6 +21,27 @@ class Player: self.ctx = ctx self.symbol = symbol + async def get_move(self, board: t.Dict[int, str], msg: discord.Message) -> t.Tuple[bool, t.Optional[int]]: + """ + Get move from user. + + Return is timeout reached and position of field what user will fill when timeout don't reach. + """ + def check_for_move(r: discord.Reaction, u: discord.User) -> bool: + return ( + u.id == self.user.id + and msg.id == r.message.id + and r.emoji in board.values() + and r.emoji in Emojis.number_emojis.values() + ) + + try: + react, = await self.ctx.bot.wait_for('reaction_add', timeout=120.0, check=check_for_move) + except asyncio.TimeoutError: + return True, None + else: + return False, Emojis.number_emojis.keys()[Emojis.number_emojis.values().index(react.emoji)] + class Game: """Class that contains information and functions about Tic Tac Toe game.""" @@ -29,11 +50,17 @@ class Game: self.channel = channel self.players = players self.ctx = ctx - self.board = [ - [Emojis.number_emojis[1], Emojis.number_emojis[2], Emojis.number_emojis[3]], - [Emojis.number_emojis[4], Emojis.number_emojis[5], Emojis.number_emojis[6]], - [Emojis.number_emojis[7], Emojis.number_emojis[8], Emojis.number_emojis[9]] - ] + self.board = { + 1: Emojis.number_emojis[1], + 2: Emojis.number_emojis[2], + 3: Emojis.number_emojis[3], + 4: Emojis.number_emojis[4], + 5: Emojis.number_emojis[5], + 6: Emojis.number_emojis[6], + 7: Emojis.number_emojis[7], + 8: Emojis.number_emojis[8], + 9: Emojis.number_emojis[9] + } self.current = self.players[0] self.next = self.players[1] @@ -86,9 +113,13 @@ class Game: async def send_board(self) -> discord.Message: """Send board and return it's message.""" msg = "" - for line in self.board: - msg += " ".join(line) - msg += "\n" + c = 0 + for line in self.board.values(): + msg += f"{line} " + c += 1 + if c == 3: + msg += "\n" + c = 0 return await self.ctx.send(msg) async def play(self) -> None: |