abbarnes

Blackjack [codeskulptor]

Dec 12th, 2017
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.42 KB | None | 0 0
  1. # Mini-project #6 - Blackjack
  2. #http://www.codeskulptor.org/#user43_rq6TKjXIy50KB5g_1.py
  3. import simplegui
  4. import random
  5.  
  6. # load card sprite - 936x384 - source: jfitz.com
  7. CARD_SIZE = (72, 96)
  8. CARD_CENTER = (36, 48)
  9. card_images = simplegui.load_image("http://storage.googleapis.com/codeskulptor-assets/cards_jfitz.png")
  10.  
  11. CARD_BACK_SIZE = (72, 96)
  12. CARD_BACK_CENTER = (36, 48)
  13. card_back = simplegui.load_image("http://storage.googleapis.com/codeskulptor-assets/card_jfitz_back.png")    
  14.  
  15. # initialize some useful global variables
  16. in_play = False
  17. outcome = ""
  18. score = 0
  19.  
  20. # define globals for cards
  21. SUITS = ('C', 'S', 'H', 'D')
  22. RANKS = ('A', '2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K')
  23. VALUES = {'A':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9, 'T':10, 'J':10, 'Q':10, 'K':10}
  24. new_card = []
  25. player_hand = []
  26. dealer_hand = []
  27.  
  28. # define card class
  29. class Card:
  30.     def __init__(self, suit, rank):
  31.         if (suit in SUITS) and (rank in RANKS):
  32.             self.suit = suit
  33.             self.rank = rank
  34.         else:
  35.             self.suit = None
  36.             self.rank = None
  37.             print "Invalid card: ", suit, rank
  38.  
  39.     def __str__(self):
  40.         return self.suit + self.rank
  41.  
  42.     def get_suit(self):
  43.         return self.suit
  44.  
  45.     def get_rank(self):
  46.         return self.rank
  47.  
  48.     def draw(self, canvas, pos):
  49.         card_loc = (CARD_CENTER[0] + CARD_SIZE[0] * RANKS.index(self.rank),
  50.                     CARD_CENTER[1] + CARD_SIZE[1] * SUITS.index(self.suit))
  51.         canvas.draw_image(card_images, card_loc, CARD_SIZE, [pos[0] + CARD_CENTER[0], pos[1] + CARD_CENTER[1]], CARD_SIZE)
  52.        
  53. # define hand class
  54. class Hand:
  55.     def __init__(self):
  56.         self.card_list = []
  57.         self.hand_value = 0
  58.        
  59.     def __str__(self):
  60. #        return "Cards in this hand: ", str(self.card_list()), "Hand Value: ", str(self.hand_value())
  61.         s = ""
  62.         print "Card list is " + str(self.card_list)
  63.         s += "Hand Value: " + str(self.hand_value)
  64.         return s
  65.  
  66.     def add_card(self, card):
  67.         #card will come from blackjack_deck.deal_card()
  68.         self.card_list.append(card)
  69.         self.hand_value +=  VALUES[card.get_rank()]
  70. #        print self.hand_value
  71.  
  72.     def get_value(self):
  73.         return self.hand_value
  74.    
  75.     def draw(self, canvas, pos, start):
  76.         i = 0
  77.         for card in self.card_list:
  78.             if i >= start:
  79.                 card.draw(canvas, (pos[0] + i * 72, pos[1]))
  80.                 i += 1
  81.             else:
  82.                 canvas.draw_image(card_back,
  83.                                   CARD_BACK_CENTER, CARD_BACK_SIZE, (pos[0] + CARD_BACK_CENTER[0], pos[1] + CARD_BACK_CENTER[1]),
  84.                                   CARD_BACK_SIZE)
  85.                 i +=1
  86.        
  87. # define deck class
  88. class Deck:
  89.     def __init__(self, SUITS, RANKS):
  90.         self.full_deck = []
  91.         for suit in SUITS:
  92.             for rank in RANKS:
  93.                 card_app = Card(suit, rank)
  94.                 self.full_deck.append(card_app)
  95.  
  96.     def shuffle(self):
  97.         random.shuffle(self.full_deck)
  98.  
  99.     def deal_card(self):
  100.         return self.full_deck.pop(0)
  101.    
  102.     def __str__(self):
  103.         return "The deck: " + str(self.full_deck)
  104.  
  105. #define event handlers for buttons
  106. def deal():
  107.     global outcome, in_play
  108.     global blackjack_deck, player_hand, dealer_hand, new_card
  109.     # your code goes here
  110.    
  111.     in_play = True
  112.    
  113.     blackjack_deck = Deck(SUITS, RANKS)
  114.     blackjack_deck.shuffle()
  115.     new_card = blackjack_deck.deal_card()
  116.  
  117.     print "Dealing the cards..."
  118.     player_hand = Hand()
  119.     new_card = blackjack_deck.deal_card()
  120.     player_hand.add_card(new_card)
  121.     print new_card
  122.     new_card = blackjack_deck.deal_card()
  123.     player_hand.add_card(new_card)
  124.    
  125.     dealer_hand = Hand()
  126.     new_card = blackjack_deck.deal_card()
  127.     dealer_hand.add_card(new_card)
  128.     new_card = blackjack_deck.deal_card()
  129.     dealer_hand.add_card(new_card)    
  130.    
  131.     print "Player's Hand Value: " + str(player_hand.get_value())
  132.     print "Dealer's Hand Value: " + str(dealer_hand.get_value())
  133.     print player_hand
  134.  
  135.    
  136. def hit():
  137.     # if the hand is in play, hit the player
  138.     # if busted, assign a message to outcome, update in_play and score
  139.    
  140.     global blackjack_deck, player_hand, in_play, new_card
  141.    
  142.     if in_play == True:
  143.        
  144.         print "player is hitting..."
  145.         new_card = blackjack_deck.deal_card()
  146.         print "player draws a " + str(new_card.get_rank())
  147.         player_hand.add_card(new_card)
  148.         if player_hand.get_value() < 22:
  149.             print "Player's Hand Value: " + str(player_hand.get_value())
  150.             print "Dealer's Hand Value: " + str(dealer_hand.get_value())
  151.         else:
  152.             in_play = False
  153.             print "Player Busts!!!"
  154.  
  155.            
  156. def stand():
  157.     global blackjack_deck, player_hand, dealer_hand, in_play
  158.     # if hand is in play, repeatedly hit dealer until his hand has value 17 or more
  159.  
  160.     # assign a message to outcome, update in_play and score
  161.  
  162.     in_play = False
  163.     while dealer_hand.get_value() < 17:
  164.         new_card = blackjack_deck.deal_card()
  165.         dealer_hand.add_card(new_card)
  166.         print "dealer's new card: " + str(new_card)
  167.         print "dealer draws a " + str(new_card.get_rank())
  168.        
  169.     print "Player's Hand Value: " + str(player_hand.get_value())
  170.     print "Dealer's Hand Value: " + str(dealer_hand.get_value())
  171.     if player_hand.get_value() <= 21 and player_hand.get_value() > dealer_hand.get_value() or dealer_hand.get_value() > 21:
  172.         print "Player Wins!"
  173.     else:
  174.         print "Dealer Wins!"
  175.    
  176. # draw handler    
  177. def draw(canvas):
  178.     # test to make sure that card.draw works, replace with your code below
  179. #    global new_card, player_hand, dealer_hand
  180. #    if new_card != []:
  181. #        new_card.draw(canvas, [300, 300])
  182. #    if player_hand != []:
  183. #        for
  184. #            players_cards[i].draw(canvas, [72, 96])
  185.     global player_hand, dealer_hand, in_play
  186.     if player_hand != []:
  187.         player_hand.draw(canvas, (72, 96), 0)
  188.     if dealer_hand != []:
  189.         if in_play == True:
  190.             dealer_hand.draw(canvas, (72, 236), 1)
  191.         else:
  192.             dealer_hand.draw(canvas, (72, 236), 0)
  193.        
  194.  
  195.  
  196.  
  197.  
  198. # initialization frame
  199. frame = simplegui.create_frame("Blackjack", 600, 600)
  200. frame.set_canvas_background("Green")
  201.  
  202. #create buttons and canvas callback
  203. frame.add_button("Deal", deal, 200)
  204. frame.add_button("Hit",  hit, 200)
  205. frame.add_button("Stand", stand, 200)
  206. frame.set_draw_handler(draw)
  207.  
  208.  
  209. # get things rolling
  210.  
  211. frame.start()
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218. #blackjack_deck = Deck(SUITS, RANKS)
  219. #blackjack_deck.shuffle()
  220. #print blackjack_deck
  221.  
  222.  
  223.  
  224.  
  225.  
  226. #for i in range(52):
  227. #    new_card = blackjack_deck.deal_card()
  228. #    print new_card
  229.    
  230. #Test Hand
  231.  
  232.  
  233. #player_hand = Hand()
  234. #print player_hand
  235. #new_card = blackjack_deck.deal_card()
  236. #player_hand.add_card(new_card)
  237. #print player_hand
  238. #print player_hand.get_value()
  239. #    
  240. #while player_hand.get_value() < 100:
  241. #    new_card = blackjack_deck.deal_card()
  242. #    player_hand.add_card(new_card)
  243. #    print "player's new card: " + str(new_card)
  244. #    print player_hand
  245. #    
  246.    
  247. #print "player hand type ", type(player_hand)
  248. #print str(player_hand)
  249. #
  250. #
  251. #
  252. #
  253. #
  254. #print player_hand
  255. #
  256. #
  257. #new_card = blackjack_deck.deal_card()
  258. #print "player's new card: " + str(new_card)
  259. #player_hand.add_card(new_card)
  260. #
  261. #
  262. #
  263. #
Advertisement
Add Comment
Please, Sign In to add comment