在编程的世界里,我们可以通过代码创造出各种有趣的互动游戏。今天,我们将深入探讨一个用 Python 实现的猜拳游戏程序,并对其进行详细的分析和讲解。这个游戏不仅具有趣味性,还涉及到了用户输入验证、随机数生成、循环控制以及结果统计等多个编程知识点。
一、游戏背景与需求
猜拳游戏是一种广为人知的互动游戏,通常由两个人进行,通过手势来代表石头、剪刀、布三种选项,以决定胜负。在这个 Python 实现的猜拳游戏中,我们设定了以下需求:
- 提供默认用户名和密码,用户有三次机会输入正确的用户名和密码进入游戏。
- 进入游戏后,显示游戏菜单,用户可以选择石头、剪刀、布中的一个选项进行游戏,也可以选择退出游戏。
- 游戏过程中,随机生成对手的选择,根据双方的选择判断胜负,并统计平局、赢场和总局数等数据。
- 游戏结束后,显示双方的胜率和游戏统计信息。
二、功能实现详解
(一)用户登录验证
- 用户首先看到屏幕上显示的默认用户名和密码信息,以及告知用户有三次机会输入正确的用户名和密码进入游戏。
- 用户在输入用户名和密码后,程序会检查输入是否与默认的用户名和密码匹配。如果匹配,进入猜拳游戏;如果不匹配,根据错误类型打印相应的错误消息,并减少用户的尝试次数。
- 如果用户还有尝试机会,程序会打印剩余的尝试次数,以便用户了解自己还可以尝试的次数。
(二)猜拳游戏逻辑
- 进入猜拳游戏后,程序会显示游戏菜单,包括石头、剪刀、布三个选项和一个退出选项。用户可以通过输入相应的数字来选择自己的手势。
- 程序会使用
random.randint(1, 3)
生成对手的随机选择。然后,根据用户的选择和对手的选择,判断胜负情况。- 如果用户选择石头(1),对手选择剪刀(2),或者用户选择剪刀(2),对手选择布(3),或者用户选择布(3),对手选择石头(1),则用户赢,程序会增加用户的赢场数
a_num
,并打印恭喜用户赢了的消息。 - 如果用户选择石头(1),对手选择布(3),或者用户选择剪刀(2),对手选择石头(1),或者用户选择布(3),对手选择剪刀(2),则对手赢,程序会增加对手的赢场数
b_num
,并打印恭喜对手赢了的消息。 - 如果用户选择的数字与对手选择的数字相同,即双方选择相同的手势,则为平局,程序会增加平局的次数
num3
,并打印此局为平局的消息。
- 如果用户选择石头(1),对手选择剪刀(2),或者用户选择剪刀(2),对手选择布(3),或者用户选择布(3),对手选择石头(1),则用户赢,程序会增加用户的赢场数
- 如果用户选择退出游戏(输入 0),程序会打印退出消息,并跳出内层循环,结束游戏。
(三)结果统计与显示
- 在游戏结束后,程序会统计平局的次数、用户的赢场数和对手的赢场数,并计算总局数
num
。 - 然后,程序会根据总局数是否大于 0 来计算和打印双方的胜率。胜率的计算方法是赢场数除以总局数再乘以 100,并保留两位小数。
- 如果总局数为 0,程序会打印双方的统计信息为 0。
- 最后,程序会打印一条分隔线,以便区分不同的游戏结果。
三、代码分析
下面我们将对实现这个猜拳游戏的 Python 代码进行逐行分析。
首先,我们导入了random
模块,这个模块将用于在游戏中生成随机数。然后,我们打印出默认的用户名和密码以及用户的尝试次数。接着,我们定义了几个变量,mUser
和mPassWord
分别代表默认的用户名和密码,a
表示用户剩余的尝试次数,a_num
、b_num
和num3
分别用于统计玩家 “玩家A” 的赢场数、对手 “玩家B” 的赢场数和平局的次数。
import random
print("默认用户名: admin | 默认密码: 123456 | 你有三次机会")
mUser = "admin"
mPassWord = "123456"
i = 3
a_num = 0
b_num = 0
num3 = 0
这段代码是一个外层循环,用于验证用户的用户名和密码。在循环中,我们首先提示用户输入用户名和密码,然后检查输入是否与默认的用户名和密码匹配。如果匹配,打印欢迎消息并进入内层循环,即猜拳游戏的主循环。如果不匹配,根据错误类型打印相应的错误消息,并减少用户的尝试次数。如果用户还有尝试机会,打印剩余的尝试次数。
在内层循环中,我们首先打印游戏菜单,然后提示用户输入选择。接着,我们使用random.randint(1, 3)
生成对手的随机选择。根据用户的选择和对手的选择,判断胜负情况,并更新相应的统计变量。如果用户选择退出游戏,打印退出消息并跳出内层循环。如果用户输入的选项不正确,打印错误消息。
while i > 0:
user = str(input("请输入用户名:"))
passWord = str(input("请输入密码:"))
if user == mUser:
if passWord == mPassWord:
print("欢迎玩家A进入猜拳游戏")
while True:
print("1.石头 2.剪刀 3.布 0.退出")
a = int(input("请输入你的选择:"))
b = int(random.randint(1, 3))
if (a == 1 and b == 2) or (a == 2 and b == 3) or (a == 3 and b == 1):
a_num += 1
print("恭喜玩家A赢了")
elif (a == 1 and b == 3) or (a == 2 and b == 1) or (a == 3 and b == 2):
b_num += 1
print("恭喜玩家B赢了")
elif a == 0:
print("玩家A已退出游戏欢迎下次再来")
break
elif (a == 1 and b == 1) or (a == 2 and b == 2) or (a == 3 and b == 3):
num3 += 1
print("此局为平局")
else:
print("请输入正确的选项!!!")
break
else:
print("密码错误")
else:
print("用户名错误")
i -= 1
if i > 0:
print(f"你还有{a}次机会")
这段代码在用户尝试次数用完或者游戏结束后执行。如果用户尝试次数用完,打印相应的提示消息。然后,打印平局的次数和游戏统计信息的表头。接着,计算总局数num
,并根据总局数是否大于 0 来计算和打印双方的胜率。如果总局数为 0,打印双方的统计信息为 0。最后,打印一条分隔线。
if a == 0:
print("次数已用完,请联系管理员!!!!")
print(f"平局:{num3}")
print("姓名\t\t总局数\t赢场\t\t胜率")
num = a_num + b_num + num3
a_wins = (a_num / num * 100)
b_wins = (b_num / num * 100)
if num > 0:
if a_num > b_num:
print(f"玩家A\t{num}\t\t{a_num}\t\t{100 * a_num / num:.2f}%")
print(f"玩家B\t{num}\t\t{b_num}\t\t{100 * b_num / num:.2f}%")
else:
print(f"玩家B\t{num}\t\t{b_num}\t\t{100 * b_num / num:.2f}%")
print(f"玩家A\t{num}\t\t{a_num}\t\t{100 * a_num / num:.2f}%")
else:
print(f"玩家A\t{num}\t\t{a_num}\t\t0")
print(f"玩家B\t{num}\t\t{b_num}\t\t0")
print("===========================================")
四、总结
通过这个猜拳游戏的实现,我们不仅学习了 Python 的基本语法和编程技巧,还深入了解了用户输入验证、随机数生成、循环控制以及结果统计等编程概念。同时,我们还对代码进行了优化和扩展,提高了代码的可读性、可维护性和可扩展性。希望这个猜拳游戏的实现能够为大家在 Python 编程学习中提供一些帮助和启发。
在实际的编程过程中,我们可以根据自己的需求和创意对代码进行进一步的优化和扩展,使其更加完善和有趣。例如,可以添加更多的游戏选项、增加游戏的难度级别、实现多人游戏模式或者添加图形界面等。通过不断地尝试和实践,我们可以提高自己的编程能力和创造力,创造出更加精彩的程序作品。