Files

197 lines
5.5 KiB
Python
Raw Permalink Normal View History

"""
510K 扑克游戏
经典的 5、10、K 比大小游戏
"""
import random
import sys
class Card:
"""扑克牌类"""
def __init__(self, value):
self.value = value
self.display = {5: '5', 10: '10', 13: 'K'}[value]
def __str__(self):
return self.display
def __repr__(self):
return self.display
class Game510K:
"""510K 游戏类"""
def __init__(self):
"""初始化游戏"""
self.player_name = ""
self.player_score = 0
self.computer_score = 0
self.rounds = 0
# 牌堆(5、10、K 各 4 张)
self.deck = []
for _ in range(4):
self.deck.extend([Card(5), Card(10), Card(13)])
# 牌的大小关系:K > 10 > 5
self.power = {5: 1, 10: 2, 13: 3}
def display_title(self):
"""显示游戏标题"""
print("\n" + "=" * 60)
print("🃏 510K 扑克游戏 🃏")
print("=" * 60)
print("\n游戏规则:")
print(" - 牌堆包含 5、10、K 各 4 张(共 12 张)")
print(" - 大小关系:K > 10 > 5")
print(" - 玩家和电脑各抽一张牌比大小")
print(" - 赢者得 1 分")
print(" - 牌抽完后游戏结束")
print("=" * 60)
def get_player_name(self):
"""获取玩家名字"""
self.player_name = input("\n请输入你的名字:").strip()
if not self.player_name:
self.player_name = "玩家"
print(f"\n你好,{self.player_name}!让我们开始游戏吧!\n")
def shuffle_deck(self):
"""洗牌"""
random.shuffle(self.deck)
print("🔀 正在洗牌...")
def draw_card(self):
"""
抽牌
Returns:
抽到的牌
"""
if len(self.deck) > 0:
return self.deck.pop()
return None
def compare_cards(self, player_card, computer_card):
"""
比较两张牌
Args:
player_card: 玩家的牌
computer_card: 电脑的牌
Returns:
'player' 玩家赢,'computer' 电脑赢,'draw' 平局
"""
player_power = self.power[player_card.value]
computer_power = self.power[computer_card.value]
if player_power > computer_power:
return 'player'
elif player_power < computer_power:
return 'computer'
else:
return 'draw'
def play_round(self):
"""玩一轮游戏"""
self.rounds += 1
print("\n" + "-" * 60)
print(f"第 {self.rounds} 局")
print("-" * 60)
print(f"剩余牌数:{len(self.deck)}")
# 玩家抽牌
input(f"\n{self.player_name},按 Enter 键抽牌...")
player_card = self.draw_card()
# 电脑抽牌
print(f"\n🤖 电脑抽牌中...")
computer_card = self.draw_card()
# 显示双方牌面
print(f"\n👤 {self.player_name}: [{player_card}]")
print(f"🤖 电脑:[{computer_card}]")
# 比较大小
result = self.compare_cards(player_card, computer_card)
if result == 'player':
print(f"\n✅ {self.player_name} 赢了!{player_card} > {computer_card}")
self.player_score += 1
elif result == 'computer':
print(f"\n❌ 电脑赢了!{computer_card} > {player_card}")
self.computer_score += 1
else:
print(f"\n🤝 平局!双方都是 {player_card}")
# 显示比分
print(f"\n📊 比分:{self.player_name} {self.player_score} : {self.computer_score} 电脑")
def is_game_over(self):
"""
检查游戏是否结束
Returns:
True 表示游戏结束
"""
return len(self.deck) == 0
def show_final_results(self):
"""显示最终结果"""
print("\n" + "=" * 60)
print(f"🎮 游戏结束!{self.player_name} 的最终统计")
print("=" * 60)
print(f" 总回合数:{self.rounds}")
print(f" {self.player_name} 得分:{self.player_score}")
print(f" 电脑得分:{self.computer_score}")
# 判定最终胜负
if self.player_score > self.computer_score:
print(f"\n🏆 恭喜!{self.player_name} 获胜!")
elif self.player_score < self.computer_score:
print(f"\n💪 电脑获胜,{self.player_name} 再接再厉!")
else:
print(f"\n👍 势均力敌,打成平手!")
print("=" * 60)
def run(self):
"""运行游戏主流程"""
try:
# 显示标题
self.display_title()
# 获取玩家名字
self.get_player_name()
# 洗牌
self.shuffle_deck()
# 游戏主循环
while not self.is_game_over():
self.play_round()
# 显示最终结果
self.show_final_results()
print("\n感谢游玩!再见!👋\n")
except KeyboardInterrupt:
print("\n\n游戏被中断!再见!👋\n")
if self.rounds > 0:
self.show_final_results()
def main():
"""主函数"""
game = Game510K()
game.run()
if __name__ == "__main__":
main()