Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import collections
- def bubbleSort(arr):
- isSorted = False
- while not(isSorted):
- for i in range(len(arr) - 1):
- for j in range(len(arr) - 1 - i):
- if arr[j] > arr[j+1]:
- arr[j], arr[j+1] = arr[j+1],arr[j]
- else:
- isSorted = True
- return (arr)
- def initialize_deck (deck, numsuit, numcard):
- deck = [[True] * numsuit for i in range (numcard)]
- return (deck)
- def getcard(deck,numsuit,numcard):
- card = ""
- suitval = random.randint(0,numsuit-1)
- cardval = random.randint(0,numcard-1)
- while deck[cardval][suitval] == False:
- suitval = random.randint(0,numsuit-1)
- cardval = random.randint(0,numcard-1)
- deck[cardval][suitval] = False
- return(deck,(cardval,suitval))
- def getcards(howmany,deck,numsuit,numcard):
- cards = []
- for i in range(howmany):
- deck,card = getcard(deck,numsuit,numcard)
- cards.append(card)
- return(deck,cards)
- def check_straight(cards):
- for i in range(len(cards)):
- if i+1 != len(cards) and cards[i] + 1 != cards[i+1]:
- return(False)
- return(True)
- def check_flush(hand):
- suits = [i[1] for i in hand]
- if len(set(suits)) == 1:
- return(True)
- return(False)
- def check_straightflush(hand):
- if check_flush(hand) and check_straight(hand):
- return(True)
- return(False)
- def check_royal(cards):
- royal = [1,10,11,12,13]
- if cards == royal:
- return(True)
- return(False)
- def check_twopair(cards):
- counter = list(collections.Counter(cards).items())
- pairs = 0
- for i in range(len(cards)):
- try:
- if counter[i][1] == 2:
- pairs = pairs + 1
- if pairs == 2:
- return(True)
- except:
- return(False)
- def check_kinds(cards):
- counter = collections.Counter(cards)
- occurrences = counter.most_common(1)[0][1]
- cards_occur = [x[0] for x in counter.most_common() if x[1] == occurrences]
- card = max(cards_occur)
- return(card,occurrences)
- def check_fullhouse(cards):
- card,occur = check_kinds(cards)
- cards2 = []
- if occur == 3:
- for i in range(len(cards)):
- if card != cards[i]:
- cards2.append(cards[i])
- if check_kinds(cards2)[1] == 2:
- return(True)
- return(False)
- def evaluate_hand(hand):
- flush = False
- straight = False
- score = 0
- suits = [i[1] for i in hand]
- cards = bubbleSort([i[0] for i in hand])
- highcard = cards[len(cards)-1]
- highkind,kind = check_kinds(cards)
- if kind == 2:
- score = 1
- if check_twopair(cards):
- score = 2
- if kind == 3:
- score = 3
- if check_straight(cards):
- score = 4
- straight = True
- if check_flush(hand):
- score = 5
- flush = True
- if check_fullhouse(cards):
- score = 6
- if kind == 4:
- score = 7
- if flush and straight:
- score = 8
- if flush and check_royal(cards):
- score = 9
- name = hands[score]
- return(score,highcard,highkind,name)
- def determine_winner(hand1,hand2):
- score1,high1,kind1,name1 = evaluate_hand(hand1)
- score2,high2,kind2,name2 = evaluate_hand(hand2)
- highcardscores = [0,4,8]
- if score1 > score2:
- wintext = "Hand 1 Wins"
- elif score2 > score1:
- wintext = "Hand 2 Wins"
- else:
- if score1 in highcardscores:
- if high1 > high2:
- wintext = "Hand 1 Wins"
- elif high2 > high1:
- wintext = "Hand 2 Wins"
- else:
- wintext = "Tie Game!"
- else:
- if kind1 > kind2:
- wintext = "Hand 1 Wins"
- elif kind2 > kind1:
- wintext = "Hand 2 Wins"
- else:
- wintext = "Tie Game!"
- textSize(75)
- text(wintext,500,600)
- drawtext(name1,0)
- drawtext(name2,1)
- def drawtext(whattext,num):
- textSize(30)
- text(whattext,810,220-(num*220)+100)
- def drawhand(hand,num):
- global deckimage,cardw,cardl
- for i in range(len(hand)):
- cardval = hand[i][0]
- suitval = hand[i][1]
- textSize(30)
- text("Hand "+str(num+1),100,220-(num*220)+100)
- copy(deckimage, cardw*cardval, cardl*suitval, cardw, cardl, 300+100*i, 220-(num*220), 100, 160)
- def clickbox(x,y,w,h):
- global clicked
- fill(100)
- rect(x,y,w,h)
- textSize(50)
- fill(255)
- text("Redraw",x+10,y+100)
- def setup():
- global hands,deck,keepGoing,deckimage,cardl,cardw
- size(1090,750)
- deckimage = loadImage("deck.png")
- cardl = 110
- cardw = 80
- keepGoing = True
- deck = []
- hands = ["High Card","Pair","Two Pair","Three of a Kind","Straight","Flush","Full House","Four of a Kind","Straight Flush","Royal Flush"]
- deck = initialize_deck(deck, 4, 13)
- def draw():
- global hands, deck, keepGoing, deckimage,clicked
- clickbox(100,600,200,200)
- if keyPressed and key == "p":
- keepGoing = True
- if keepGoing:
- background(0)
- deck,hand1 = getcards(5,deck,4,13)
- deck,hand2 = getcards(5,deck,4,13)
- drawhand(hand1,0)
- drawhand(hand2,1)
- determine_winner(hand1,hand2)
- keepGoing = False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement