【童年游戏回忆】——扳机游戏代码复现
背景90后小时候玩的都是自创的游戏,踢沙包、踢足球(把纸弄成球,包N层)、跳方格、挖沙子、堆泥巴、挖坑道、骑自行车、荡秋千、打卡片、叠元宝、猜猪蹄四角、拍手、跳皮筋、翻花绳、转笔、弹射笔、弹射纸球、画漫画、超能nono撞击挤压、斗鸡、骑马打仗、剪刀石头布等手势博弈游戏,其中扳机作为斗智斗勇的博弈游戏,有其内在的规律和不确定性、刺激性,因此进行游戏的代码复现。但不只是完全复现,还进行了优化,优化了血
·
背景
- 90后小时候玩的都是自创的游戏,踢沙包、踢足球(把纸弄成球,包N层)、跳方格、挖沙子、堆泥巴、挖坑道、骑自行车、荡秋千、打卡片、叠元宝、猜猪蹄四角、拍手、跳皮筋、翻花绳、转笔、弹射笔、弹射纸球、画漫画、超能nono撞击挤压、斗鸡、骑马打仗、剪刀石头布等手势博弈游戏,其中扳机作为斗智斗勇的博弈游戏,有其内在的规律和不确定性、刺激性,因此进行游戏的代码复现。
- 但不只是完全复现,还进行了优化,优化了血量,原来是1次生命,现在是多次机会,可玩性提高了。同时代码运行也能够回合制的形式展示双方的状态信息,更便于玩家进行博弈,后续基于单机版也可以升级开发为联机版,通过socket建立局域网/远程通信进行player2player的博弈,甚至再升级为构造游戏大厅创建为匹配玩家模式的博弈。
代码
'''
@Author:lipch
@Date:2021-11-13
@NOTE:小时候的扳机游戏现在已经被手机游戏所替代了,是时代的进步还是童年的丧失
'''
print("##############扳机游戏单机版V1.0#################")
import time
select_start_menu = str(input("1.设置 2.开始新游戏\n"))
if str(select_start_menu) == '1':
while (str(select_start_menu) != "2"):
select_hard = str(input("1.简单 2.困难\n"))
select_start_menu = input("1.设置 2.开始新游戏\n")
else:
select_hard = "1"
# 初始化血量
player_blood = 3
pc_blood = 3
player_banji = 0
pc_banji = 0
# 开战
epoch=0
mode_map = {-1:"无敌 切换防御形态" ,0:"无攻击无防御 扳机", 1:"攻击1 手枪攻击", 2:"攻击2 双枪攻击", 3:"攻击3 大炮攻击",}
while((player_blood>0) and (pc_blood>0) ):
print("************************第%d回合*************************"%epoch)
# 玩家
epoch_select = int(input("请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击\n"))
if epoch_select==0:
player_banji+=1
# mode: -1:无敌 0:无攻击无防御 >0:攻击 值为攻击值
player_mode=epoch_select
elif epoch_select>0:
if player_banji-epoch_select>=0:
player_mode=epoch_select
player_banji-=epoch_select
else:
player_mode=0
else:
player_mode=epoch_select
# 电脑
# ("请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击")
# 1.电脑第一回合一定是扳机 2.玩家没有扳机的时候一定是安全的,所以直接扳机
epoch_select = 0 if (epoch==0)or(player_banji<=0) else int(str(time.time())[-1])
# 随机数 → 随机选择
if select_hard=="1":
select_list= [-1,0,1]#简单难度 则不使用杀伤力高的武器
else:
select_list = [-1,0,1,2,3]
while not epoch_select in select_list:
epoch_select = int(str(time.time())[-1])
if epoch_select==0:
pc_banji+=1
# mode: -1:无敌 0:无攻击无防御 >0:攻击 值为攻击值
pc_mode=epoch_select
elif epoch_select>0:
if pc_banji-epoch_select>=0:
pc_mode=epoch_select
pc_banji-=epoch_select
else:
rand_select = [-1,0][int(str(time.time())[-1])%2]
if rand_select == 0:
pc_banji += 1
# mode: -1:无敌 0:无攻击无防御 >0:攻击 值为攻击值
pc_mode = rand_select
else:
pc_mode=rand_select#防御形态
else:
pc_mode=epoch_select#防御形态
# 对战
print("玩家选择:",mode_map[player_mode],"扳机数量剩余:",player_banji)
print("电脑选择:",mode_map[pc_mode],"扳机数量剩余:",pc_banji)
if (player_mode<0) or (pc_mode<0) or (player_mode==pc_mode):
print("相互制衡!")
elif player_mode>pc_mode:
pc_blood-=abs(player_mode-pc_mode)
print("玩家攻击了电脑%d的血量"%abs(player_mode-pc_mode),"玩家血量剩余:",player_blood,"电脑血量剩余:",pc_blood)
else:
player_blood -= abs(player_mode - pc_mode)
print("电脑攻击了玩家%d的血量" % abs(player_mode - pc_mode), "玩家血量剩余:", player_blood, "电脑血量剩余:", pc_blood)
epoch+=1
print("玩家胜利!"if player_blood>0 else "电脑胜利!")
运行
选取了一次非常精彩的人机对决:
python.exe 扳机游戏GAME单机版.py日志:
##############扳机游戏单机版V1.0#################
1.设置 2.开始新游戏
2
************************第0回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 1
电脑选择: 无攻击无防御 扳机 扳机数量剩余: 1
相互制衡!
************************第1回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 2
电脑选择: 攻击1 手枪攻击 扳机数量剩余: 0
电脑攻击了玩家1的血量 玩家血量剩余: 2 电脑血量剩余: 3
************************第2回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 3
电脑选择: 无攻击无防御 扳机 扳机数量剩余: 1
相互制衡!
************************第3回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
3
玩家选择: 攻击3 大炮攻击 扳机数量剩余: 0
电脑选择: 攻击1 手枪攻击 扳机数量剩余: 0
玩家攻击了电脑2的血量 玩家血量剩余: 2 电脑血量剩余: 1
************************第4回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 1
电脑选择: 无攻击无防御 扳机 扳机数量剩余: 1
相互制衡!
************************第5回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
1
玩家选择: 攻击1 手枪攻击 扳机数量剩余: 0
电脑选择: 攻击1 手枪攻击 扳机数量剩余: 0
相互制衡!
************************第6回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 1
电脑选择: 无攻击无防御 扳机 扳机数量剩余: 1
相互制衡!
************************第7回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
-1
玩家选择: 无敌 切换防御形态 扳机数量剩余: 1
电脑选择: 攻击1 手枪攻击 扳机数量剩余: 0
相互制衡!
************************第8回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
0
玩家选择: 无攻击无防御 扳机 扳机数量剩余: 2
电脑选择: 无攻击无防御 扳机 扳机数量剩余: 1
相互制衡!
************************第9回合*************************
请选择:-1.切换防御形态 0.扳机 1.手枪攻击 2.双枪攻击 3.大炮攻击
2
玩家选择: 攻击2 双枪攻击 扳机数量剩余: 0
电脑选择: 攻击1 手枪攻击 扳机数量剩余: 0
玩家攻击了电脑1的血量 玩家血量剩余: 2 电脑血量剩余: 0
玩家胜利!
Process finished with exit code 0
总结
可玩性很高,电脑也不是完全随机,有一定的策略在里面,后续也可以考虑结合强化学习实现更强的电脑,但可能随机才是最强,套路的最高境界就是没有套路,说的就是这个道理,玩家完全不知道电脑的策略才是最强电脑,这是个哲学命题,有待进一步探究。
更多推荐
已为社区贡献2条内容
所有评论(0)