Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
200 changes: 200 additions & 0 deletions Challenge_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
#! bin/usr/python3
# Program Name: Challenge_1.py
# Author: Thomas Morrissey
# Date Written: 2-24-2015
# Collaberated with Tyler Gurrea

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 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): ")
return response == "y"

def bust(self):
print(self.name, "busts.")
self.lose()

def lose(self):
print(self.name, "loses.")

def win(self):
print(self.name, "wins.")

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:
player = BJ_Player(name)
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():
if self.deck == 0:
self.deck = BJ_Deck()
self.deck.populate()
self.deck.shuffle()

self.deck.deal([player])
print(player)
if player.is_busted():
player.bust()

def play(self):
# 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()
else:
# compare each player still playing to dealer
for player in self.still_playing:
if player.total > self.dealer.total:
player.win()
elif player.total < self.dealer.total:
player.lose()
else:
player.push()

# remove everyone's cards
for player in self.players:
player.clear()
self.dealer.clear()


def main():
print("\t\tWelcome to Blackjack!\n")

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()
again = games.ask_yes_no("\nDo you want to play again?: ")


main()
input("\n\nPress the enter key to exit.")
53 changes: 53 additions & 0 deletions Challenge_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#! bin/usr/python3
# Program Name: Challenge_2.py
# Author: Thomas Morrissey
# Date Written: 2-24-2015
# Luke Gosnell Help Spell Check.
import random
Ranks = ["A" , "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
Suit = ["Diamonds","Hearts","Clubs","Spades"]
Player1Counter=0
Player2Counter=0
print("Welcome to WAR!")
print("You and a friend will play war until one of the two of you gains ten points.")
print("Before we begin, please enter your names.")
Player1Name=input("Player One: ")
Player2Name=input("Player Two: ")
while Player1Counter < 10 and Player2Counter < 10:
Player1CardIndex=random.randrange(len(Ranks))
Player2CardIndex=random.randrange(len(Ranks))
Player1Card=Ranks[Player1CardIndex]
Player2Card=Ranks[Player2CardIndex]
if Player1CardIndex > 9:
Player1CardIndex = 10
else:
Player1CardIndex = Player1CardIndex + 1
if Player2CardIndex > 9:
Player2CardIndex = 10
else:
Player2CardIndex = Player2CardIndex + 1
Player1SuitIndex=random.randrange(len(Suit))
Player1Suit=Suit[Player1SuitIndex]
Player2SuitIndex=random.randrange(len(Suit))
Player2Suit=Suit[Player2SuitIndex]
print(Player1Name,"has a",Player1Card,"of",Player1Suit+".")
print(Player2Name,"has a",Player2Card,"of",Player2Suit+".")
if Player1CardIndex > Player2CardIndex:
print(Player1Name,"Wins and Gains One Point!")
Player1Counter = Player1Counter + 1
elif Player2CardIndex > Player1CardIndex:
print(Player2Name,"Wins and Gains One Point!")
Player2Counter=Player2Counter+1
else:
print("It's a Draw and No One wins! =(")
print("Total Scores Are:")
print(Player1Name+":",Player1Counter)
print(Player2Name+":",Player2Counter)
input("Please press the <Enter> key to start a new round.")
if Player1Counter == 10:
print(Player1Name,"has and has provined to be the ultimate champion!")
else:
print(Player2Name,"has and has provined to be the ultimate champion!")
print("Thank you for playing!")
input("Please press the <Enter> key to exit.")

Loading