220 lines
6.1 KiB
Python
220 lines
6.1 KiB
Python
"""
|
||||
|
|
猜大小游戏
|
|||
|
|
经典的骰子猜大小游戏
|
|||
|
|
系统随机生成 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()
|