目录
- 游戏玩法
- 代码 - v1
- 测试
- 代码 - v2
- 测试
游戏玩法
游戏玩法: 该游戏由 2 到 6 个人玩,使用除大小王之外的 52 张牌,
游戏者的目标是使手中的牌的点数之和不超过 21 点且尽量大。
有着悠久的历史。黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。
1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,
15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。
代码 - v1
import random | |
deck = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 11] * 4 | |
random.shuffle(deck) | |
print( | |
" ********************************************************** ") | |
print( | |
" Welcome to the game Casino - BLACK JACK (21点)! ") | |
print( | |
" ********************************************************** ") | |
d_cards = [] # Initialising dealer's cards | |
p_cards = [] # Initialising player's cards | |
while len(d_cards) != 2: | |
random.shuffle(deck) | |
d_cards.append(deck.pop()) | |
if len(d_cards) == 2: | |
print('荷官有 X ', d_cards[1]) | |
# Displaying the Player's cards | |
while len(p_cards) != 2: | |
random.shuffle(deck) | |
p_cards.append(deck.pop()) | |
if len(p_cards) == 2: | |
print("你一共 ", str(sum(p_cards)) + "点 :",p_cards) | |
if sum(p_cards) > 21: | |
print("你的点数:",p_cards) | |
print("你输了 !\n **************荷官 Wins !!******************\n") | |
exit() | |
if sum(d_cards) > 21: | |
print("荷官的点数:", d_cards) | |
print("荷官输了 !\n ************** You are the Winner !!******************\n") | |
exit() | |
if sum(d_cards) == 21: | |
print("荷官的点数:", d_cards) | |
print("***********************荷官 is the Winner !!******************") | |
exit() | |
if sum(d_cards) == 21 and sum(p_cards) == 21: | |
print("*****************The match is tie 平手!!*************************") | |
exit() | |
def dealer_choice(): | |
if sum(d_cards) < 17: | |
while sum(d_cards) < 17: | |
random.shuffle(deck) | |
d_cards.append(deck.pop()) | |
print("你一共 " + str(sum(p_cards)) + "点 :", p_cards) | |
print("荷官一共 " + str(sum(d_cards)) + "点 :", d_cards) | |
if sum(p_cards) == sum(d_cards): | |
print("***************The match is tie 平手!!****************") | |
exit() | |
if sum(d_cards) == 21: | |
if sum(p_cards) < 21: | |
print("***********************Dealer is the Winner !!******************") | |
elif sum(p_cards) == 21: | |
print("********************There is tie !!**************************") | |
else: | |
print("***********************Dealer is the Winner !!******************") | |
elif sum(d_cards) < 21: | |
if sum(p_cards) < 21 and sum(p_cards) < sum(d_cards): | |
print("***********************Dealer is the Winner !!******************") | |
if sum(p_cards) == 21: | |
print("**********************Player is winner !!**********************") | |
if sum(p_cards) < 21 and sum(p_cards) > sum(d_cards): | |
print("**********************Player is winner !!**********************") | |
else: | |
if sum(p_cards) < 21: | |
print("**********************Player is winner !!**********************") | |
elif sum(p_cards) == 21: | |
print("**********************Player is winner !!**********************") | |
else: | |
print("***********************Dealer is the Winner !!******************") | |
while sum(p_cards) < 21: | |
k = input('Want to hit or stay?\n Press 1 for hit and 0 for stay ') | |
if k == 1: | |
random.shuffle(deck) | |
p_cards.append(deck.pop()) | |
print('你的点数:' + str(sum(p_cards)), p_cards) | |
if sum(p_cards) > 21: | |
print('*************你输了 !*************\n Dealer Wins !!') | |
if sum(p_cards) == 21: | |
print('*******************你赢了 !!*****************************') | |
else: | |
dealer_choice() | |
break | |
测试
case-1
**********************************************************
Welcome to the game Casino - BLACK JACK (21点)!
**********************************************************
荷官有 X 3
你一共 9点 : [6, 3]
Want to hit or stay?
Press 1 for hit and 0 for stay 1
你一共 9点 : [6, 3]
荷官一共 18点 : [5, 3, 10]
***********************Dealer is the Winner !!******************
case-2
**********************************************************
Welcome to the game Casino - BLACK JACK (21点)!
**********************************************************
荷官有 X 1
你一共 18点 : [8, 10]
Want to hit or stay?
Press 1 for hit and 0 for stay 0
你一共 18点 : [8, 10]
荷官一共 17点 : [5, 1, 9, 2]
**********************Player is winner !!**********************
代码 - v2
import random | |
suits = ('Hearts', 'Diamonds', 'Spades', 'Clubs') | |
ranks = ('Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Jack', 'Queen', 'King', 'Ace') | |
values = {'Two': 2, 'Three': 3, 'Four': 4, 'Five': 5, 'Six': 6, 'Seven': 7, 'Eight': 8, | |
'Nine': 9, 'Ten': 10, 'Jack': 10, 'Queen': 10, 'King': 10, 'Ace': 11} | |
playing = True | |
class Card: | |
def __init__(self, suit, rank): | |
self.suit = suit | |
self.rank = rank | |
def __str__(self): | |
return self.rank + ' of ' + self.suit | |
class Deck: | |
def __init__(self): | |
self.deck = [] | |
for suit in suits: | |
for rank in ranks: | |
self.deck.append(Card(suit, rank)) | |
def __str__(self): | |
deck_comp = '' | |
for card in self.deck: | |
deck_comp += '\n ' + card.__str__() | |
def shuffle(self): | |
random.shuffle(self.deck) | |
def deal(self): | |
single_card = self.deck.pop() | |
return single_card | |
class Hand: | |
def __init__(self): | |
self.cards = [] | |
self.value = 0 | |
self.aces = 0 # to keep track of aces | |
def add_card(self, card): | |
self.cards.append(card) | |
self.value += values[card.rank] | |
if card.rank == 'Ace': | |
self.aces += 1 | |
def adjust_for_ace(self): | |
while self.value > 21 and self.aces: | |
self.value -= 10 | |
self.aces -= 1 | |
class Chips: | |
def __init__(self): | |
self.total = 100 | |
self.bet = 0 | |
def win_bet(self): | |
self.total += self.bet | |
def lose_bet(self): | |
self.total -= self.bet | |
def take_bet(chips): | |
while True: | |
try: | |
chips.bet = int(input('How many chips would you like to bet? ')) | |
except ValueError: | |
print('Your bet must be an integer! Try again.') | |
else: | |
if chips.bet > chips.total or chips.bet <= 0: | |
print( | |
"Your bet cannot exceed your balance and you have to enter a positive bet! Your current balance is: ", | |
chips.total) | |
else: | |
break | |
def hit(deck, hand): | |
hand.add_card(deck.deal()) | |
hand.adjust_for_ace() | |
def hit_or_stand(deck, hand): | |
global playing | |
while True: | |
x = input("Would you like to Hit or Stand? Enter '1' or '0' ") | |
if x.lower() == '1': | |
hit(deck, hand) | |
elif x.lower() == '0': | |
print("You chose to stand. Dealer will hit.") | |
playing = False | |
else: | |
print("Wrong input, please try again.") | |
continue | |
break | |
def show_some(player, dealer): | |
print("\nDealer's Hand:") | |
print(" { hidden card }") | |
print('', dealer.cards[1]) | |
print("\nYour Hand:", *player.cards, sep='\n ') | |
def show_all(player, dealer): | |
print("\nDealer's Hand:", *dealer.cards, sep='\n ') | |
print("Dealer's Hand =", dealer.value) | |
print("\nYour Hand:", *player.cards, sep='\n ') | |
print("Your Hand =", player.value) | |
def player_busts(player, dealer, chips): | |
print("You are BUSTED !") | |
chips.lose_bet() | |
def player_wins(player, dealer, chips): | |
print("You are the winner!") | |
chips.win_bet() | |
def dealer_busts(player, dealer, chips): | |
print("Dealer has BUSTED !") | |
chips.win_bet() | |
def dealer_wins(player, dealer, chips): | |
print("Dealer is the winner!") | |
chips.lose_bet() | |
def push(player, dealer): | |
print("The match is tie !") | |
# GAMEPLAY | |
player_chips = Chips() | |
while True: | |
print("\t **********************************************************") | |
print( | |
"\t Welcome to the game Casino - BLACK JACK ! ") | |
print("\t **********************************************************") | |
print("\t ***************") | |
print("\t * A *") | |
print("\t * *") | |
print("\t * * *") | |
print("\t * *** *") | |
print("\t * ***** *") | |
print("\t * *** *") | |
print("\t * * *") | |
print("\t * *") | |
print("\t * *") | |
print("\t ***************") | |
print('\nRULES: Get as close to 21 as you can but if you get more than 21 you will lose!\n Aces count as 1 or 11.') | |
deck = Deck() | |
deck.shuffle() | |
player_hand = Hand() | |
player_hand.add_card(deck.deal()) | |
player_hand.add_card(deck.deal()) | |
dealer_hand = Hand() | |
dealer_hand.add_card(deck.deal()) | |
dealer_hand.add_card(deck.deal()) | |
take_bet(player_chips) | |
show_some(player_hand, dealer_hand) | |
while playing: | |
hit_or_stand(deck, player_hand) | |
show_some(player_hand, dealer_hand) | |
if player_hand.value > 21: | |
player_busts(player_hand, dealer_hand, player_chips) | |
break | |
if player_hand.value <= 21: | |
while dealer_hand.value < 17: | |
hit(deck, dealer_hand) | |
show_all(player_hand, dealer_hand) | |
if dealer_hand.value > 21: | |
dealer_busts(player_hand, dealer_hand, player_chips) | |
elif dealer_hand.value > player_hand.value: | |
dealer_wins(player_hand, dealer_hand, player_chips) | |
elif dealer_hand.value < player_hand.value: | |
player_wins(player_hand, dealer_hand, player_chips) | |
else: | |
push(player_hand, dealer_hand) | |
print("\nYour current balance stands at", player_chips.total) | |
if player_chips.total > 0: | |
new_game = input("Would you like to play another hand? Enter '1' or '0' ") | |
if new_game.lower() == '1': | |
playing = True | |
continue | |
else: | |
print( | |
"Thanks for playing!\n \t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n \t Congratulations! You won {} coins!\n\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n ".format( | |
player_chips.total)) | |
break | |
else: | |
print( | |
"Oops! You have bet all your chips and we are sorry you can't play more.\nThanks for playing! Do come again to Casino BLACK JACK!") | |
break |
测试
********************************************************** | |
Welcome to the game Casino - BLACK JACK ! | |
********************************************************** | |
*************** | |
* A * | |
* * | |
* * * | |
* *** * | |
* ***** * | |
* *** * | |
* * * | |
* * | |
* * | |
*************** | |
RULES: Get as close to 21 as you can but if you get more than 21 you will lose! | |
Aces count as 1 or 11. | |
How many chips would you like to bet? 1 | |
Dealer's Hand: | |
{ hidden card } | |
Ten of Hearts | |
Your Hand: | |
Six of Clubs | |
Ten of Diamonds | |
Would you like to Hit or Stand? Enter '1' or '0' 0 | |
You chose to stand. Dealer will hit. | |
Dealer's Hand: | |
{ hidden card } | |
Ten of Hearts | |
Your Hand: | |
Six of Clubs | |
Ten of Diamonds | |
Dealer's Hand: | |
Four of Hearts | |
Ten of Hearts | |
Two of Clubs | |
Six of Hearts | |
Dealer's Hand = 22 | |
Your Hand: | |
Six of Clubs | |
Ten of Diamonds | |
Your Hand = 16 | |
Dealer has BUSTED ! | |
Your current balance stands at 101 | |
Would you like to play another hand? Enter '1' or '0' 0 | |
Thanks for playing! | |
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ | |
Congratulations! You won 101 coins! | |
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ |