🃏 Created blackjack game

This commit is contained in:
NikolajDanger
2020-07-28 01:58:04 +02:00
parent 5c31877656
commit 3db053be12
69 changed files with 530 additions and 24 deletions

4
.gitignore vendored
View File

@ -151,6 +151,8 @@ static
.vscode/
token.txt
resources/swcharacters.json
resources/games.json
resources/games/games.json
resources/games/blackjackCards.txt
resources/destinyPoints.txt
resources/games/tables/
gwendolynTest.py

View File

@ -11,6 +11,7 @@ import random
import funcs
funcs.makeFiles()
funcs.shuffle()
# Gets secret bot token
with open("token.txt","r") as f:
@ -53,12 +54,13 @@ async def on_message(message):
funcs.logThis(message.author.name+" ran \""+message.content+"\"")
await message.channel.send("Logging out...")
with open("resources/games.json","r") as f:
with open("resources/games/games.json","r") as f:
data = json.load(f)
data["trivia questions"] = {}
data["blackjack games"] = {}
with open("resources/games.json","w") as f:
with open("resources/games/games.json","w") as f:
json.dump(data,f,indent=4)
await client.logout()
@ -254,11 +256,11 @@ async def on_message(message):
funcs.triviaCountPoints(str(message.channel))
with open("resources/games.json", "r") as f:
with open("resources/games/games.json", "r") as f:
data = json.load(f)
del data["trivia questions"][str(message.channel)]
with open("resources/games.json", "w") as f:
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
funcs.logThis("Time's up for the trivia question in "+str(message.channel))
@ -282,7 +284,11 @@ async def on_message(message):
elif message.content.lower().startswith("!balance"):
funcs.logThis(message.author.name+" ran \""+message.content+"\"")
response = funcs.checkBalance(message.author.name.lower())
await message.channel.send(message.author.name + " has " + str(response) + " GwendoBucks")
if response == 1:
new_message = message.author.name + " has " + str(response) + " GwendoBuck"
else:
new_message = message.author.name + " has " + str(response) + " GwendoBucks"
await message.channel.send(new_message)
#gives money to other player
elif message.content.lower().startswith("!give "):
@ -300,6 +306,75 @@ async def on_message(message):
funcs.logThis("I didn't understand that")
await message.channel.send("I didn't understand that")
elif message.content.lower().startswith("!blackjack"):
funcs.logThis(message.author.name+" ran \""+message.content+"\"")
if message.content.lower() == "!blackjack" or message.content.lower() == "!blackjack ":
new_message = funcs.blackjackStart(str(message.channel))
if new_message == "started":
cardsLeft = 0
with open("resources/games/blackjackCards.txt","r") as f:
for line in f:
cardsLeft += 1
if cardsLeft < 50:
funcs.shuffle()
await message.channel.send("Shuffling the deck...")
new_message = "Blackjack game started. Use \"!blackjack bet [amount]\" to enter the game within the next 30 seconds."
await message.channel.send(new_message)
await message.channel.send(file = discord.File("resources/games/tables/blackjackTable"+str(message.channel)+".png"))
await asyncio.sleep(30)
gamedone = False
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if len(data["blackjack games"][str(message.channel)]["user hands"]) == 0:
gamedone = True
await message.channel.send("No one entered the game. Ending the game.")
while gamedone == False:
new_message, allStanding, gamedone = funcs.blackjackContinue(str(message.channel))
await message.channel.send(new_message)
if gamedone == False:
await message.channel.send(file = discord.File("resources/games/tables/blackjackTable"+str(message.channel)+".png"))
if allStanding:
await asyncio.sleep(5)
else:
await asyncio.sleep(20)
new_message = funcs.blackjackFinish(str(message.channel))
await message.channel.send(new_message)
else:
await message.channel.send(new_message)
if message.content.lower().startswith("!blackjack bet"):
commands = message.content.lower().split(" ")
try:
amount = int(commands[2])
response = funcs.blackjackPlayerDrawHand(str(message.channel),message.author.name,amount)
except:
funcs.logThis("I didn't understand that")
response = "I didn't understand that"
await message.channel.send(response)
if message.content.lower().startswith("!blackjack hit"):
response = funcs.blackjackHit(str(message.channel),message.author.name)
if response == "accept":
await message.add_reaction("👍")
else:
await message.channel.send(response)
if message.content.lower().startswith("!blackjack stand"):
response = funcs.blackjackStand(str(message.channel),message.author.name)
if response == "accept":
await message.add_reaction("👍")
else:
await message.channel.send(response)
# Is a bit sassy sometimes
meanWords = ["stupid", "bitch", "fuck", "dumb", "idiot"]

View File

@ -1,4 +1,4 @@
from .gwendolynFuncs import helloFunc, cap, imageFunc, logThis, findWikiPage, makeFiles
from .gwendolynFuncs import helloFunc, cap, imageFunc, logThis, findWikiPage, makeFiles, replaceMultiple
from .swfuncs import parseChar, parseRoll, parseDestiny, critRoll
@ -6,6 +6,6 @@ from .lookup import spellFunc, monsterFunc
from .other import nameGen, tavernGen, movieFunc
from .games import triviaStart, triviaOtherThing, triviaCountPoints, checkBalance, giveMoney
from .games import triviaStart, triviaOtherThing, triviaCountPoints, checkBalance, addMoney, giveMoney, shuffle, blackjackStart, blackjackPlayerDrawHand, blackjackContinue, blackjackFinish, blackjackStand, blackjackHit
from .roll import roll_dice

View File

@ -1,2 +1,3 @@
from .money import checkBalance, giveMoney
from .trivia import triviaCountPoints, triviaStart, triviaOtherThing
from .money import checkBalance, giveMoney, addMoney
from .trivia import triviaCountPoints, triviaStart, triviaOtherThing
from .blackjack import shuffle, blackjackStart, blackjackPlayerDrawHand, blackjackContinue, blackjackFinish, blackjackHit, blackjackStand

301
funcs/games/blackjack.py Normal file
View File

