From d37d1344fc70c0c0f9fb22e96fa3a51ab57d60c3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 5 Mar 2015 10:54:48 -0800 Subject: [PATCH 1/2] Could not complete part 3 --- One Shot(War).py | 108 +++++++++++++++++++++ blackjack (1).py | 238 +++++++++++++++++++++++++++++++++++++++++++++++ blackjack.py | 16 +++- 3 files changed, 357 insertions(+), 5 deletions(-) create mode 100644 One Shot(War).py create mode 100644 blackjack (1).py diff --git a/One Shot(War).py b/One Shot(War).py new file mode 100644 index 0000000..232c5d5 --- /dev/null +++ b/One Shot(War).py @@ -0,0 +1,108 @@ +#One shot +#For 2-8 Players +import cards, games +class One_Shot_Card(cards.Card): + """A One Shot Card""" + @property + def value(self): + if self.is_face_up: + v=One_Shot_Card.RANKS.index(self.rank)+1 + return v + else: + return None + + +class One_Shot_Deck(cards.Deck): + """A One Shot Deck""" + def populate(self): + for suit in One_Shot_Card.SUITS: + for rank in One_Shot_Card.RANKS: + self.cards.append(One_Shot_Card(rank,suit)) +class One_Shot_Hand(cards.Hand): + """A One Shot Deck""" + def __init__(self, name): + super(One_Shot_Hand, self).__init__() + self.name=name + + def __str__(self): + rep = self.name+":\t" + super(One_Shot_Hand, self).__str__() + if self.total: + rep += "(" + str(self.total)+ ")" + return rep + @property + def total(self): + # if a card in the hand has value of None, then total is None + for card in self.cards: + if not card.value: + return None + + # add up card values, treat each Ace as 1 + t = 0 + for card in self.cards: + t += card.value + return t +class One_Shot_Player(One_Shot_Hand): + """A One Shot Player""" + def lose(self): + print(self.name, "loses.") + def win(self): + print(self.name, "wins.") + def tie(self): + print(self.name, "ties.") + + +class One_Shot_Game(object): + """A One Shot Game.""" + def __init__(self, names): + self.players = [] + for name in names: + player = One_Shot_Player(name) + self.players.append(player) + self.deck=One_Shot_Deck() + self.deck.populate() + self.deck.shuffle() + + + + + def play(self): + #deal one card to everyone + self.deck.deal(self.players, per_hand = 1) + for player in self.players: + print(player) + + # compare each player's cards + if self.players[0].cards[0].value > self.players[1].cards[0].value: + self.players[1].lose() + self.players[0].win() + elif self.players[0].cards[0].value < self.players[1].cards[0].value: + self.players[0].lose() + self.players[1].win() + else: + self.players[0].tie() + self.players[1].tie() + + # restart game + for player in self.players: + player.clear() + self.deck = One_Shot_Deck() + self.deck.populate() + self.deck.shuffle() + + +def main(): + print("\t\tWelcome to One Shot!\n") + names = [] + number = 2 + for i in range(number): + name = input("Enter player name: ") + names.append(name) + print() + + game = One_Shot_Game(names) + again = None + while again != 'n': + game.play() + again = games.ask_yes_no("\nDo you want to play again?: ") +main() +input("\n\nPress the enter key to exit.") diff --git a/blackjack (1).py b/blackjack (1).py new file mode 100644 index 0000000..3ccf99f --- /dev/null +++ b/blackjack (1).py @@ -0,0 +1,238 @@ +# Blackjack +# From 1 to 7 players compete against a dealer + +import cards, games + +class BJ_Card(cards.Card): + """ A Blackjack Card. """ + ACE_VALUE = 1 + + @property + def value(self): + if self.is_face_up: + v = BJ_Card.RANKS.index(self.rank) + 1 + if v > 10: + v = 10 + else: + v = None + return v + +class BJ_Deck(cards.Deck): + """ A Blackjack Deck. """ + def populate(self): + for suit in BJ_Card.SUITS: + for rank in BJ_Card.RANKS: + self.cards.append(BJ_Card(rank, suit)) + + +class BJ_Hand(cards.Hand): + """ A Blackjack Hand. """ + def __init__(self, name): + super(BJ_Hand, self).__init__() + self.name = name + + def __str__(self): + rep = self.name + ":\t" + super(BJ_Hand, self).__str__() + if self.total: + rep += "(" + str(self.total) + ")" + return rep + + @property + def total(self): + # if a card in the hand has value of None, then total is None + for card in self.cards: + if not card.value: + return None + + # add up card values, treat each Ace as 1 + t = 0 + for card in self.cards: + t += card.value + + # determine if hand contains an Ace + contains_ace = False + for card in self.cards: + if card.value == BJ_Card.ACE_VALUE: + contains_ace = True + + # if hand contains Ace and total is low enough, treat Ace as 11 + if contains_ace and t <= 11: + # add only 10 since we've already added 1 for the Ace + t += 10 + + return t + + def is_busted(self): + return self.total > 21 + + + +class Bet(object): + """ A Blackjack Gamble. """ + # Values + def __init__(bet, money = 10): + bankroll = money + + # Betting options + def betting(bet,bankroll): + try: + if bankroll> 0: + wager = int(input("\nHow much do you want to wager?: ")) + if wager > bankroll: + int(input("\n You can only wager "+ str(bankroll)+" or less. How much?: ")) + elif wager < 0: + int(input("\n You can only wager a positive number. How much?: ")) + except ValueError: + int(input("\n That's not valid! Choose a number: ")) + + # Money Conditions + def gamble(bet): + if bet.bankroll<= 0: + print("\nYou are out of money! You're out of the game!") + + +class BJ_Player(BJ_Hand): + """ A Blackjack Player. """ + def __init__(self, name,bankroll): + super(BJ_Player, self).__init__(name) + self.bankroll=bankroll + + def is_hitting(self): + if self.total == 21: + response = "n" + + else: + response = games.ask_yes_no("\n" + self.name + ", do you want a hit? (Y/N): ") + return response == "y" + + def bust(self,wager): + print(self.name, "busts.") + self.lose(wager) + def lose(self, wager): + print(self.name, "loses.") + self.bankroll=self.bankroll - wager + print("Your bankroll is: ",self.bankroll) + return self.bankroll + + def win(self, wager): + print(self.name, "wins.") + self.bankroll=self.bankroll+wager + print("Your bankroll is: ",self.bankroll) + return self.bankroll + + def push(self): + print(self.name, "pushes.") + +class BJ_Dealer(BJ_Hand): + """ A Blackjack Dealer. """ + def is_hitting(self): + return self.total < 17 + + def bust(self): + print(self.name, "busts.") + + def flip_first_card(self): + first_card = self.cards[0] + first_card.flip() + + +class BJ_Game(object): + """ A Blackjack Game. """ + def __init__(self, names): + self.players = [] + for name in names: + bankroll=100 + player = BJ_Player(name,bankroll) + playerbet=Bet(bankroll).betting(bankroll) + self.players.append(player) + self.dealer = BJ_Dealer("Dealer") + + self.deck = BJ_Deck() + self.deck.populate() + self.deck.shuffle() + + + @property + def still_playing(self): + sp = [] + for player in self.players: + if not player.is_busted(): + sp.append(player) + return sp + + def __additional_cards(self,player): + while not player.is_busted() and player.is_hitting(): + self.deck.deal([player]) + print(player) + if player.is_busted(): + player.bust(self,wager) + def __player_broke(self): + if player is not broke and player.cash <=0: + player.broke + def play(self, wager): + # deal initial 2 cards to everyone + self.deck.deal(self.players + [self.dealer], per_hand = 2) + self.dealer.flip_first_card() # hide dealer's first card + for player in self.players: + print(player) + print(self.dealer) + + # deal additional cards to players + for player in self.players: + self.__additional_cards(player) + + self.dealer.flip_first_card() # reveal dealer's first + + if not self.still_playing: + # since all players have busted, just show the dealer's hand + print(self.dealer) + else: + # deal additional cards to dealer + print(self.dealer) + self.__additional_cards(self.dealer) + + if self.dealer.is_busted(): + # everyone still playing wins + for player in self.still_playing: + player.win(wager) + else: + # compare each player still playing to dealer + for player in self.still_playing: + if player.total > self.dealer.total: + player.win(wager) + elif player.total < self.dealer.total: + player.lose(wager) + else: + player.push() + + # remove everyone's cards + for player in self.players: + player.clear() + self.dealer.clear() + self.deck = BJ_Deck() + self.deck.populate() + self.deck.shuffle() + +def main(): + print("\t\tWelcome to Blackjack!\n") + bankroll=0 + wager=0 + names = [] + number = games.ask_number("How many players? (1 - 7): ", low = 1, high = 8) + for i in range(number): + name = input("Enter player name: ") + names.append(name) + print() + + game = BJ_Game(names) + + again = None + while again != "n": + game.play(wager) + again = games.ask_yes_no("\nDo you want to play again?: ") + +main() +input("\n\nPress the enter key to exit.") + + + diff --git a/blackjack.py b/blackjack.py index b98c635..8d309c8 100644 --- a/blackjack.py +++ b/blackjack.py @@ -23,7 +23,7 @@ def populate(self): for suit in BJ_Card.SUITS: for rank in BJ_Card.RANKS: self.cards.append(BJ_Card(rank, suit)) - + class BJ_Hand(cards.Hand): """ A Blackjack Hand. """ @@ -69,7 +69,11 @@ def is_busted(self): class BJ_Player(BJ_Hand): """ A Blackjack Player. """ def is_hitting(self): - response = games.ask_yes_no("\n" + self.name + ", do you want a hit? (Y/N): ") + if self.total == 21: + response = "n" + + else: + response = games.ask_yes_no("\n" + self.name + ", do you want a hit? (Y/N): ") return response == "y" def bust(self): @@ -113,6 +117,7 @@ def __init__(self, names): self.deck.populate() self.deck.shuffle() + @property def still_playing(self): sp = [] @@ -168,7 +173,9 @@ def play(self): for player in self.players: player.clear() self.dealer.clear() - + self.deck = BJ_Deck() + self.deck.populate() + self.deck.shuffle() def main(): print("\t\tWelcome to Blackjack!\n") @@ -186,8 +193,7 @@ def main(): while again != "n": game.play() again = games.ask_yes_no("\nDo you want to play again?: ") - - + main() input("\n\nPress the enter key to exit.") From 3c3d1ca721b79dcf48dbbad50bae6b01d7b2dab3 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 5 Mar 2015 11:31:07 -0800 Subject: [PATCH 2/2] Thanks for the help --- blackjack (1).py | 16 +++++++++------- cards.pyc | Bin 0 -> 3867 bytes games.pyc | Bin 0 -> 1648 bytes 3 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 cards.pyc create mode 100644 games.pyc diff --git a/blackjack (1).py b/blackjack (1).py index 3ccf99f..2e8c088 100644 --- a/blackjack (1).py +++ b/blackjack (1).py @@ -84,7 +84,7 @@ def betting(bet,bankroll): int(input("\n You can only wager a positive number. How much?: ")) except ValueError: int(input("\n That's not valid! Choose a number: ")) - + return wager # Money Conditions def gamble(bet): if bet.bankroll<= 0: @@ -93,9 +93,10 @@ def gamble(bet): class BJ_Player(BJ_Hand): """ A Blackjack Player. """ - def __init__(self, name,bankroll): + def __init__(self, name,bankroll,playerbet): super(BJ_Player, self).__init__(name) self.bankroll=bankroll + self.wager=playerbet def is_hitting(self): if self.total == 21: @@ -107,16 +108,16 @@ def is_hitting(self): def bust(self,wager): print(self.name, "busts.") - self.lose(wager) + self.lose(self.wager) def lose(self, wager): print(self.name, "loses.") - self.bankroll=self.bankroll - wager + self.bankroll=self.bankroll - self.wager print("Your bankroll is: ",self.bankroll) return self.bankroll def win(self, wager): print(self.name, "wins.") - self.bankroll=self.bankroll+wager + self.bankroll=self.bankroll+self.wager print("Your bankroll is: ",self.bankroll) return self.bankroll @@ -142,8 +143,9 @@ def __init__(self, names): self.players = [] for name in names: bankroll=100 - player = BJ_Player(name,bankroll) playerbet=Bet(bankroll).betting(bankroll) + player = BJ_Player(name,bankroll,playerbet) + self.players.append(player) self.dealer = BJ_Dealer("Dealer") @@ -165,7 +167,7 @@ def __additional_cards(self,player): self.deck.deal([player]) print(player) if player.is_busted(): - player.bust(self,wager) + player.bust(self) def __player_broke(self): if player is not broke and player.cash <=0: player.broke diff --git a/cards.pyc b/cards.pyc new file mode 100644 index 0000000000000000000000000000000000000000..667ab7220c2b8dc40986a781c5f73f4b960d7d81 GIT binary patch literal 3867 zcmcgvTW=Fb6h7lyup2`l+(GTqhZ0q4#HB5lBGize7LZKa1c9PN+pTAvY~rjpd!dO$ zp5V9iH}L>2~YdAAhcNW$dYe{~j&*732pi@=nAW z@kQQNWz}G+qEpr3R0UHtovMpp(N%a?6WfsOio|Q;*TqiBTO-DAh&`cPh(nvQJlBGd zt^wi0zK!+>E!hQmBk~x6Ar*S8R;UN0+p0jI#i=-MiYMYI+Y8Mj*y~=GpY}wy!(Jdoe>7Uq- z)Sx3-MVGj4lE$uk3T#3vY1C|`F*1uWD9vITjD+}Y~~ z(RrRgCB$@A=9=h>h=ksb@4710b$13f>vNdfWd~jGbu9j6q4R86x#bs6R+iOsD{N*2BXduhzlk75xv*2ucp>+nmLuio9JBP%V zAt!oms0OH0JE}?zExoHnk~>NbJXWNcdcy*{0=|fLsSY;N&_=$faDmV z5mQ=cQF|IfI^yWbF;;}1QUvpZMc6PcX_zbjSc?BoT-5%)@5R@tTV8@)?J#Cv=E+$M z@}O)fu)*=hj?#tev;;L>GUBHfMSf@}z>Fa|o+B9`&)P514He}SANHl9*D#n=6o~?C zM$$}Z&5aXU$NtXXwXcDPw25>WYOjznNH_5nVX+-OD|paG@Y??heZqm58Pl0#nS3zx zjn~v6bSr~8v_jLD;yxbU{Rp!!QTb^Q;$5@aY@$_F7T=b&O(bD-9&!0CkPkvT;vB9$ z0K7WjjrlZ$H|uw|{|(+4RIXn{ODJ^jJ4x}aHnOySgV?ZlUB?xSuPT_}WtCIBrXWWY zRm|>XdAZw?mv)ro3{;8cV;>wkJpTw$_WRRD?=(Dsx16IV41*mFqO9+w{%!CHFA<^` zLL4cbO-EA+HQoWk3#dq63Q%P6!ra_MHH|wu0f^+uPS-(4JJ`{rN;b1zukVklWTK!) z%a3jpv9UP+E?K%q%(MxZGF_U%hZ5*vH3=Un*?Uz43)Q@|{!|XCvbVs zBz{sb@W7>mdSUh(Fg1pl@lEvuOH9yUw~Js?aPE=({^*6*Q>Qx!(;&=z$NFA>-g%y- z%t1xFYx(7rI>K=qW4hPn_N$p12uh{4lp#KgE8MH~@9W z5AplJ+4lFHbl~`VK|0^bFIY^)!EalBHyyzM?Iqq#Dpa_T0oK543It)4rK3Vo?kGP} W9^@81q)>%`*>kfOXU|WYmiY^{|LB|m literal 0 HcmV?d00001 diff --git a/games.pyc b/games.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19f372ff674b40227354bb3e1f14ab56b6a87de3 GIT binary patch literal 1648 zcmb_c&ubGw6n?XtCQXQ5q%C@ov6rR_@!&x%BGyn;kXWc9mcX#hPMd9#*>q=zHqf5x z-{Rls(eKTqNeaCbTz1~hk2mkf_rAB^nhzS!{`~#kr=_QY`3DU972;D$^qVLZq=~L$ zIuw*fymJ^)8v991xqkN`fsSEYC$06GGWa=0Ur81M1N>wqp?3F}a%n{;P*sqWLDJBT})YoF8^f{bH z4DZGj76S0He%G298R@~y` zZq#2w6*LFJ7n=++)4WE-a|#6j`dkBIg|j;S^kwkue2j~`b|@1$)mDO>CYNVU+cL{d z+cDRsUYZ%@mUb4U>*gkKFf$WZ`r?i9b6o_MGG;d>J%EL_liXN+e}K3$i5)7$s!aY6 zE6ZCHRYgoqu`cG_!~pW>VAwYh_%mF^bn${NV-E_r2t*??Dr4p?kirX14^up2 ztCO(6FopItZhVAZKF`WQW&mB0m=oRZw%DQP>KqV%;$rM)CII6h3YxcoVI6?xuMe`5 z!GA(3gt`XfOGvE&sTq~WNoK(7*HHMCJI+KRDJui}WttVbUyi1-m6#N(6#OXVRyLmG zMY$!ja=Y!g;~R~ARMq0HmfGMCB8Pe^%UtS(J2fr@!2=cqNej@2z(ah mtTCCflj1g#*b4tM&!+qQ)ZT?0-}_!;8a-;%YxUKpXo!D(zg7nT literal 0 HcmV?d00001