Ledger reimplemented with SQLite3

This commit is contained in:
2022-11-28 20:04:16 +10:00
parent e729647f65
commit cb0778bbc2
6 changed files with 63 additions and 50 deletions

View File

@@ -1,7 +1,9 @@
import discord
import sqlite3
from discord import app_commands
from BlackJack import BlackJack
botIntents = discord.Intents.all()
client = discord.Client(intents=botIntents)
@@ -75,7 +77,7 @@ async def bj(interaction: discord.Interaction):
discoutput = lambda m: discordOutput(interaction, m)
blackJack = BlackJack(discinput, discoutput)
await interaction.response.send_message("Let's play Black Jack!")
await blackJack.play_game(interaction.user, 100)
await blackJack.play_game(interaction.user.id, 100)
async def discordInput(interaction: discord.Interaction, message:str):
response = HitOrStand()
@@ -86,6 +88,14 @@ async def discordInput(interaction: discord.Interaction, message:str):
async def discordOutput(interaction: discord.Interaction, message):
await interaction.followup.send(message)
@tree.command(description="Find your Balance")
async def bal(interaction: discord.Interaction):
conn = sqlite3.connect("ledger.db")
cur = conn.cursor()
ID = interaction.user.id
data = cur.execute("SELECT * FROM ledger WHERE USERID = ?", (ID,))
await interaction.response.send_message(data)
"""
#### Fin ####
"""

View File

@@ -48,7 +48,10 @@ def generateHand(hand, deck, handSize = 2):
addCardToHand(hand, deck)
i += 1
def handNumbersToCards(hand): return [convertNumberToCard(a) for a in hand]
def handNumbersToCards(hand):
cards = ""
for card in hand:
cards += convertNumberToCard(card)
def getHandTotal(hand):
cardValue = lambda c: min(c % 13 + 1, 10)
@@ -62,22 +65,6 @@ def getHandTotal(hand):
i += card
return i
class BlackJackLedger(Ledger):
def __init__(self) -> None:
super().__init__()
def updateLedger(self, data, oldData):
ID, money, wins, losses = oldData
_, newMoney, newWins, newLosses = data
wins += newWins
losses += newLosses
money += newMoney
data = [ID, money, wins, losses]
return data
class BlackJack:
def __init__(self, recv, send):
self.playerTurn = True
@@ -91,7 +78,7 @@ class BlackJack:
self.recv = recv
self.send = send
ledger = BlackJackLedger()
self.ledger = Ledger.Ledger()
def getPH(self):
return self.playerHand
@@ -152,9 +139,10 @@ class BlackJack:
validInput = False
gameOver = False
playerStood = False
playerStats = self.readLedger(ID)
playerStats = self.ledger.readLedger(ID)
if playerStats is None:
playerStats = (ID, 100, 0, 0)
self.ledger.writeLedger(ID)
playerStats = self.ledger.readLedger
while not gameOver:
playerWinState = self.checkHandState(self.playerHand)
@@ -199,13 +187,17 @@ class BlackJack:
"\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand))
if playerWinState == "w":
await self.send("You won!")
# self.writeLedger(ID, 2*bet, True)
win = (2*bet, 1, 0, ID)
self.ledger.updateLedger(playerStats, win)
elif playerWinState == "l":
await self.send("You busted!")
# self.writeLedger(ID, -bet, False)
loss = (-bet, 0, 1, ID)
self.ledger.updateLedger(playerStats, loss)
elif dealerWinState == "w":
await self.send("The Dealer reached 21 before you!")
# self.writeLedger(ID, -bet, False)
loss = (-bet, 0, 1, ID)
self.ledger.updateLedger(playerStats, loss)
elif dealerWinState == "l":
await self.send("The Dealer busted before you!")
# self.writeLedger(ID, 2*bet, True)
win = (2*bet, 1, 0, ID)
self.ledger.updateLedger(playerStats, win)

View File

@@ -2,39 +2,50 @@ import sqlite3
class Ledger():
def __init__(self) -> None:
self.data = []
self.indexes = {} # ID: Index
self.db = sqlite3.connect("ledger.db")
self.data = self.db.cursor()
self.data.execute(""" CREATE TABLE IF NOT EXISTS ledger (
ID integer PRIMARY KEY,
USERID integer,
MONEY integer DEFAULT 100,
WINS integer DEFAULT 0,
LOSSES integer DEFAULT 0
); """)
def readLedger(self, ID):
data = None
index = self.indexes.get(ID, None)
if index is not None:
data = self.data[index]
self.data.execute("""SELECT USERID, MONEY, WINS, LOSSES FROM ledger WHERE USERID = ?""", (ID,))
data = self.data.fetchone()
return data
def writeLedger(self, ID, data):
oldData = self.readLedger(ID)
if oldData is not None:
data = self.updateLedger(data, oldData)
index = self.indexes[ID]
self.data[index] = data
else:
self.data.append(data)
index = len(self.data) - 1
self.indexes.update({ID: index})
self.saveLedger()
def writeLedger(self, ID):
query = """ INSERT INTO ledger(USERID)
VALUES(?) """
self.data.execute(query, (ID,))
self.db.commit()
def updateLedger(self, data, newData):
return data
query = """ UPDATE ledger
SET MONEY = ?,
WINS = ?,
LOSSES = ?,
WHERE USERID = ?"""
data = [data[i] + newData[i] for i in range(len(data))]
self.data.execute(query, data)
def main():
conn = sqlite3.connect("ledger.db")
cur = conn.cursor()
table = """ CREATE TABLE IF NOT EXISTS
ledger = Ledger()
ledger.writeLedger(10121)
ID = 10121
data = ledger.readLedger(ID)
"""
cur.execute(table)
ID = 2
playerStats = ledger.readLedger(ID)
if playerStats is None:
print("Not real")
ledger.writeLedger(ID)
playerStats = ledger.readLedger(ID)
print(playerStats)
if __name__ == "__main__":
main()

Binary file not shown.

BIN
ledger.db Normal file

Binary file not shown.