Moved shit to recycle bin etc etc

This commit is contained in:
2025-08-11 21:58:43 +10:00
parent 686e5d6617
commit 48f9389100
15 changed files with 2 additions and 13 deletions

View File

@@ -0,0 +1,95 @@
import discord
from BlackJack import *
client = commands.Bot(command_prefix='~~')
async def discordInput(interaction: discord.Interaction, message:str):
await interaction.response.send_message(message)
def check(m):
return m.content in ["h", "s"] and m.channel == interaction.channel
msg = await client.wait_for('message', check=check)
async def discordOutput(ctx, message):
await ctx.send(message)
@client.event
async def on_ready():
print("Let's pwn some scrubs")
@client.command()
async def play_game(ctx, arg):
await ctx.send("Players hand = " + str(getHandTotal(bj.playerHand)) + ": " + handNumbersToCards(
bj.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(bj.dealerHand[0]) + "??")
bj = BlackJack()
gameOver = False
playerStood = False
ID = ctx.message.author.id
IDFound = bj.findID(ID)[0]
if IDFound:
playerStats = bj.readLedger(ID)[1:]
playerStats[0] = ID
else:
bj.addToLedger(ID)
playerStats = (ID, 100, 0, 0)
while not gameOver:
playerWinState = bj.checkHandState(bj.playerHand)
dealerWinState = bj.checkHandState(bj.dealerHand)
gameOver = bj.checkGameOver(playerWinState)
if gameOver:
continue
gameOver = bj.checkGameOver(dealerWinState)
if gameOver:
continue
await ctx.send("Hit or Stand? (h/s)")
def check(m):
return m.content in ["h", "s"] and m.channel == ctx.channel
msg = await client.wait_for('message', check=check)
if msg == "h":
bj.hit()
elif msg == "s":
bj.stand()
playerStood = True
playerWinState = bj.checkHandState(bj.playerHand)
gameOver = bj.checkGameOver(playerWinState)
if gameOver:
continue
# Dealers turn
if playerStood:
while dealerWinState == 'c':
# Dealer hits
bj.hit()
# Player stands
bj.stand()
# Loop ends when game is over
dealerWinState = bj.checkHandState(bj.dealerHand)
else:
bj.hit()
dealerWinState = bj.checkHandState(bj.dealerHand)
gameOver = bj.checkGameOver(dealerWinState)
if gameOver:
continue
await ctx.send("Players hand = " + str(getHandTotal(bj.playerHand)) + ": " + handNumbersToCards(bj.playerHand) +
"\n" + "Dealers hand = " + str(getHandTotal(bj.dealerHand)) + ": " + handNumbersToCards(bj.dealerHand))
bet = int(arg)
if playerWinState == "w":
await ctx.send("You won!")
bj.writeLedger(ID, 2*bet, True)
elif playerWinState == "l":
await ctx.send("You busted!")
bj.writeLedger(ID, -bet, False)
elif dealerWinState == "w":
await ctx.send("The Dealer reached 21 before you!")
bj.writeLedger(ID, -bet, False)
elif dealerWinState == "l":
await ctx.send("The Dealer busted before you!")
bj.writeLedger(ID, 2*bet, True)
client.run('ODU0MjE5MDMzNzc0NTIyMzY4.YMgveA.laeIhhccTDvEbU81Y-RjSEMkaEY')

View File

@@ -0,0 +1,258 @@
import random
import Ledger
# Game States
INIT = 0
PLAYING = 1
ENDING = 2
FINISHED = 3
OVER = 5
CHECKING = 6
def convertNumberToCard(cardNumber):
# Cards index from 0 i.e ace is 0, and the highest card value is 51
if cardNumber <= 12:
cardSuit = ""
elif cardNumber <= 25:
cardSuit = ""
elif cardNumber <= 38:
cardSuit = ""
elif cardNumber <= 51:
cardSuit = ""
cardNumber = cardNumber % 13
if cardNumber == 0:
cardNumber = "A"
elif cardNumber == 10:
cardNumber = "J"
elif cardNumber == 11:
cardNumber = "Q"
elif cardNumber == 12:
cardNumber = "K"
else:
cardNumber += 1
return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit)
def generateDeck():
return [x for x in range(0, 51)]
def addCardToHand(hand, deck):
card = deck.pop(0)
hand.append(card)
def generateHand(hand, deck, handSize = 2):
i = 0
while i < handSize:
addCardToHand(hand, deck)
i += 1
def handNumbersToCards(hand):
cards = ""
for card in hand:
cards += convertNumberToCard(card)
return cards
def getHandTotal(hand):
cardValue = lambda c: min(c % 13 + 1, 10)
i = 0
aces = 0
for card in hand:
card = cardValue(card)
if card == 1:
aces += 1
else:
i += card
while aces > 0:
if i < 20:
card = 11
if (i + card) > 21:
card = 1
i += card
aces -= 1
return i
def showDeck(deck):
string = ""
for card in deck:
string += convertNumberToCard(card)
return string
class BlackJack:
def __init__(self):
self.gameInSession = False
self.playerTurn = True
self.deck = generateDeck()
random.shuffle(self.deck)
self.discard = []
self.playerHand = []
self.dealerHand = []
self.ledger = Ledger.Ledger()
def returnCards(self):
self.discard.extend(self.playerHand)
self.playerHand.clear()
self.discard.extend(self.dealerHand)
self.dealerHand.clear()
def deal(self):
generateHand(self.playerHand, self.deck)
generateHand(self.dealerHand, self.deck)
def shuffle(self):
self.deck.extend(self.discard)
self.discard.clear()
random.shuffle(self.deck)
def stand(self):
if self.playerTurn:
self.playerTurn = False
def hit(self):
if self.playerTurn:
addCardToHand(self.playerHand, self.deck)
self.playerTurn = False
else:
addCardToHand(self.dealerHand, self.deck)
self.playerTurn = True
def checkHandState(self, hand):
# Check the hand state and return w if game is won, l if lost and c for continue
total = getHandTotal(hand)
if total == 21:
return "w"
elif total > 21:
return "l"
else:
return "c"
def dealerHitLogic(self):
total = getHandTotal(self.dealerHand)
if total >= 17:
self.stand()
return True
else:
self.hit()
def checkGameOver(self, state):
gameOver = False
if state == "w":
gameOver = True
elif state == "l":
gameOver = True
return gameOver
def compareHands(self):
dealerTotal = getHandTotal(self.dealerHand)
playerTotal = getHandTotal(self.playerHand)
if dealerTotal < playerTotal:
return "l"
else:
return "w"
async def play_game(self, ID, bet, recv, send):
if self.gameInSession:
await send("Fuck you")
return
else:
self.gameInSession = True
gameState = INIT
while gameState != OVER:
if gameState == INIT:
self.returnCards()
playerStats = self.ledger.read(ID)
if playerStats is None:
self.ledger.write(ID)
playerStats = self.ledger.read(ID)
self.deal()
playerWinState = self.checkHandState(self.playerHand)
dealerWinState = self.checkHandState(self.dealerHand)
play = None
playerStood = False
dealerStood = False
validInput = False
gameState = CHECKING
elif gameState == PLAYING:
await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(
self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??")
play = await recv("Hit or Stand?")
while not validInput:
if play == "h":
self.hit()
validInput = True
elif play == "s":
self.stand()
playerStood = True
validInput = True
dealerStood = self.dealerHitLogic()
playerWinState = self.checkHandState(self.playerHand)
dealerWinState = self.checkHandState(self.dealerHand)
gameState = CHECKING
elif gameState == ENDING:
# Players turn
self.stand()
# Dealers turn
dealerStood = self.dealerHitLogic()
# Loop ends when game is over
dealerWinState = self.checkHandState(self.dealerHand)
if dealerStood:
if dealerWinState == "c":
dealerWinState = self.compareHands()
gameState = CHECKING
elif gameState == CHECKING:
if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState):
gameState = FINISHED
elif playerStood:
gameState = ENDING
else:
gameState = PLAYING
elif gameState == FINISHED:
await send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) +
"\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand))
if playerWinState == "w":
await send("You won!")
win = (2*bet, 1, 0, ID)
self.ledger.update(ID, win)
elif playerWinState == "l":
await send("You busted!")
loss = (-bet, 0, 1, ID)
self.ledger.update(ID, loss)
elif dealerWinState == "w":
await send("The Dealer reached 21 before you!")
loss = (-bet, 0, 1, ID)
self.ledger.update(ID, loss)
elif dealerWinState == "l":
await send("The Dealer busted before you!")
win = (2*bet, 1, 0, ID)
self.ledger.update(ID, win)
self.returnCards()
if len(self.deck) < 0.25 * 52:
await send("Shuffling Deck")
self.shuffle()
gameState = OVER
self.gameInSession = False

