aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Suhail <[email protected]>2019-08-05 20:04:24 +0100
committerGravatar Suhail <[email protected]>2019-08-05 20:04:24 +0100
commit254113c929b16e3add4be6af6a0fac35f55c9a2d (patch)
tree121512083c7bf3fe41c52e81e9371a115c9645c1
parentBattleships Game (diff)
Post results and boards to initial channel
-rw-r--r--bot/seasons/evergreen/battleship.py40
1 files changed, 34 insertions, 6 deletions
diff --git a/bot/seasons/evergreen/battleship.py b/bot/seasons/evergreen/battleship.py
index 3e8ea3a7..70d9a520 100644
--- a/bot/seasons/evergreen/battleship.py
+++ b/bot/seasons/evergreen/battleship.py
@@ -64,9 +64,16 @@ grid_typehint = typing.List[typing.List[Square]]
class Game:
"""A Battleship Game."""
- def __init__(self, bot: commands.Bot, player1: discord.Member, player2: discord.Member) -> None:
+ def __init__(
+ self,
+ bot: commands.Bot,
+ channel: discord.TextChannel,
+ player1: discord.Member,
+ player2: discord.Member
+ ) -> None:
self.bot = bot
+ self.public_channel = channel
self.player1 = player1
self.player2 = player2
@@ -114,8 +121,29 @@ class Game:
return grid[number-1][index[letter]] # -1 since lists are indexed from 0
- def game_over(self) -> None:
- """Removes games from list of current games."""
+ async def game_over(
+ self,
+ *,
+ timeout: bool = False,
+ winner: typing.Optional[discord.Member] = None,
+ loser: typing.Optional[discord.Member] = None
+ ) -> None:
+ """Removes games from list of current games and announces to public chat."""
+ if not timeout: # If someone won and not the game timed out
+ await self.public_channel.send(f"Game Over! {winner.mention} won against {loser.mention}")
+ self_grid_1 = self.format_grid([
+ [ship_emojis[bool(square.boat), square.aimed] for square in row]
+ for row in self.grids[self.player1]
+ ])
+
+ self_grid_2 = self.format_grid([
+ [ship_emojis[bool(square.boat), square.aimed] for square in row]
+ for row in self.grids[self.player2]
+ ])
+
+ await self.public_channel.send(f"{self.player1}'s Board:\n{self_grid_1}")
+ await self.public_channel.send(f"{self.player2}'s Board:\n{self_grid_2}")
+
self.bot.get_cog("Battleship").games.remove(self)
@staticmethod
@@ -237,7 +265,7 @@ class Game:
break
if self.gameover:
- self.game_over()
+ await self.game_over(timeout=True)
break
square.aimed = True
@@ -258,7 +286,7 @@ class Game:
await self.turn.send("You win!")
await self.next.send("You lose!")
self.gameover = True
- self.game_over()
+ await self.game_over(winner=self.turn, loser=self.next)
break
else:
await self.turn.send("Miss!", delete_after=3.0)
@@ -330,7 +358,7 @@ class Battleship(commands.Cog):
try:
if self.already_playing(ctx.author):
return
- game = Game(self.bot, ctx.author, user)
+ game = Game(self.bot, ctx.channel, ctx.author, user)
self.games.append(game)
await game.start_game()
except discord.Forbidden: