Files
drawing-app/guess_game.py
T

220 lines
6.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
猜大小游戏
经典的骰子猜大小游戏
系统随机生成 1-6 的点数,玩家猜测是大还是小
"""
import random
import sys
class GuessNumberGame:
"""猜大小游戏类"""
def __init__(self):
"""初始化游戏"""
self.player_name = ""
self.score = 1000 # 初始分数
self.win_count = 0
self.lose_count = 0
self.total_games = 0
def display_title(self):
"""显示游戏标题"""
print("\n" + "=" * 60)
print("🎲 猜大小游戏 🎲")
print("=" * 60)
print("\n游戏规则:")
print(" - 系统随机生成 1-6 的点数")
print(" - 1-3 为小,4-6 为大")
print(" - 猜对加分,猜错扣分")
print(" - 初始分数:1000 分")
print(" - 分数为 0 时游戏结束")
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 get_bet(self):
"""
获取下注分数
Returns:
下注的分数
"""
while True:
try:
bet = input(f"当前分数:{self.score} | 请输入下注分数 (1-{self.score}): ").strip()
bet = int(bet)
if 1 <= bet <= self.score:
return bet
else:
print(f"❌ 请输入 1 到 {self.score} 之间的数字!")
except ValueError:
print("❌ 请输入有效的数字!")
def get_guess(self):
"""
获取玩家猜测
Returns:
'big' 或 'small'
"""
while True:
guess = input("\n请猜大小 (大/小 或 b/s): ").strip().lower()
if guess in ['大', 'big', 'b']:
return 'big'
elif guess in ['小', 'small', 's']:
return 'small'
else:
print("❌ 请输入 '大'、'小'、'b' 或 's'!")
def roll_dice(self):
"""
掷骰子
Returns:
骰子点数 (1-6)
"""
return random.randint(1, 6)
def is_big(self, number):
"""
判断是否为大
Args:
number: 骰子点数
Returns:
True 表示大,False 表示小
"""
return number >= 4
def play_round(self):
"""玩一轮游戏"""
print("\n" + "-" * 60)
print(f"第 {self.total_games + 1} 局")
print("-" * 60)
# 获取下注
bet = self.get_bet()
# 获取猜测
guess = self.get_guess()
# 掷骰子
print("\n🎲 正在掷骰子...")
import time
time.sleep(1)
result = self.roll_dice()
is_big = self.is_big(result)
result_text = "大" if is_big else "小"
print(f"\n🎯 骰子点数:{result} ({result_text})")
# 判断输赢
if (guess == 'big' and is_big) or (guess == 'small' and not is_big):
# 赢了
win_score = bet
self.score += win_score
self.win_count += 1
print(f"✅ 恭喜!你猜对了!赢得 {win_score} 分")
else:
# 输了
self.score -= bet
self.lose_count += 1
print(f"❌ 很遗憾,你猜错了!失去 {bet} 分")
self.total_games += 1
# 显示统计
print(f"\n📊 统计:胜 {self.win_count} 场 / 负 {self.lose_count} 场")
print(f"📈 胜率:{self.win_count / self.total_games * 100:.1f}%")
def check_game_over(self):
"""
检查游戏是否结束
Returns:
True 表示游戏结束
"""
if self.score <= 0:
print("\n" + "=" * 60)
print("💸 游戏结束!你的分数已经用完了!")
print("=" * 60)
return True
# 询问是否继续
while True:
choice = input("\n是否继续游戏?(y/n): ").strip().lower()
if choice in ['y', 'yes', '是']:
return False
elif choice in ['n', 'no', '否']:
return True
else:
print("请输入 'y' 或 'n'!")
def show_final_stats(self):
"""显示最终统计"""
print("\n" + "=" * 60)
print(f"🎮 {self.player_name} 的最终统计")
print("=" * 60)
print(f" 总游戏局数:{self.total_games}")
print(f" 胜利:{self.win_count} 场")
print(f" 失败:{self.lose_count} 场")
print(f" 胜率:{self.win_count / max(1, self.total_games) * 100:.1f}%")
print(f" 最终分数:{self.score}")
if self.win_count > self.lose_count:
print("\n🏆 表现不错!你是猜大小高手!")
elif self.win_count == self.lose_count:
print("\n👍 势均力敌!下次继续努力!")
else:
print("\n💪 不要气馁!再接再厉!")
print("=" * 60)
def run(self):
"""运行游戏主流程"""
# 显示标题
self.display_title()
# 获取玩家名字
self.get_player_name()
# 游戏主循环
while True:
# 玩一轮
self.play_round()
# 检查是否结束
if self.check_game_over():
break
# 显示最终统计
self.show_final_stats()
print("\n感谢游玩!再见!👋\n")
def main():
"""主函数"""
try:
game = GuessNumberGame()
game.run()
except KeyboardInterrupt:
print("\n\n游戏被中断!再见!👋\n")
sys.exit(0)
if __name__ == "__main__":
main()