💌 Started on Love letter
This commit is contained in:
@ -100,5 +100,10 @@ class GamesCog(commands.Cog):
|
||||
async def hexCommand(self, ctx, *, content = ""):
|
||||
await self.client.gameLoops.runHex(ctx.message.channel,content,"#"+str(ctx.message.author.id))
|
||||
|
||||
# Runs a game of Love Letter
|
||||
@commands.command(aliases = ["ll"])
|
||||
async def loveletter(self, ctx, *, content = ""):
|
||||
await self.client.gameLoops.runLoveletter(ctx.message.channel,content,"#"+str(ctx.message.author.id))
|
||||
|
||||
def setup(client):
|
||||
client.add_cog(GamesCog(client))
|
@ -203,11 +203,48 @@ class GameLoops():
|
||||
f.write(str(oldImage.id))
|
||||
|
||||
if gameDone:
|
||||
game = self.bot.database["hexGames"].find_one({"_id":str(channel.id)})
|
||||
print(game)
|
||||
game = self.bot.database["hex games"].find_one({"_id":str(channel.id)})
|
||||
|
||||
winner = game["winner"]
|
||||
if winner != 0 and game["players"][0] != game["players"][1]: # player1 != player2
|
||||
winnings = game["difficulty"]*10
|
||||
self.bot.money.addMoney(game["players"][winner-1].lower(),winnings)
|
||||
|
||||
self.bot.funcs.deleteGame("hex games",str(channel.id))
|
||||
|
||||
|
||||
# Runs Love letter
|
||||
|
||||
async def runLoveletter(self,channel,command,user):
|
||||
try:
|
||||
response, showImage, deleteImage = self.bot.hex.parseLove(command,str(channel.id),user)
|
||||
except:
|
||||
logThis("Error parsing command (error code 1810)")
|
||||
|
||||
await channel.send(response)
|
||||
logThis(response,str(channel.id))
|
||||
if showImage:
|
||||
if deleteImage:
|
||||
await self.deleteMessage("loveletter"+str(channel.id),channel)
|
||||
oldImage = await channel.send(file = discord.File("resources/games/loveletterBoards/loveletterBoard"+str(channel.id)+".png"))
|
||||
|
||||
if len(remainingLetters) > 15:
|
||||
otherMessage = await channel.send("_ _")
|
||||
reactionMessages = {oldImage : remainingLetters[:15],otherMessage : remainingLetters[15:]}
|
||||
else:
|
||||
otherMessage = ""
|
||||
reactionMessages = {oldImage : remainingLetters}
|
||||
|
||||
oldMessages = str(oldImage.id)
|
||||
if otherMessage != "":
|
||||
oldMessages += "\n"+str(otherMessage.id)
|
||||
with open("resources/games/oldImages/hangman"+str(channel.id), "w") as f:
|
||||
f.write(oldMessages)
|
||||
|
||||
try:
|
||||
for message, letters in reactionMessages.items():
|
||||
for letter in letters:
|
||||
emoji = chr(ord(letter)+127397)
|
||||
await message.add_reaction(emoji)
|
||||
except:
|
||||
logThis("Image deleted before adding all reactions")
|
96
funcs/games/loveletter.py
Normal file
96
funcs/games/loveletter.py
Normal file
@ -0,0 +1,96 @@
|
||||
import random
|
||||
|
||||
from funcs import logThis
|
||||
from .loveletterDraw import DrawLove
|
||||
|
||||
class HexGame():
|
||||
def __init__(self,bot):
|
||||
self.bot = bot
|
||||
self.draw = DrawHex(bot)
|
||||
|
||||
# Parses command
|
||||
def parseLove(self, command, channel, user):
|
||||
commands = command.lower().split()
|
||||
game = self.bot.database["loveletter games"].find_one({"_id":channel})
|
||||
|
||||
if command == "" or command == " ":
|
||||
logThis(str(user)+"started a Love Letter game with loveStart(). "+)
|
||||
return self.loveStart(channel,user,commands[1]) # commands[1] is the opponent
|
||||
|
||||
elif commands[0] == "start":
|
||||
# Starting a game
|
||||
if len(commands) == 1: # if the commands is "!hex start", the opponent is Gwendolyn at difficulty 2
|
||||
commands.append("2")
|
||||
logThis("Starting a hex game with hexStart(). "+str(user)+" challenged "+commands[1])
|
||||
return self.hexStart(channel,user,commands[1]) # commands[1] is the opponent
|
||||
|
||||
# If using a command with no game, return error
|
||||
elif game == None:
|
||||
return "There's no game in this channel", False, False, False, False
|
||||
|
||||
# Stopping the game
|
||||
elif commands[0] == "stop":
|
||||
if user in game["players"]:
|
||||
return "Ending game.", False, False, True, False
|
||||
else:
|
||||
return "You can't end a game where you're not a player.", False, False, False, False
|
||||
|
||||
# Placing a piece
|
||||
elif commands[0] == "place":
|
||||
try:
|
||||
return self.placeHex(channel,commands[1], user)
|
||||
except:
|
||||
return "I didn't get that. To place a piece use \"!hex place [position]\". A valid position is e.g. \"E2\".", False, False, False, False
|
||||
|
||||
# Undo
|
||||
elif commands[0] == "undo":
|
||||
return self.undoHex(channel, user)
|
||||
|
||||
# Surrender
|
||||
elif commands[0] == "surrender":
|
||||
players = game["players"]
|
||||
if user in players:
|
||||
opponent = (players.index(user) + 1) % 2
|
||||
self.bot.database["hex games"].update_one({"_id":channel},{"$set":{"winner":opponent + 1}})
|
||||
return "{} surrendered. That means {} won! Adding 30 Gwendobucks to their account.".format(self.bot.funcs.getName(user),self.bot.funcs.getName(players[opponent])), False, False, True, False
|
||||
else:
|
||||
return "You can't surrender when you're not a player.", False, False, False, False
|
||||
|
||||
# Swap
|
||||
elif commands[0] == "swap":
|
||||
if len(game["gameHistory"]) == 1: # Only after the first move
|
||||
self.bot.database["hex games"].update_one({"_id":channel},
|
||||
{"$set":{"players":game["players"][::-1]}}) # Swaps their player-number
|
||||
|
||||
# Swaps the color of the hexes on the board drawing:
|
||||
self.draw.drawSwap(channel)
|
||||
player2 = game["players"][1]
|
||||
gwendoTurn = (player2 == "Gwendolyn")
|
||||
return "The color of both players were swapped. It is now {}'s turn".format(player2), True, True, False, gwendoTurn
|
||||
else:
|
||||
return "You can only swap as the second player after the very first move.", False, False, False, False
|
||||
|
||||
else:
|
||||
return "I didn't get that. Use \"!hex start [opponent]\" to start a game, \"!hex place [position]\" to place a piece, \"!hex undo\" to undo your last move or \"!hex stop\" to stop a current game.", False, False, False, False
|
||||
|
||||
# Starts the game
|
||||
def loveStart(self, channel, user, opponent):
|
||||
game = self.bot.database["loveletter games"].find_one({"_id":channel})
|
||||
|
||||
if game == None:
|
||||
|
||||
|
||||
deck = [1,1,1,1,1, 2,2, 3,3, 4,4, 5,5, 6, 7, 8]
|
||||
random.shuffle(deck)
|
||||
cardAside = deck[0]
|
||||
del deck[0] # The card that is set aside
|
||||
|
||||
newGame = {"_id":channel,"user hands": {},"discard piles":{},"deck":deck,"round":0,"cardAside":cardAside}
|
||||
|
||||
self.bot.database["loveletter games"].insert_one(newGame)
|
||||
|
||||
return ""
|
||||
else:
|
||||
logThis("There's already a Love Letter game going on in this channel",str(channel))
|
||||
return "There's already a Love Letter game going on in this channel"
|
||||
|
15
funcs/games/loveletterDraw.py
Normal file
15
funcs/games/loveletterDraw.py
Normal file
@ -0,0 +1,15 @@
|
||||
import math
|
||||
|
||||
from PIL import Image, ImageDraw, ImageFont
|
||||
from funcs import logThis
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DrawLove():
|
||||
def __init__(self,bot):
|
||||
self.bot = bot
|
||||
|
||||
def drawBoard(self, channel):
|
||||
logThis("Drawing empty Hex board")
|
@ -137,3 +137,7 @@
|
||||
1714 - Error in drawMisses()
|
||||
1720 - Unspecified hangmanGuess() error
|
||||
1730 - Unspecified hangmanStart() error
|
||||
|
||||
18 - Love Letter
|
||||
1800 - Unspecified error
|
||||
1801 - Error parsing command
|
Reference in New Issue
Block a user