Hi. I just joined this forum because I really need some quick advice on a Blackjack game I'm working on. It's my first major endeavor, and I can't quite get it to work right. Here's the code.

#blackjack.py
from cards import *
from graphics import *
import random

DIM = 400
FILE = "blackjack.data"
BLACKJACK = 21
ACE = 1
ACE_HIGH = 11
CARD_X = 50
X_DIFF = 40
DLR_CARD_Y = 70
PLYR_CARD_Y = 340

def makeTable():
board = GraphWin("BlackJack!", DIM, DIM)
boardTop = Rectangle(Point(0,0), Point(DIM,DIM))
boardTop.setFill("green")
boardTop.draw(board)
quitbutton = Rectangle(Point(50,170), Point(120,220))
quitbutton.setFill("red")
quitbutton.draw(board)
quitText = Text(Point(85,195), "Quit")
quitText.setTextColor("black")
quitText.draw(board)
hitmeButton = Rectangle(Point(180,170), Point(250,220))
hitmeButton.setFill("blue")
hitmeButton.draw(board)
hitmeText = Text(Point(215,195), "Hit me")
hitmeText.setTextColor("white")
hitmeText.draw(board)
stayButton = Rectangle(Point(310,170), Point(380,220))
stayButton.setFill("yellow")
stayButton.draw(board)
stayText = Text(Point(345,195), "Stay")
stayText.setTextColor("black")
stayText.draw(board)
return board, quitbutton, hitmeButton, stayButton

def closeTable(window):
window.close()

def cardSums( cards ):
"""Return a list of all the possible sums of the values of
this list of cards, given that an Ace can be worth
either 1 (ACE) or 11 (ACE_HIGH)."""
results = []
values = []
values.extend(cards)
changed = True
while changed == True:
totalSum = 0
changed = False
for i in range(len(values)):
totalSum = totalSum + values
if values == ACE and changed == False:
values = ACE_HIGH
changed = True
results.append(totalSum)
return results

def maxUnder( sums, limit ):
"""Return the largest value in the sums list that is
less than or equal to limit. If there is no such value,
return None.
Precondition: the values in sums are in ascending order"""
result = None
i = 0
while i < len(sums) and sums <= limit:
result = sums
i += 1

return result

def makeDeck():
deck = []
card = None

for i in range(len(suits)):
for x in range(1, len(ranks) + 1):
rank = x
suit = i
card = Card(rank, suit)
deck.append(card)

random.shuffle(deck)
return deck

def recordStats(winner):
scores = [None, None]
outfile = open(FILE, 'w')
if winner == 0:
scores[1] += 1
elif winner == 1:
scores[0] += 1
outfile.write(str(scores[0]) + "\n")
outfile.write(str(scores[1]))

outfile.close()

##def readStats(win):
## infile = open(FILE, 'r')
## scores = [int(infile.readline().strip()), int(infile.readline().strip())]
## winner = raw_input("Who won the game? ")
##

def drawCards(player, hand, window):
#Observes the cards in the player's hand and draws each one
counter = 0
if player == 0:
for card in hand:
card.drawAt(Point(CARD_X + (X_DIFF * counter), DLR_CARD_Y), window)
counter += 1
if player == 1:
for card in hand:
card.drawAt(Point(CARD_X + (X_DIFF * counter) , PLYR_CARD_Y), window)
counter += 1

def makeHands( deck ):
#picks the cards from the deck and puts them into a list
hand1 = []
hand2 = []
hand1.append(deck[0])
del deck[0]
hand1.append(deck[0])
del deck[0]
hand2.append(deck[0])
del deck[0]
hand2.append(deck[0])
del deck[0]
return hand1, hand2

def buttonPressed(point, rectangle):
p1 = rectangle.getP1()
p2 = rectangle.getP2()
clickX = point.getX()
clickY = point.getY()
xP1 = p1.getX()
xP2 = p2.getX()
yP1 = p1.getY()
yP2 = p2.getY()
return clickX > xP1 and clickX < xP2 and \
clickY > yP1 and clickY < yP2

def getMouseClick(rectangles, window):
clicked = None
click = window.getMouse()
for rectangle in rectangles:
if buttonPressed(click, rectangle) == True:
clicked = rectangle
break
return clicked

def pickCard(player, deck, hand):
hand.append(deck[0])
del deck[0]
drawCards(player, deck, hand)

def cardValues(hand):
vals = []
value = None
rank = None
suit = None
for card in hand:
rank = card.getRank()
if rank == 11 or rank == 12 or rank == 13:
rank = 10
vals.append(rank)
return vals

def main():
win, quitBut, hitBut, stayBut = makeTable()
deck = makeDeck()
player, dealer = makeHands(deck)
drawCards(0, dealer, win)
drawCards(1, player, win)
print cardValues(player)
while maxUnder(cardSums(cardValues(player)),BLACKJACK) <= BLACKJACK:
buttonHit = getMouseClick( (quitBut, hitBut, stayBut), win)
while buttonHit != quitBut:
if buttonHit == hitBut:
pickCard(1, deck, player)
drawCards(1, player, win)
elif buttonHit == stayBut:
pickCard(0, deck, dealer)
drawCards(0, dealer, win)
else:
closeTable(win)
if maxUnder(cardsums(cardValues(player)),BLACKJACK) > BLACKJACK:
recordStats(0)
if __name__ == '__main__':
main()

I've been taught using the graphics.py class built by John Zelle (it came with a textbook). For some reason, the closeTable function always gets called when I run it.

I hope that the exclusion thing doesn't keep people from being able to answer. I can't in good conscience post the source codes for other classes without permission.

If you could offer some help, I'd appreciate it. Thanks!

- Weebl4551

If you wrap your code in code tags and explain to us your error we will gladly help.

Please put your code between tags like this:
[code=python] # Your code in here

[/code]

This way your code won't look like a garbled mess with no indentation.

Also, please explain to us what problems you're having and provide ample error information (traceback, etc.)

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.