From 9e31b41d9e204113a4daf3fcc2bbab57b9f46264 Mon Sep 17 00:00:00 2001 From: Calvin Morrison Date: Thu, 27 Sep 2018 16:17:28 -0400 Subject: a little game of golf --- golf.py | 146 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 golf.py diff --git a/golf.py b/golf.py new file mode 100644 index 0000000..c507c11 --- /dev/null +++ b/golf.py @@ -0,0 +1,146 @@ +class Card: + def __init__(self, rank, suit): + self.rank = rank + self.suit = suit + + def __str__(self): + return self.rank + self.suit + +class Deck: + + ranks = ['A','2','3','4','5','6','7','8','9','10','J','Q','K'] + suits = ['h','c','d','s'] + cards = [] + + def shuffle(self): + # probably not random + + import random + random.shuffle(self.cards) + + def pickup(self): + return self.cards.pop() + + def __init__(self, rand=False): + self.cards = [] + for suit in self.suits: + for rank in self.ranks: + self.cards.append(Card(rank, suit)) + if rand: + self.shuffle() + + def __str__(self): + return ','.join([str(card) for card in self.cards]) + +class Golf: + + deck = False + board = [] + stack = [] + width = 7 + depth = 5 + + def __init__(self, custdeck=False): + if custdeck: + self.deck = custdeck + else: + self.deck = Deck(True) + + for x in range(self.width): + self.board.append([]) + + for x in range(self.depth): + for col in self.board: + col.append(self.deck.pickup()) + + def __str__(self): + retstr = "\n\n\nOn Deck: " + str(self.stack[0]) + "\n" + retstr = retstr + "Rest of stack:" + ' '.join([ str(x) for x in self.stack[1:]]) + "\n" + retstr = retstr + "remaining cards in deck:" + str(len(self.deck.cards)) + "\n" + retstr = retstr + "-------------------------------------------------\n" + retstr = retstr + "\t".join([str(x + 1) for x in range(self.width)]) + "\n" + + for y in range(self.depth): + for x in range(self.width): + try: + retstr = retstr + str(self.board[x][y]) + "\t" + except: + retstr = retstr + " \t" + retstr = retstr + "\n" + return retstr + + def empty(self): + for col in self.board: + if len(col) != 0: + return False + return True + + def valid(self, card1, card2): + + rank1 = card1.rank + rank2 = card2.rank + + id1 = self.deck.ranks.index(card1.rank) + id2 = self.deck.ranks.index(card2.rank) + if rank1 == 'A': + if rank2 == '2' or rank2 == "K": + return True + if rank2 == 'A': + if rank1 == '2' or rank1 == "K": + return True + + if abs(id1 - id2) == 1: + return True + + + def move(self, num): + col = self.board[num] + + if len(col) == 0: + return False + if num > self.width: + return False + + if not self.valid(self.stack[0], self.board[num][-1]): + return False + + card = self.board[num].pop() + self.stack.insert(0, card) + + return True + + + + def play(self): + + self.stack.insert(0, self.deck.pickup()) + + while self.empty() != True: + print self + input = raw_input("Input Col # or h to Hit: "); + + if input == "p": + for col in self.board: + for card in col: + print card + print "---" + + elif input == "h": + if len(self.deck.cards): + self.stack.insert(0, self.deck.pickup()) + else: + print "Deck empty!" + elif input.isdigit() and int(input) in range(1, self.width + 1): + if self.move(int(input) - 1): + print "OK!" + else: + print "Invalid Move!" + else: + print "?" + + print "Good Game!" + + + +g = Golf() +g.play() -- cgit v1.2.1