@ -0,0 +1,301 @@
import random
import json
import math
from shutil import copyfile
from funcs import logThis, replaceMultiple
from . import money, blackjackDraw
deckAmount = 4
def shuffle():
logThis("Shuffling the blackjack deck")
with open("resources/games/deckofCards.txt","r") as f:
deck = f.read()
allDecks = deck.split("\n") * 4
random.shuffle(allDecks)
data = "\n".join(allDecks)
with open("resources/games/blackjackCards.txt","w") as f:
f.write(data)
return
def calcHandValue(hand : list):
logThis("Calculating hand value")
values = [0]
for card in hand:
cardValue = card[0]
cardValue = replaceMultiple(cardValue,["0","k","q","j"],"10")
if cardValue == "a":
length = len(values)
for x in range(length):
values.append(values[x] + 11)
values[x] += 1
else:
for x in range(len(values)):
values[x] += int(cardValue)
values.sort()
handValue = values[0]
for value in values:
if value <= 21:
handValue = value
return handValue
def drawCard():
logThis("drawing a card")
with open("resources/games/blackjackCards.txt","r") as f:
cards = f.read().split("\n")
drawnCard = cards[0]
cards = cards[1:]
data = "\n".join(cards)
with open("resources/games/blackjackCards.txt","w") as f:
f.write(data)
return drawnCard
def dealerDraw(channel):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
done = False
if calcHandValue(data["blackjack games"][channel]["dealer hand"]) < 17:
data["blackjack games"][channel]["dealer hand"].append(drawCard())
else:
done = True
if calcHandValue(data["blackjack games"][channel]["dealer hand"]) > 21:
data["blackjack games"][channel]["dealer busted"] = True
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
return done
def blackjackContinue(channel):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
done = False
if data["blackjack games"][channel]["open for bets"]:
data["blackjack games"][channel]["open for bets"] = False
allStanding = True
message = "All players are standing. The dealer now shows his cards and draws."
if data["blackjack games"][channel]["all standing"]:
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
done = dealerDraw(channel)
message = "The dealer draws a card."
with open("resources/games/games.json", "r") as f:
data = json.load(f)
for user in data["blackjack games"][channel]["user hands"]:
if data["blackjack games"][channel]["user hands"][user]["hit"] == False:
data["blackjack games"][channel]["user hands"][user]["standing"] = True
if data["blackjack games"][channel]["user hands"][user]["standing"] == False:
allStanding = False
data["blackjack games"][channel]["user hands"][user]["hit"] = False
if allStanding:
data["blackjack games"][channel]["all standing"] = True
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
else:
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
blackjackDraw.drawImage(channel)
if allStanding:
if done == False:
return message, True, done
else:
return "The dealer is done drawing cards", True, done
else:
return "You have 20 seconds to either hit or stand with \"!blackjack hit\" or \"!blackjack stand\". It's assumed you're standing if you don't make a choice.", False, done
def blackjackHit(channel,user):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if data["blackjack games"][channel]["open for bets"] == False:
if data["blackjack games"][channel]["user hands"][user]["hit"] == False:
if data["blackjack games"][channel]["user hands"][user]["standing"] == False:
data["blackjack games"][channel]["user hands"][user]["hand"].append(drawCard())
data["blackjack games"][channel]["user hands"][user]["hit"] = True
handValue = calcHandValue(data["blackjack games"][channel]["user hands"][user]["hand"])
if handValue == 21:
data["blackjack games"][channel]["user hands"][user]["standing"] = True
elif handValue > 21:
data["blackjack games"][channel]["user hands"][user]["standing"] = True
data["blackjack games"][channel]["user hands"][user]["busted"] = True
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
return "accept"
else:
logThis(user+" is already standing")
return "You can't hit when you're standing"
else:
logThis(user+" has already hit this round")
return "You've already hit this round"
else:
logThis(user+" tried to hit on the first round")
return "You can't hit before you see your cards"
def blackjackStand(channel,user):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if data["blackjack games"][channel]["open for bets"] == False:
if data["blackjack games"][channel]["user hands"][user]["hit"] == False:
if data["blackjack games"][channel]["user hands"][user]["standing"] == False:
data["blackjack games"][channel]["user hands"][user]["standing"] = True
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
return "accept"
else:
logThis(user+" is already standing")
return "You're already standing"
else:
logThis(user+" has already hit this round")
return "You've already hit this round"
else:
logThis(user+" tried to stand on the first round")
return "You can't stand before you see your cards"
def blackjackPlayerDrawHand(channel,user,bet):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
logThis(user+" is trying to join the game in "+channel)
if channel in data["blackjack games"]:
if user not in data["blackjack games"][channel]["user hands"]:
if len(data["blackjack games"][channel]["user hands"]) < 5:
if data["blackjack games"][channel]["open for bets"]:
if money.checkBalance(user) >= bet:
money.addMoney(user,-1 * bet)
playerHand = [drawCard(),drawCard()]
handValue = calcHandValue(playerHand)
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if handValue == 21:
data["blackjack games"][channel]["user hands"][user] = {"hand":playerHand,"bet":bet,"standing":True,"busted":False,"blackjack":True,"hit":True}
else:
data["blackjack games"][channel]["user hands"][user] = {"hand":playerHand,"bet":bet,"standing":False,"busted":False,"blackjack":False,"hit":True}
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
logThis(user+" entered the game")
return user+" entered the game"
else:
logThis(user+" doesn't have enough GwendoBucks")
return "You don't have enough GwendoBucks to place that bet"
else:
logThis("The table is no longer open for bets")
return "The table is no longer open for bets"
else:
logThis("There are already 5 players in the game.")
return "There's already a maximum of players at the table."
else:
logThis(user+" is already in the game")
return "You've already entered this game"
else:
logThis("There is no game going on in "+channel)
return "There is no game going on in this channel"
def blackjackStart(channel:str):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
logThis("Trying to start a blackjack game in "+channel)
if channel not in data["blackjack games"]:
dealerHand = [drawCard(),drawCard()]
data["blackjack games"][channel] = {"dealer hand": dealerHand,"dealer busted":False,"user hands": {},"open for bets":True,"all standing":False}
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
copyfile("resources/games/blackjackTable.png","resources/games/tables/blackjackTable"+channel+".png")
return "started"
else:
logThis("There is already a blackjack game going on in "+channel)
return "There's already a blackjack game going on. Try again in a few minutes."
def blackjackFinish(channel):
finalWinnings = "*Final Winnings:*\n"
with open("resources/games/games.json", "r") as f:
data = json.load(f)
dealerValue = calcHandValue(data["blackjack games"][channel]["dealer hand"])
reason = ""
for user in data["blackjack games"][channel]["user hands"]:
winnings = -1 * data["blackjack games"][channel]["user hands"][user]["bet"]
if data["blackjack games"][channel]["user hands"][user]["blackjack"]:
reason = "(blackjack)"
winnings += math.floor(2.5 * data["blackjack games"][channel]["user hands"][user]["bet"])
else:
if data["blackjack games"][channel]["user hands"][user]["busted"] == False:
if data["blackjack games"][channel]["dealer busted"]:
reason = "(dealer busted)"
winnings += 2 * data["blackjack games"][channel]["user hands"][user]["bet"]
elif calcHandValue(data["blackjack games"][channel]["user hands"][user]["hand"]) > dealerValue:
winnings += 2 * data["blackjack games"][channel]["user hands"][user]["bet"]
else:
reason = "(busted)"
if winnings < 0:
if winnings == -1:
finalWinnings += user+" lost "+str(-1 * winnings)+" GwendoBuck "+reason+"\n"
else:
finalWinnings += user+" lost "+str(-1 * winnings)+" GwendoBucks "+reason+"\n"
else:
if winnings == 1:
finalWinnings += user+" won "+str(winnings)+" GwendoBuck "+reason+"\n"
else:
finalWinnings += user+" won "+str(winnings)+" GwendoBucks "+reason+"\n"
netWinnings = winnings + data["blackjack games"][channel]["user hands"][user]["bet"]
money.addMoney(user,netWinnings)
with open("resources/games/games.json", "r") as f:
data = json.load(f)
del data["blackjack games"][channel]
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
return finalWinnings

View File

@ -0,0 +1,41 @@
import json
from PIL import Image
def drawImage(channel):
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if data["blackjack games"][channel]["all standing"] == False:
dealerHand = drawHand(data["blackjack games"][channel]["dealer hand"],True)
else:
dealerHand = drawHand(data["blackjack games"][channel]["dealer hand"],False)
table = Image.open("resources/games/blackjackTable.png")
table.paste(dealerHand,(800,20),dealerHand)
for x in range(len(data["blackjack games"][channel]["user hands"])):
userHand = drawHand(list(data["blackjack games"][channel]["user hands"].values())[x]["hand"],False)
table.paste(userHand,(32+(384*x),700),userHand)
table.save("resources/games/tables/blackjackTable"+channel+".png")
return
def drawHand(hand, dealer):
length = len(hand)
background = Image.new("RGBA", (691+(125*(length-1)),1065),(0,0,0,0))
if dealer:
img = Image.open("resources/games/cards/"+hand[0].upper()+".png")
background.paste(img,(0,0),img)
img = Image.open("resources/games/cards/red_back.png")
background.paste(img,(125,0),img)
else:
for x in range(length):
img = Image.open("resources/games/cards/"+hand[x].upper()+".png")
background.paste(img,(x*125,0),img)
w, h = background.size
return background.resize((int(w/4),int(h/4)))

View File

@ -3,7 +3,9 @@ import json
from funcs import logThis
def checkBalance(user):
with open("resources/games.json", "r") as f:
user = user.lower()
logThis("checking "+user+"'s account balance")
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if user in data["users"]:
@ -11,7 +13,9 @@ def checkBalance(user):
else: return 0
def addMoney(user,amount):
with open("resources/games.json", "r") as f:
user = user.lower()
logThis("adding "+str(amount)+" to "+user+"'s account")
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if user in data["users"]:
@ -20,11 +24,11 @@ def addMoney(user,amount):
else:
data["users"][user] = amount
with open("resources/games.json", "w") as f:
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
def giveMoney(user,targetUser,amount):
with open("resources/games.json", "r") as f:
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if user in data["users"]:

