✨ Four in a row "AI"
This commit is contained in:
125
Gwendolyn.py
125
Gwendolyn.py
@@ -21,6 +21,83 @@ blackjackDecks = 4
|
|||||||
# Variable for reacting to messages
|
# Variable for reacting to messages
|
||||||
meanWords = ["stupid", "bitch", "fuck", "dumb", "idiot"]
|
meanWords = ["stupid", "bitch", "fuck", "dumb", "idiot"]
|
||||||
|
|
||||||
|
# Runs Four in a Row
|
||||||
|
async def fiar(channel,command,user):
|
||||||
|
response, showImage, deleteImage, gameDone, gwendoTurn = parseFourInARow(command,str(channel),user)
|
||||||
|
await channel.send(response)
|
||||||
|
logThis(response,str(channel))
|
||||||
|
if showImage:
|
||||||
|
if deleteImage:
|
||||||
|
oldImage = await deleteMessage("fourInARow"+str(channel),channel)
|
||||||
|
oldImage = await channel.send(file = discord.File("resources/games/4InARowBoards/board"+str(channel)+".png"))
|
||||||
|
if gameDone == False:
|
||||||
|
if gwendoTurn:
|
||||||
|
await asyncio.sleep(2)
|
||||||
|
response, showImage, deleteImage, gameDone, gwendoTurn = fourInARowAI(str(channel))
|
||||||
|
await channel.send(response)
|
||||||
|
logThis(response,str(channel))
|
||||||
|
if showImage:
|
||||||
|
if deleteImage:
|
||||||
|
await oldImage.delete()
|
||||||
|
oldImage = await channel.send(file = discord.File("resources/games/4InARowBoards/board"+str(channel)+".png"))
|
||||||
|
if gameDone == False:
|
||||||
|
with open("resources/games/oldImages/fourInARow"+str(channel), "w") as f:
|
||||||
|
f.write(str(oldImage.id))
|
||||||
|
try:
|
||||||
|
await oldImage.add_reaction("1️⃣")
|
||||||
|
await oldImage.add_reaction("2️⃣")
|
||||||
|
await oldImage.add_reaction("3️⃣")
|
||||||
|
await oldImage.add_reaction("4️⃣")
|
||||||
|
await oldImage.add_reaction("5️⃣")
|
||||||
|
await oldImage.add_reaction("6️⃣")
|
||||||
|
await oldImage.add_reaction("7️⃣")
|
||||||
|
except:
|
||||||
|
logThis("Image deleted before I could react to all of them")
|
||||||
|
|
||||||
|
else:
|
||||||
|
with open("resources/games/oldImages/fourInARow"+str(channel), "w") as f:
|
||||||
|
f.write(str(oldImage.id))
|
||||||
|
try:
|
||||||
|
await oldImage.add_reaction("1️⃣")
|
||||||
|
await oldImage.add_reaction("2️⃣")
|
||||||
|
await oldImage.add_reaction("3️⃣")
|
||||||
|
await oldImage.add_reaction("4️⃣")
|
||||||
|
await oldImage.add_reaction("5️⃣")
|
||||||
|
await oldImage.add_reaction("6️⃣")
|
||||||
|
await oldImage.add_reaction("7️⃣")
|
||||||
|
except:
|
||||||
|
logThis("Image deleted before I could react to all of them")
|
||||||
|
|
||||||
|
if gameDone:
|
||||||
|
with open("resources/games/games.json", "r") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
winner = data["4 in a row games"][str(channel)]["winner"]
|
||||||
|
if winner != 0:
|
||||||
|
with open("resources/games/games.json","w") as f:
|
||||||
|
json.dump(data,f,indent=4)
|
||||||
|
addMoney(data["4 in a row games"][str(channel)]["players"][winner-1].lower(),20)
|
||||||
|
with open("resources/games/games.json", "r") as f:
|
||||||
|
data = json.load(f)
|
||||||
|
|
||||||
|
del data["4 in a row games"][str(channel)]
|
||||||
|
|
||||||
|
with open("resources/games/games.json","w") as f:
|
||||||
|
json.dump(data,f,indent=4)
|
||||||
|
|
||||||
|
# Deletes a message
|
||||||
|
async def deleteMessage(imageLocation,channel):
|
||||||
|
try:
|
||||||
|
logThis("Finding old image")
|
||||||
|
with open("resources/games/oldImages/"+imageLocation, "r") as f:
|
||||||
|
oldImage = await channel.fetch_message(int(f.read()))
|
||||||
|
logThis("Deleting old image")
|
||||||
|
await oldImage.delete()
|
||||||
|
except:
|
||||||
|
oldImage = ""
|
||||||
|
|
||||||
|
return oldImage
|
||||||
|
|
||||||
# Loop of game rounds
|
# Loop of game rounds
|
||||||
async def blackjackLoop(channel,gameRound,gameID):
|
async def blackjackLoop(channel,gameRound,gameID):
|
||||||
logThis("Loop "+str(gameRound),str(channel))
|
logThis("Loop "+str(gameRound),str(channel))
|
||||||
@@ -418,7 +495,7 @@ async def parseCommands(message,content):
|
|||||||
cardsLeft = 0
|
cardsLeft = 0
|
||||||
if os.path.exists("resources/games/blackjackCards/"+str(message.channel)+".txt"):
|
if os.path.exists("resources/games/blackjackCards/"+str(message.channel)+".txt"):
|
||||||
with open("resources/games/blackjackCards/"+str(message.channel)+".txt","r") as f:
|
with open("resources/games/blackjackCards/"+str(message.channel)+".txt","r") as f:
|
||||||
for line in f:
|
for _ in f:
|
||||||
cardsLeft += 1
|
cardsLeft += 1
|
||||||
|
|
||||||
# Shuffles if not enough cards
|
# Shuffles if not enough cards
|
||||||
@@ -581,7 +658,7 @@ async def parseCommands(message,content):
|
|||||||
cardsLeft = 0
|
cardsLeft = 0
|
||||||
if os.path.exists("resources/games/blackjackCards/"+str(message.channel)+".txt"):
|
if os.path.exists("resources/games/blackjackCards/"+str(message.channel)+".txt"):
|
||||||
with open("resources/games/blackjackCards/"+str(message.channel)+".txt","r") as f:
|
with open("resources/games/blackjackCards/"+str(message.channel)+".txt","r") as f:
|
||||||
for line in f:
|
for _ in f:
|
||||||
cardsLeft += 1
|
cardsLeft += 1
|
||||||
|
|
||||||
decksLeft = round(cardsLeft/52,1)
|
decksLeft = round(cardsLeft/52,1)
|
||||||
@@ -602,49 +679,6 @@ async def parseCommands(message,content):
|
|||||||
logThis("That's not a command (error code 001)",str(message.channel))
|
logThis("That's not a command (error code 001)",str(message.channel))
|
||||||
await message.channel.send("That's not a command (error code 001)")
|
await message.channel.send("That's not a command (error code 001)")
|
||||||
|
|
||||||
async def fiar(channel,command,user):
|
|
||||||
response, showImage, deleteImage, gameDone = parseFourInARow(command,str(channel),user)
|
|
||||||
await channel.send(response)
|
|
||||||
logThis(response,str(channel))
|
|
||||||
if showImage:
|
|
||||||
if deleteImage:
|
|
||||||
try:
|
|
||||||
logThis("Finding old image")
|
|
||||||
with open("resources/games/oldImages/fourInARow"+str(channel), "r") as f:
|
|
||||||
oldImage = await channel.fetch_message(int(f.read()))
|
|
||||||
logThis("Deleting old image")
|
|
||||||
await oldImage.delete()
|
|
||||||
except:
|
|
||||||
oldImage = ""
|
|
||||||
oldImage = await channel.send(file = discord.File("resources/games/4InARowBoards/board"+str(channel)+".png"))
|
|
||||||
if gameDone == False:
|
|
||||||
await oldImage.add_reaction("1️⃣")
|
|
||||||
await oldImage.add_reaction("2️⃣")
|
|
||||||
await oldImage.add_reaction("3️⃣")
|
|
||||||
await oldImage.add_reaction("4️⃣")
|
|
||||||
await oldImage.add_reaction("5️⃣")
|
|
||||||
await oldImage.add_reaction("6️⃣")
|
|
||||||
await oldImage.add_reaction("7️⃣")
|
|
||||||
with open("resources/games/oldImages/fourInARow"+str(channel), "w") as f:
|
|
||||||
f.write(str(oldImage.id))
|
|
||||||
|
|
||||||
if gameDone:
|
|
||||||
with open("resources/games/games.json", "r") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
winner = data["4 in a row games"][str(channel)]["winner"]
|
|
||||||
if winner != 0:
|
|
||||||
with open("resources/games/games.json","w") as f:
|
|
||||||
json.dump(data,f,indent=4)
|
|
||||||
addMoney(data["4 in a row games"][str(channel)]["players"][winner-1].lower(),20)
|
|
||||||
with open("resources/games/games.json", "r") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
del data["4 in a row games"][str(channel)]
|
|
||||||
|
|
||||||
with open("resources/games/games.json","w") as f:
|
|
||||||
json.dump(data,f,indent=4)
|
|
||||||
|
|
||||||
|
|
||||||
# Makes files if they don't exist yet
|
# Makes files if they don't exist yet
|
||||||
makeFiles()
|
makeFiles()
|
||||||
@@ -682,6 +716,7 @@ async def on_message(message):
|
|||||||
|
|
||||||
@client.event
|
@client.event
|
||||||
async def on_reaction_add(reaction,user):
|
async def on_reaction_add(reaction,user):
|
||||||
|
if user.bot == False:
|
||||||
message = reaction.message
|
message = reaction.message
|
||||||
channel = message.channel
|
channel = message.channel
|
||||||
logThis(user.display_name+" reacted to a message",str(channel))
|
logThis(user.display_name+" reacted to a message",str(channel))
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from .money import checkBalance, giveMoney, addMoney
|
from .money import checkBalance, giveMoney, addMoney
|
||||||
from .trivia import triviaCountPoints, triviaStart, triviaAnswer
|
from .trivia import triviaCountPoints, triviaStart, triviaAnswer
|
||||||
from .blackjack import blackjackShuffle, blackjackStart, blackjackPlayerDrawHand, blackjackContinue, blackjackFinish, blackjackHit, blackjackStand, blackjackDouble, blackjackSplit
|
from .blackjack import blackjackShuffle, blackjackStart, blackjackPlayerDrawHand, blackjackContinue, blackjackFinish, blackjackHit, blackjackStand, blackjackDouble, blackjackSplit
|
||||||
from .fourInARow import parseFourInARow
|
from .fourInARow import parseFourInARow, fourInARowAI
|
||||||
@@ -12,7 +12,7 @@ def fourInARowStart(channel, user, opponent):
|
|||||||
if user.lower() != opponent.lower():
|
if user.lower() != opponent.lower():
|
||||||
if channel not in data["4 in a row games"]:
|
if channel not in data["4 in a row games"]:
|
||||||
|
|
||||||
if opponent.lower() == "gwendolyn":
|
if opponent.lower() in ["gwendolyn",""," "]:
|
||||||
opponent = "Gwendolyn"
|
opponent = "Gwendolyn"
|
||||||
|
|
||||||
board = [ [ 0 for i in range(7) ] for j in range(6) ]
|
board = [ [ 0 for i in range(7) ] for j in range(6) ]
|
||||||
@@ -25,11 +25,11 @@ def fourInARowStart(channel, user, opponent):
|
|||||||
|
|
||||||
fourInARowDraw.drawImage(channel)
|
fourInARowDraw.drawImage(channel)
|
||||||
|
|
||||||
return "Started game. It's "+user+"'s turn", True, False, False
|
return "Started game against "+opponent+". It's "+user+"'s turn", True, False, False, False
|
||||||
else:
|
else:
|
||||||
return "There's already a 4 in a row game going on in this channel", False, False, False
|
return "There's already a 4 in a row game going on in this channel", False, False, False, False
|
||||||
else:
|
else:
|
||||||
return "You can't play against yourself", False, False, False
|
return "You can't play against yourself", False, False, False, False
|
||||||
|
|
||||||
# Places a piece at the lowest available point in a specific column
|
# Places a piece at the lowest available point in a specific column
|
||||||
def placePiece(channel : str,player : int,column : int):
|
def placePiece(channel : str,player : int,column : int):
|
||||||
@@ -63,7 +63,9 @@ def placePiece(channel : str,player : int,column : int):
|
|||||||
data["4 in a row games"][channel]["win direction"] = winDirection
|
data["4 in a row games"][channel]["win direction"] = winDirection
|
||||||
data["4 in a row games"][channel]["win coordinates"] = winCoordinates
|
data["4 in a row games"][channel]["win coordinates"] = winCoordinates
|
||||||
|
|
||||||
message = data["4 in a row games"][channel]["players"][won-1]+" won. Adding 20 GwendoBucks to their account."
|
message = data["4 in a row games"][channel]["players"][won-1]+" won."
|
||||||
|
if data["4 in a row games"][channel]["players"][won-1] != "Gwendolyn":
|
||||||
|
message += " Adding 20 GwendoBucks to their account."
|
||||||
elif 0 not in board[0]:
|
elif 0 not in board[0]:
|
||||||
gameWon = True
|
gameWon = True
|
||||||
message = "It's a draw!"
|
message = "It's a draw!"
|
||||||
@@ -74,22 +76,28 @@ def placePiece(channel : str,player : int,column : int):
|
|||||||
with open("resources/games/games.json", "w") as f:
|
with open("resources/games/games.json", "w") as f:
|
||||||
json.dump(data,f,indent=4)
|
json.dump(data,f,indent=4)
|
||||||
|
|
||||||
|
gwendoTurn = False
|
||||||
|
|
||||||
|
if data["4 in a row games"][channel]["players"][turn] == "Gwendolyn":
|
||||||
|
logThis("It's Gwendolyn's turn")
|
||||||
|
gwendoTurn = True
|
||||||
|
|
||||||
fourInARowDraw.drawImage(channel)
|
fourInARowDraw.drawImage(channel)
|
||||||
return message, True, True, gameWon
|
return message, True, True, gameWon, gwendoTurn
|
||||||
else:
|
else:
|
||||||
return "There isn't any room in that column", True, True, False
|
return "There isn't any room in that column", True, True, False, False
|
||||||
else:
|
else:
|
||||||
return "There's no game in this channel", False, False, False
|
return "There's no game in this channel", False, False, False, False
|
||||||
|
|
||||||
|
|
||||||
# Parses command
|
# Parses command
|
||||||
def parseFourInARow(command, channel, user):
|
def parseFourInARow(command, channel, user):
|
||||||
if command == "" or command == " ":
|
if command == "" or command == " ":
|
||||||
return "I didn't get that. \"Use !fourinarow start [opponent]\" to start a game.", False, False, False
|
return "I didn't get that. \"Use !fourinarow start [opponent]\" to start a game.", False, False, False, False
|
||||||
|
|
||||||
|
|
||||||
elif command.startswith(" start "):
|
elif command.startswith(" start ") or command == (" start"):
|
||||||
command = command.replace(" start ","")
|
command = command.replace(" start ","").replace(" start","")
|
||||||
return fourInARowStart(channel,user,command)
|
return fourInARowStart(channel,user,command)
|
||||||
|
|
||||||
elif command.startswith(" stop"):
|
elif command.startswith(" stop"):
|
||||||
@@ -97,9 +105,9 @@ def parseFourInARow(command, channel, user):
|
|||||||
data = json.load(f)
|
data = json.load(f)
|
||||||
|
|
||||||
if user in data["4 in a row games"][channel]["players"]:
|
if user in data["4 in a row games"][channel]["players"]:
|
||||||
return "Ending game.", False, False, True
|
return "Ending game.", False, False, True, False
|
||||||
else:
|
else:
|
||||||
return "You can't end a game where you're not a player.", False, False, False
|
return "You can't end a game where you're not a player.", False, False, False, False
|
||||||
elif command.startswith(" place"):
|
elif command.startswith(" place"):
|
||||||
commands = command.split(" ")
|
commands = command.split(" ")
|
||||||
#try:
|
#try:
|
||||||
@@ -107,7 +115,7 @@ def parseFourInARow(command, channel, user):
|
|||||||
#except:
|
#except:
|
||||||
# return "I didn't quite get that", False, False, False
|
# return "I didn't quite get that", False, False, False
|
||||||
else:
|
else:
|
||||||
return "I didn't get that", False, False, False
|
return "I didn't get that", False, False, False, False
|
||||||
|
|
||||||
def isWon(channel):
|
def isWon(channel):
|
||||||
logThis("Checking for win",channel)
|
logThis("Checking for win",channel)
|
||||||
@@ -161,7 +169,6 @@ def isWon(channel):
|
|||||||
# Checks left diagonal
|
# Checks left diagonal
|
||||||
if line <= 6-4 and place >= 3:
|
if line <= 6-4 and place >= 3:
|
||||||
pieces = [game[line+1][place-1],game[line+2][place-2],game[line+3][place-3]]
|
pieces = [game[line+1][place-1],game[line+2][place-2],game[line+3][place-3]]
|
||||||
print(pieces)
|
|
||||||
else:
|
else:
|
||||||
pieces = [0]
|
pieces = [0]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user