View File

@@ -0,0 +1,271 @@
import random
import Ledger
# Game States
INIT = 0
PLAYING = 1
ENDING = 2
FINISHED = 3
OVER = 5
CHECKING = 6
def convertNumberToCard(cardNumber):
# Cards index from 0 i.e ace is 0, and the highest card value is 51
if cardNumber <= 12:
cardSuit = ""
elif cardNumber <= 25:
cardSuit = ""
elif cardNumber <= 38:
cardSuit = ""
elif cardNumber <= 51:
cardSuit = ""
cardNumber = cardNumber % 13
if cardNumber == 0:
cardNumber = "A"
elif cardNumber == 10:
cardNumber = "J"
elif cardNumber == 11:
cardNumber = "Q"
elif cardNumber == 12:
cardNumber = "K"
else:
cardNumber += 1
return "{value}{suit} ".format(value=str(cardNumber), suit=cardSuit)
def generateDeck():
return [x for x in range(0, 51)]
def addCardToHand(hand, deck):
card = deck.pop(0)
hand.append(card)
def generateHand(hand, deck, handSize = 2):
i = 0
while i < handSize:
addCardToHand(hand, deck)
i += 1
def handNumbersToCards(hand):
cards = ""
for card in hand:
cards += convertNumberToCard(card)
return cards
def getHandTotal(hand):
cardValue = lambda c: min(c % 13 + 1, 10)
i = 0
aces = 0
for card in hand:
card = cardValue(card)
if card == 1:
aces += 1
else:
i += card
while aces > 0:
if i < 20:
card = 11
if (i + card) > 21:
card = 1
i += card
aces -= 1
return i
def showDeck(deck):
string = ""
for card in deck:
string += convertNumberToCard(card)
return string
class BlackJack:
def __init__(self):
self.gameInSession = False
self.playerTurn = True
self.deck = generateDeck()
random.shuffle(self.deck)
self.discard = []
self.playerHand = []
self.dealerHand = []
self.ledger = Ledger.Ledger()
def returnCards(self):
self.discard.extend(self.playerHand)
self.playerHand.clear()
self.discard.extend(self.dealerHand)
self.dealerHand.clear()
def deal(self):
generateHand(self.playerHand, self.deck)
generateHand(self.dealerHand, self.deck)
def shuffle(self):
self.deck.extend(self.discard)
self.discard.clear()
random.shuffle(self.deck)
def stand(self):
if self.playerTurn:
self.playerTurn = False
def hit(self):
if self.playerTurn:
addCardToHand(self.playerHand, self.deck)
self.playerTurn = False
else:
addCardToHand(self.dealerHand, self.deck)
self.playerTurn = True
def checkHandState(self, hand):
# Check the hand state and return w if game is won, l if lost and c for continue
total = getHandTotal(hand)
if total == 21:
return "w"
elif total > 21:
return "l"
else:
return "c"
def dealerHitLogic(self):
total = getHandTotal(self.dealerHand)
if total > 17:
self.stand()
return True
else:
self.hit()
def checkGameOver(self, state):
gameOver = False
if state == "w":
gameOver = True
elif state == "l":
gameOver = True
return gameOver
def compareHands(self):
dealerTotal = getHandTotal(self.dealerHand)
playerTotal = getHandTotal(self.playerHand)
if dealerTotal < playerTotal:
return "l"
else:
return "w"
def play_game(self, ID, bet, recv, send):
if self.gameInSession:
send("Fuck you")
return
else:
self.gameInSession = True
gameState = INIT
while gameState != OVER:
if gameState == INIT:
self.returnCards()
playerStats = self.ledger.read(ID)
if playerStats is None:
self.ledger.write(ID)
playerStats = self.ledger.read(ID)
self.deal()
playerWinState = self.checkHandState(self.playerHand)
dealerWinState = self.checkHandState(self.dealerHand)
play = None
playerStood = False
dealerStood = False
validInput = False
gameState = CHECKING
elif gameState == PLAYING:
send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(
self.playerHand) + "\n" + "Dealers hand = ??: " + convertNumberToCard(self.dealerHand[0]) + "??")
play = recv("Hit or Stand?")
while not validInput:
if play == "h":
self.hit()
validInput = True
elif play == "s":
self.stand()
playerStood = True
validInput = True
dealerStood = self.dealerHitLogic()
playerWinState = self.checkHandState(self.playerHand)
dealerWinState = self.checkHandState(self.dealerHand)
gameState = CHECKING
elif gameState == ENDING:
# Players turn
self.stand()
# Dealers turn
dealerStood = self.dealerHitLogic()
# Loop ends when game is over
dealerWinState = self.checkHandState(self.dealerHand)
if dealerStood:
if dealerWinState == "c":
dealerWinState = self.compareHands()
gameState = CHECKING
elif gameState == CHECKING:
if self.checkGameOver(playerWinState) or self.checkGameOver(dealerWinState):
gameState = FINISHED
elif playerStood:
gameState = ENDING
else:
gameState = PLAYING
elif gameState == FINISHED:
send("Players hand = " + str(getHandTotal(self.playerHand)) + ": " + handNumbersToCards(self.playerHand) +
"\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand))
if playerWinState == "w":
send("You won!")
win = (2*bet, 1, 0, ID)
self.ledger.update(ID, win)
elif playerWinState == "l":
send("You busted!")
loss = (-bet, 0, 1, ID)
self.ledger.update(ID, loss)
elif dealerWinState == "w":
send("The Dealer reached 21 before you!")
loss = (-bet, 0, 1, ID)
self.ledger.update(ID, loss)
elif dealerWinState == "l":
send("The Dealer busted before you!")
win = (2*bet, 1, 0, ID)
self.ledger.update(ID, win)
self.returnCards()
if len(self.deck) < 0.25 * 52:
send("Shuffling Deck")
self.shuffle()
gameState = OVER
self.gameInSession = False
def send(str):
return input(str)
def main():
bj = BlackJack()
bj.play_game(12, 100, send, print)
if __name__ == "__main__":
main()

View File