View File

@ -6,8 +6,8 @@ from . import money
from funcs import logThis
def triviaStart(channel : str):
with open("resources/games.json", "r") as f:
triviaFile = json.load(f)
with open("resources/games/games.json", "r") as f:
triviaFile = json.load(f)
logThis("Trying to find a trivia question for "+channel)
@ -22,7 +22,7 @@ def triviaStart(channel : str):
correctAnswer = answers.index(data["results"][0]["correct_answer"]) + 97
triviaFile["trivia questions"][channel] = {"answer" : str(chr(correctAnswer)),"players" : {}}
with open("resources/games.json", "w") as f:
with open("resources/games/games.json", "w") as f:
json.dump(triviaFile,f,indent=4)
replacements = {"&#039;": "\'",
@ -45,7 +45,7 @@ def triviaStart(channel : str):
return "There's already a trivia question going on. Try again in like, a minute", "", ""
def triviaOtherThing(user : str, channel : str, command : str):
with open("resources/games.json", "r") as f:
with open("resources/games/games.json", "r") as f:
data = json.load(f)
if command in ["a","b","c","d"]:
@ -55,7 +55,7 @@ def triviaOtherThing(user : str, channel : str, command : str):
data["trivia questions"][channel]["players"][user] = command
with open("resources/games.json", "w") as f:
with open("resources/games/games.json", "w") as f:
json.dump(data,f,indent=4)
return "Locked in "+user+"'s answer"
@ -67,7 +67,7 @@ def triviaOtherThing(user : str, channel : str, command : str):
return "I didn't quite understand that"
def triviaCountPoints(channel : str):
with open("resources/games.json", "r") as f:
with open("resources/games/games.json", "r") as f:
data = json.load(f)
logThis("Counting points for question in "+channel)

View File

@ -8,6 +8,7 @@ import imdb # Used by movieFunc
import time # Used for logging
import logging # Used for... you know... logging
import wikia # Used by findWikiPage
import os
from .roll import dice
@ -139,14 +140,26 @@ def makeFiles():
# Creates games.json if it doesn't exist
try:
f = open("resources/games.json","r")
f = open("resources/games/games.json","r")
except:
logThis("games.json didn't exist. Making it now.")
data = {"trivia questions":{},"users":{}}
with open("resources/games.json","w") as f:
data = {"trivia questions":{},"blackjack games":{},"users":{}}
with open("resources/games/games.json","w") as f:
json.dump(data,f,indent = 4)
finally:
f.close()
# Creates blackjackCards.txt if it doesn't exist
try:
f = open("resources/games/blackjackCards.txt","r")
except:
logThis("blackjackCards.txt didn't exist. Making it now.")
data = ""
with open("resources/games/blackjackCards.txt","w") as f:
f.write(data)
finally:
f.close()
# Creates destinyPoints.txt if it doesn't exist
try:
@ -168,4 +181,21 @@ def makeFiles():
f.write(token)
finally:
f.close()
f.close()
try:
os.makedirs("resources/games/tables")
logThis("The tables directory didn't exist")
except:
logThis("The tables directory existed")
def replaceMultiple(mainString, toBeReplaces, newString):
# Iterate over the strings to be replaced
for elem in toBeReplaces :
# Check if string is in the main string
if elem in mainString :
# Replace the string
mainString = mainString.replace(elem, newString)
return mainString

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,52 @@
ad
2d
3d
4d
5d
6d
7d
8d
9d
0d
jd
qd
kd
ac
2c
3c
4c
5c
6c
7c
8c
9c
0c
jc
qc
kc
ah
2h
3h
4h
5h
6h
7h
8h
9h
0h
jh
qh
kh
as
2s
3s
4s
5s
6s
7s
8s
9s
0s
js
qs
ks