21点又名BlackJack,由2到5个人玩,使用4副扑克除大小王之外的208张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大python编写程序
时间: 2024-04-30 18:24:47 浏览: 138
好的,我可以给您提供一个基于Python的21点游戏程序。以下是代码:
```python
import random
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __str__(self):
return f"{self.rank} of {self.suit}"
class Deck:
def __init__(self):
self.cards = []
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
ranks = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King']
for suit in suits:
for rank in ranks:
self.cards.append(Card(suit, rank))
def shuffle(self):
random.shuffle(self.cards)
def deal_card(self):
return self.cards.pop()
class Hand:
def __init__(self):
self.cards = []
self.value = 0
self.aces = 0
def add_card(self, card):
self.cards.append(card)
if card.rank == 'Ace':
self.aces += 1
self.value += self.card_value(card)
def card_value(self, card):
if card.rank in ['2', '3', '4', '5', '6', '7', '8', '9', '10']:
return int(card.rank)
elif card.rank in ['Jack', 'Queen', 'King']:
return 10
else:
return 11
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("Sorry, your bet must be an integer.")
else:
if chips.bet > chips.total:
print(f"Sorry, your bet can't exceed {chips.total}.")
else:
break
def hit(deck, hand):
hand.add_card(deck.deal_card())
hand.adjust_for_ace()
def hit_or_stand(deck, hand):
global playing
while True:
x = input("Would you like to Hit or Stand? Enter 'h' or 's' ")
if x.lower() == 'h':
hit(deck, hand)
elif x.lower() == 's':
print("Player stands. Dealer is playing.")
playing = False
else:
print("Sorry, please try again.")
continue
break
def show_some(player, dealer):
print("\nDealer's Hand:")
print(" <card hidden>")
print("", dealer.cards[1])
print("\nPlayer's 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("\nPlayer's Hand:", *player.cards, sep='\n ')
print("Player's Hand =",player.value)
def player_busts(player, dealer, chips):
print("Player busts!")
chips.lose_bet()
def player_wins(player, dealer, chips):
print("Player wins!")
chips.win_bet()
def dealer_busts(player, dealer, chips):
print("Dealer busts!")
chips.win_bet()
def dealer_wins(player, dealer, chips):
print("Dealer wins!")
chips.lose_bet()
def push(player, dealer):
print("Dealer and Player tie! It's a push.")
while True:
print('Welcome to BlackJack! Get as close to 21 as you can without going over!\n\
Dealer hits until they reach 17. Aces count as 1 or 11.')
deck = Deck()
deck.shuffle()
player_hand = Hand()
player_hand.add_card(deck.deal_card())
player_hand.add_card(deck.deal_card())
dealer_hand = Hand()
dealer_hand.add_card(deck.deal_card())
dealer_hand.add_card(deck.deal_card())
player_chips = Chips()
take_bet(player_chips)
show_some(player_hand, dealer_hand)
playing = True
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(f"\nPlayer's winnings stand at {player_chips.total}")
new_game = input("Would you like to play another hand? Enter 'y' or 'n' ")
if new_game.lower() == 'y':
playing = True
continue
else:
print("Thanks for playing!")
break
```
您可以将此代码复制到Python IDE(如PyCharm或Jupyter Notebook)中并运行它。该程序会引导您玩21点游戏,您可以根据提示输入您的下注和游戏操作。希望这会帮助您!