Python实战案例:猜拳小游戏
文章目录
- Python实战案例:猜拳小游戏
- 一、案例背景
- 二、代码实现
- 三、代码解析
- 3.1 执行过程
- 3.2 流程图
- 四、案例总结
- 1. 核心知识点运用
- 2. 编程思维提升
一、案例背景
猜拳游戏(石头剪刀布)是一款规则简单却极具策略性的经典对决游戏,几乎人人都能快速上手。
对于编程学习者而言,通过实现这一游戏,能够深度理解条件判断、循环控制、数据结构等核心编程概念,同时锻炼逻辑思维与代码调试能力。
本文将从基础规则出发,逐步完成一个具备输入验证、胜负判定、战绩统计的完整猜拳小游戏案例。
游戏规则:
游戏中双方需在 石头、剪刀、布 三种手势中选择其一,胜负判定规则如下:
- 石头 胜 剪刀 (石头砸坏剪刀)
- 剪刀 胜 布 (剪刀剪碎布)
- 布 胜 石头 (布包裹石头)
- 若双方手势相同,则判定为 平局
通过将现实规则转化为代码逻辑,可以锻炼我们将抽象生活场景转换为程序模型的能力。
接下来,让我们看看如何用Python代码模拟实现猜拳小游戏。
二、代码实现
本案例代码需要使用random
模块相关方法, 所以需先导入模块。
import random# 游戏初始化
# 定义游戏规则:键代表玩家选择,值代表该选择能击败的对象
game_rules = {'石头': '剪刀', '剪刀': '布', '布': '石头'}
# 从游戏规则中提取所有可用的选择项
choices = list(game_rules.keys())
# 初始化历史战绩统计字典
history = {'赢': 0, # 记录胜利次数'输': 0, # 记录失败次数'平局': 0, # 记录平局次数'回合数': 0, # 记录总游戏回合数'胜率': '0%' # 记录当前胜率
}
# 定义打印分隔线的格式
spec = '=^30' # 格式(居中,宽度30,用=填充)# 打印游戏开始信息
print('\n欢迎来到猜拳小游戏.\n')
print(f"{'游戏开始':{spec}}\n") # 使用定义好的格式打印"游戏开始"
print("当前第1回合".center(30, '-')) # 使用字符串格式化方法打印当前回合数# 主游戏循环
while True:# 获取用户输入# strip()去除首尾空格,lower()转换为小写user_select = input('请输入你的选择--石头/剪刀/布(输入Q退出): ').strip().lower()# 检查用户是否选择退出if user_select == 'q': # 使用定义好的格式打印"游戏退出"print(f"\n{'游戏退出':{spec}}")# 打印历史战绩print(f"历史战绩: 回合数 {history['回合数']} | 胜利 {history['赢']} |"f" 失败 {history['输']} | 平局 {history['平局']} | 胜率 {history['胜率']}\n")break # 退出游戏循环 # 验证用户输入是否有效if user_select not in choices:print('选择输入错误,请重新输入(输入Q退出)')continue # 跳过当前循环,重新获取输入# 电脑随机选择一个选项pc_select = random.choice(choices)# 判断游戏结果# 平局情况if user_select == pc_select:history['平局'] += 1 # 平局次数加1print(f'\n平局! 你:{user_select} vs 电脑:{pc_select}')else:# 获胜情况:检查玩家的选择是否能击败电脑的选择if game_rules[user_select] == pc_select:history['赢'] += 1 # 胜利次数加1print(f'\n你赢了! 你:{user_select} 击败 电脑:{pc_select}')else:# 失败情况history['输'] += 1 # 失败次数加1print(f'\n你输了! 电脑:{pc_select} 击败 你:{user_select}')# 更新回合数history['回合数'] += 1# 计算并更新胜率(避免除以零的错误)if history['回合数'] > 0:# 计算胜率winning_rate = history['赢'] / history['回合数']# 将胜率转换为百分比格式字符串history['胜率'] = f"{winning_rate:.1%}"# 打印当前战绩print(f"当前战绩:胜利 {history['赢']} | 失败 {history['输']} |"f" 平局 {history['平局']} | 胜率 {history['胜率']}\n")# 使用定义好的格式打印"游戏继续"print(f"{'游戏继续':{spec}}\n")# 使用字符串格式化方法打印当前回合数print(f"当前第{history['回合数'] + 1}回合".center(30, '-'))
三、代码解析
3.1 执行过程
-
游戏初始化:
- 定义游戏规则字典
game_rules
,明确石头克剪刀、剪刀克布、布克石头。 - 从规则中提取所有可用选择(石头、剪刀、布)存入
choices
列表。 - 初始化历史战绩字典
history
,记录胜负平次数、回合数和胜率。 - 设置打印格式
spec
用于美化输出。 - 打印游戏开始信息和当前回合数(第1回合)。
- 定义游戏规则字典
-
主游戏循环:
- 通过
while True
创建无限循环,直到用户主动退出。 - 获取用户输入并处理:
- 去除输入首尾空格并转为小写。
- 若输入为
q
,则打印游戏退出信息和完整历史战绩,然后终止循环。 - 若输入无效(不在选择列表中),提示错误并继续循环。
- 通过
-
游戏逻辑处理:
- 电脑从
choices
中随机选择一项。 - 判断游戏结果:
- 若用户和电脑选择相同,记录平局。
- 否则根据
game_rules
判断胜负:用户选择能击败电脑选择则获胜,否则失败。
- 更新历史战绩:
- 增加相应的胜负平次数。
- 更新总回合数。
- 计算并更新胜率(格式化为百分比,保留1位小数)。
- 电脑从
-
结果展示与循环:
- 打印当前回合结果(胜/负/平)。
- 显示当前战绩统计。
- 打印游戏继续信息和下一回合编号,继续循环。
3.2 流程图
四、案例总结
1. 核心知识点运用
- 基础语法:条件判断(
if-elif-else
)、循环(while
)、输入输出(input/print
)。 - 数据结构:字典(存储规则和战绩)、列表(存储合法手势)。
- 实用技巧:字符串格式化、随机数生成(
random.choice
)、输入验证逻辑。
2. 编程思维提升
- 抽象能力:将现实规则(石头剪刀布克制关系)转化为代码可处理的字典结构。
- 健壮性设计:通过输入验证和异常处理(如避免除零错误)提升程序稳定性。
- 交互式设计:合理使用分隔线和实时反馈,增强交互友好性。
通过本案例,我们可清晰看到如何从简单规则逐步构建功能完整的程序,该案例适合作为Python入门的实战练手项目。
在编程学习中,实现经典小游戏是掌握基础语法和逻辑思维的最佳方式。快来动手尝试自己实现代码功能,体验编程与游戏结合的乐趣吧!