Search code examples
python-3.6blackjack

Blackjack, python


import random
import time

class card():
    def __init__(self):
         cardNum = ["1","2", "3", "4", "5", "6", "7", "8", "9", "10", "10", "10"]
        randNum = random.randint(0, len(cardNum) - 1)
        cardSuit = ["Hearts", "Clubs", "Diamonds", "Spades"]
        randSuit = random.randint(0, len(cardSuit) - 1)

        self.rank = cardNum[randNum]
        self.suit = cardSuit[randSuit]

    total1 = []
    total2 = []
    total1.append(self.rank)

    def printIntro():
        print("Blackjack (twenty-one) is a casino game played with cards.")
        print("the goal of game is to draw cards that total as close to 21 
points, as possibale")
        print("without going over( whose hand > 21 will bust). All face 
cards count as 10 points,")
        print("aces count as 1 or 11, and all other cards count their 
numeric value.")
        print("\nFirstly, your turn:")


    def displayCard(self):


        return (self.rank+ " of "+ self.suit)

    def totalScore(self, ans="Y"):
        total1 = []
        total2 = []

        if ans == "Y":
            totalscore1 = total1.append(self.rank)
            return totalscore1
            ans = "N"
        if ans == "N":
            totalscore2 = total2.append(self.rank)
            return totalscore2


    def aceOption(self, cards1, cards2):
        if "Ace" in cards1:
            print("You have an ACE!")
            opt = int(input("Would you like ACE to be 1 or 11?: "))

            if opt == "1":
                aceVal(1)
            elif opt == "11":
                aceVal(11)

        elif "Ace" in cards2:
            print("You have an ACE!")
            opt = int(input("Would you like ACE to be 1 or 11?: "))

            if opt == "1":
                aceVal(1)
            elif opt == "11":
                aceVal(11)

    def nextOption(self):
        opt = input("Would you like to (T)WIST, or (S)TICK?")
        if opt == "T":
            #make twist function
        elif opt == "S":
            #make stick function

#myCard = card()

class player():
    def __init__(self, name="bob"):
        self.cards = []
        self.name = name
        self.cards2 = []

    def dealer1go(self):
        for i in range(0, 1):
            newcard = card()
            self.cards2.append(newcard.displayCard())

    def player1go(self):
        for i in range(0, 1):
            newcard = card()
            self.cards.append(newcard.displayCard())

class totalAmount():
    def __init__(self):
        pass




player1 = player("Matt")
dealer = player("Kieron")
deck = card()
intro =card.printIntro()
print(" ")
print(intro)


print("\nPlayer1 is dealt two cards..")
print("-------------------------------\n")
time.sleep(1)
print("\nDealer has two cards..")
print("-------------------------------\n")
time.sleep(1)

for i in range(1, 3):
    player1.player1go()
    dealer.dealer1go()

print("Player1 cards: ", player1.cards)
#card.totalScore("Y")
deck.aceOption(player1.cards, dealer.cards2)

print("Dealers cards: ", dealer.cards2)
#card.totalScore("N")
deck.aceOption(player1.cards, dealer.cards2)

deck.nextOption()



card()

The totalScore(self) function and the aceOption(self) function doesnt work and i keep getting muddled up with how to link them. currently learning how to use classes, and (self).

The output at the moment is just 2 random cards dealt to player1 and the dealer and then placed in an array. I need to give the user an option to either choose an ace, if they have one, to be an 11 or 1.

And i need a total score of the card values, if the totalScore >21 then theyre BUST and the game is over.


Solution

  • As you are an A-Level student then we must consider that when answering your questions. When you wrote "randNum = random.randint(0, len(cardNum) - 1)" on Line 7, you are limiting card selection down to 12 cards as opposed to 13 per suit. This will leave you with 48 cards like Lee Daniel Crocker mentioned but did not actually explain. You can also give the user the option to change the ace if that's what you want to do as it is your code but you can leave it till the end in order to simplify things.