制作起因
初学python,在学习制作剪刀石头布人机对战游戏时突发奇想,运用已经掌握的一些python基础知识编码了一个简单的cmd回合制对战游戏。
覆盖知识
1.流程控制语句(if、while、break等)
2.列表
3.模块导入(random、time等)
4.文件I/O
功能实现
1.回合制
2.随机性
3.存档功能
文件要求
如图设置文件即可。
代码内容(部分地方较为繁琐,可简化)
import random #导入 random 模块
import time #导入 time 模块
import os #导入 os 模块
print("欢迎参与游戏")
print("0——开始游戏")
print("1——结束游戏")
sel0=int(input("你的选择是:")) #(input)让玩家进行选择
os.system("cls") #清屏
data_2=open(".\data\money.txt") #(open)打开文件(游戏存档)并读取
data_3=open(".\data\mp1.txt")
data_4=open(".\data\mxp.txt")
data_5=open(".\\data\\gj.txt")
data_1=open(".\\data\\Blood.txt")
data_6=open(".\data\item.txt")
blood=int(data_1.read(10)) #将游戏数据引入
money=int(data_2.read(10))
mp1=int(data_3.read(10))
mxp=int(data_4.read(10))
n1=int(data_5.read(10))
list=data_6.read() #角色仓库设置
data_1.close() #关闭文件
data_2.close()
data_3.close()
data_4.close()
data_5.close()
data_6.close()
aaaaa=0 #为游戏循环系统设置条件
if sel0==0: #(if)进行游戏的分支
print("1——新的开始")
print("2——继续游戏")
sel1=int(input("请选择"))
os.system("cls")
if sel1==1:
data_2=open(".\data\money.txt","w") #("w"),打开并准备对文件进行写和覆盖
data_3=open(".\\data\\mp1.txt","w")
data_4=open(".\\data\\mxp.txt","w")
data_5=open(".\\data\\gj.txt","w")
data_1=open(".\\data\\Blood.txt","w")
data_6=open(".\\data\\item.txt","w")
data_1.write(str(80)) #覆盖原文件(此处即重置存档)
data_1.close()
data_2.write(str(50))
data_2.close()
data_3.write(str(8))
data_3.close()
data_4.write(str(100))
data_4.close()
data_5.write(str(10))
data_5.close()
data_6.write(str("树枝"))
data_6.close()
aaaaa=aaaaa+1
if sel1==2:
aaaaa=aaaaa+1
data_2=open(".\data\money.txt") #(open)打开文件(游戏存档)并读取
data_3=open(".\data\mp1.txt")
data_4=open(".\data\mxp.txt")
data_5=open(".\\data\\gj.txt")
data_1=open(".\\data\\Blood.txt")
data_6=open(".\data\item.txt")
blood=int(data_1.read(10)) #将游戏数据引入
money=int(data_2.read(10))
mp1=int(data_3.read(10))
mxp=int(data_4.read(10))
n1=int(data_5.read(10))
list=data_6.read() #角色仓库设置
data_1.close() #关闭文件
data_2.close()
data_3.close()
data_4.close()
data_5.close()
data_6.close()
while aaaaa>0: #(while)进行循环
data_6=open(".\data\item.txt")
list=data_6.read()
data_6.close()
mp=mp1 #把游戏文件存档数据代入游戏循环,下同
dj=mxp//100 #将角色属性和等级的关系进行变量联系
n=n1+2*(mxp//100)
blood0=blood+10*dj
time.sleep(1) #延时一秒
os.system("cls")
print("0——仓库") #游戏菜单设置
print("1——角色面板")
print("2——商店")
print("3——关卡")
print("4——技能")
time.sleep(1)
sel2=int(input("你的选择是:")) #菜单选择
time.sleep(1)
os.system("cls")
if sel2==4:
print("""技能名称:格挡反击
技能效果:格挡部分伤害并造成反伤
等级要求:2
技能名称:多重击
技能效果:进行三段攻击
等级要求:4""")
input("按回车返回")
if sel2==0:
print(list)
input("按回车返回")
if sel2==1:
print("等级",dj,(mxp%100,100)) #角色面板设置
print("血量",blood0)
print("攻击",n)
print("行动点",mp)
print("金钱",money)
time.sleep(1)
print("按回车返回")
input(" ")
elif sel2==2:
print("0——返回")
print("""1——购买随机装备,10金钱
2——购买刮刮乐,10金钱
3——购买神秘盲盒,5金钱""")
sel22=int(input("请选择"))
os.system("cls")
if sel22==1:
if money>=10: #设定操作执行条件
sjsp=random.randint(1,3) #随机抽取数值
time.sleep(1)
input("看看是什么")
time.sleep(1)
money-=10 #金钱扣除
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
if sjsp==1:
n1=n1+2 #执行随机事件对应效果
print("你获得了铁剑,攻击+2")
data_6=open(".\data\item.txt","a+") #("a+")打开文件并准备进行内容的追加
data_6.write(",") #分隔文件字符串(仓库物品)
data_6.write(str("铁剑")) #对文件追加新字符串(获得的物品放入仓库)
data_6.close()
data_5=open(".\data\gj.txt","w")
data_5.write(str(int(n1))) #把新的角色属性记入文件,进行存档
data_5.close()
elif sjsp==2:
blood+=10
print("你获得了铁盔甲,血量+10")
data_6=open(".\data\item.txt","a+")
data_6.write(",")
data_6.write(str("铁盔甲"))
data_6.close()
data_1=open(".\data\Blood.txt","w")
data_1.write(str(int(blood)))
data_1.close()
elif sjsp==3:
mp1+=1
print("你获得了靴子,行动力+1")
data_6=open(".\data\item.txt","a+")
data_6.write(",")
data_6.write(str("靴子"))
data_6.close()
data_3=open(".\data\mp1.txt","w")
data_3.write(str(int(mp1)))
data_3.close()
elif money<10:
print("金钱不足")
elif sel22==2 and money>=10:
money-=10
ggl=random.randint(-10,20)
time.sleep(1)
input("刮刮看")
time.sleep(1)
print("你刮了刮卡")
if ggl<=0:
print("谢谢惠顾")
elif ggl>=0 and ggl<=10:
jj=ggl
print("获得奖金",jj)
money+=ggl
elif ggl>10 and ggl<=15:
print("获得奖金",ggl)
money+=ggl
elif ggl>15:
print("获得大奖20")
money+=20
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
elif sel22==2 and money<10:
print("金钱不足")
elif sel22==3:
time.sleep(1)
if money<5:
print("金钱不足")
if money>=5:
input("打开盲盒")
time.sleep(1)
print("哇塞,金色传说")
time.sleep(1)
money=money-5
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
mh=random.choice(["易拉罐装可口可乐","章鱼哥","喜羊羊","鸡","武林秘籍","二爷的报纸","《五年高考三年模拟》","旺仔牛奶","东鹏特饮","华夫饼","《西游记》"])
#随机抽取列表物品(奖池物品)
print("你获得了")
print(mh)
print("快去仓库看看吧")
data_6=open(".\data\item.txt","a+")
data_6.write(",")
data_6.write(str(mh))
data_6.close()
elif sel2==3:
print("进行关卡选择")
print("""返回--0
蚊子--1
野狗--2
二爷--3""")
sel3=int(input("请选择:"))
os.system("cls")
time.sleep(1)
if sel3==1:
blood1=blood0 #设定血量于循环(战局)内,以防影响属性血量
blood2=50
print("你遇到了蚊子")
time.sleep(1)
while blood2>0 and blood1>0: #设定战斗条件
com=random.randint(-5,15) #随机设定参数,决定战斗的随机性
play=random.randint(n-10,n+5)
xixue=random.randint(8,15)
dcj1=random.randint(n,n+5)
dcj2=random.randint(n-5,n)
mp=mp+2
print("你剩余行动点",mp)
time.sleep(1)
print("行动点每回合回复2点")
print("请进行选择")
print("2——攻击")
print("4——格挡反击,3行动点")
print("6——多重击,6行动点")
sel=int(input("\n你的选择是:"))
os.system("cls")
if sel==2:
if com>=0: #根据不同的com数值进行敌人对应技能效果释放
blood1=blood1-com #血量和伤害计算
blood2=blood2-play
print("你对蚊子造成的伤害为:",play)
time.sleep(1)
print("蚊子剩余血量:",blood2)
time.sleep(1)
print("蚊子对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0: #战斗是否结束判定
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif com<0:
blood1=blood1-xixue
blood2=blood2+xixue-play #特殊技能特殊效果
print("你对蚊子造成伤害为",play)
time.sleep(1)
print("蚊子发动了吸血技能,对你吸收的血量为",xixue)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("蚊子剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif sel==4:
if mxp<200: #角色等级判定
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue #跳过该次循环进行下一次
if mp>=3: #行动点判定
mp=mp-3 #扣除行动点
if com>=0:
if com<=20:
blood1=blood1
blood2=blood2-com*0.5
print("你进行格挡反击")
time.sleep(1)
print("蚊子对你进行攻击,受到格挡反击伤害",com*0.5)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
print("蚊子剩余血量:",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif com<0:
blood1=blood1-xixue*0.5
blood2=blood2+xixue*0.5
print("你进行格挡反击")
time.sleep(1)
print("蚊子发动了吸血技能,被你部分格挡后,对你吸收的血量为",xixue*0.5)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("蚊子剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif mp<3:
print("行动点不足,请重新选择")
mp=mp-2
elif sel==6:
if mxp<400:
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue
if mp>=6:
mp=mp-6
if com>=0:
if com<=20:
blood1=blood1-com
blood2=blood2-play-dcj1-dcj2
print("你对蚊子造成的一段伤害为:",play)
time.sleep(1)
print("你对蚊子造成的二段伤害为",dcj1)
time.sleep(1)
print("你对蚊子造成的三段伤害为",dcj2)
time.sleep(1)
print("蚊子剩余血量:",blood2)
time.sleep(1)
print("蚊子对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif com<0:
blood1=blood1-xixue
blood2=blood2+xixue-play-dcj1-dcj2
print("你对蚊子造成的一段伤害为",play)
time.sleep(1)
print("你对蚊子造成的二段伤害为",dcj1)
time.sleep(1)
print("你对蚊子造成的三段伤害为",dcj2)
time.sleep(1)
print("蚊子发动了吸血技能,对你吸收的血量为",xixue)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("蚊子剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了蚊子")
elif blood1<=0:
print("蚊子杀死了你")
elif mp<6:
mp=mp-2
print("行动点不足,请重新选择")
if blood2<=0: #战斗胜利判定
mxp=mxp+50 #奖励效果设置
money+=3
print("你获得了3金币")
print("你获得50经验值")
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
data_4=open(".\data\mxp.txt","w")
data_4.write(str(int(mxp)))
data_4.close()
break #结束本层循环,退出战斗
if sel3==2:
blood1=blood0
blood2=150
print("你遇到了野狗")
while blood2>0 and blood1>0:
com=random.randint(-5,23)
play=random.randint(n-10,n+5)
xixue=random.randint(15,20)
dcj1=random.randint(n,n+5)
dcj2=random.randint(n-5,n)
mp=mp+2
print("你剩余行动点",mp)
time.sleep(1)
print("行动点每回合回复2点")
print("请进行选择")
print("2——攻击")
print("4——格挡反击,3行动点")
print("6——多重击,6行动点")
sel=int(input("\n你的选择是:"))
os.system("cls")
time.sleep(1)
if sel==2:
if com>=0:
blood1=blood1-com
blood2=blood2-play
print("你对野狗造成的伤害为:",play)
time.sleep(1)
print("野狗剩余血量:",blood2)
time.sleep(1)
print("野狗对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif com<0:
blood1=blood1-xixue*1.5
blood2=blood2-play
print("你对野狗造成伤害为",play)
time.sleep(1)
print("野狗发动了撕咬技能,对你的伤害为",xixue*1.5)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("野狗剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif sel==4:
if mxp<200:
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue
if mp>=3:
mp=mp-3
if com>=0:
blood1=blood1
blood2=blood2-com*0.5
print("你进行格挡反击")
time.sleep(1)
print("野狗对你进行攻击,受到格挡反击伤害",com*0.5)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
print("野狗剩余血量:",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif com<0:
blood1=blood1-xixue*0.75
blood2=blood2-xixue*0.75
print("你进行格挡反击")
time.sleep(1)
print("野狗发动了撕咬技能,被你部分格挡后,对你的伤害为",xixue*0.5)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("野狗剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif mp<3:
print("行动点不足,请重新选择")
mp=mp-2
elif sel==6:
if mxp<400:
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue
if mp>=6 and mxp<=400:
mp=mp-6
if com>=0:
blood1=blood1-com
blood2=blood2-play-dcj1-dcj2
print("你对野狗造成的一段伤害为:",play)
time.sleep(1)
print("你对野狗造成的二段伤害为",dcj1)
time.sleep(1)
print("你对野狗造成的三段伤害为",dcj2)
time.sleep(1)
print("野狗剩余血量:",blood2)
time.sleep(1)
print("野狗对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif com<0:
blood1=blood1-xixue
blood2=blood2+xixue-play-dcj1-dcj2
print("你对野狗造成的一段伤害为",play)
time.sleep(1)
print("你对野狗造成的二段伤害为",dcj1)
time.sleep(1)
print("你对野狗造成的三段伤害为",dcj2)
time.sleep(1)
print("野狗发动了撕咬技能,对你的伤害为",xixue)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("野狗剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了野狗")
elif blood1<=0:
print("野狗杀死了你")
elif mp<6:
mp=mp-2
print("行动点不足,请重新选择")
if blood2<=0:
mxp=mxp+70
money+=5
print("你获得了5金币")
print("你获得70经验值")
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
data_4=open(".\data\mxp.txt","w")
data_4.write(str(int(mxp)))
data_4.close()
break
elif sel3==3:
blood1=blood0
blood2=250
print("你遇到了二爷")
while blood2>0 and blood1>0:
com=random.randint(-8,27)
play=random.randint(n-10,n+5)
xixue=random.randint(15,25)
dcj1=random.randint(n,n+5)
dcj2=random.randint(n-5,n)
comda=random.randint(com+10,com+15)
mp=mp+2
print("你剩余行动点",mp)
time.sleep(1)
print("行动点每回合回复2点")
print("请进行选择")
print("2——攻击")
print("4——格挡反击,3行动点")
print("6——多重击,6行动点")
sel=int(input("\n你的选择是:"))
os.system("cls")
if sel==2:
if com>=0:
if com<=20:
blood1=blood1-com
blood2=blood2-play
print("你对二爷造成的伤害为:",play)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
print("二爷对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif com>20:
blood1=blood1-(comda+flood2)*0.5
blood2=blood2-play
print("你对二爷造成的伤害为:",play)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
print("二爷给予你狂暴一击,伤害与二爷血量相关")
time.sleep(1)
print("二爷对你造成伤害为",(comda+blood2)*0.5)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif com<0:
blood1=blood1-xixue
blood2=blood2+xixue-play
print("你对二爷造成伤害为",play)
time.sleep(1)
print("二爷发动了吸血技能,对你吸收的血量为",xixue)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("二爷剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif sel==4:
if mxp<200:
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue
if mp>=3:
mp=mp-3
if com>=0:
if com<=20:
blood1=blood1
blood2=blood2-com*0.5
print("你进行格挡反击")
time.sleep(1)
print("二爷对你进行攻击,受到格挡反击伤害",com*0.5)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif com>20:
blood1=blood1-(comda+blood2)*0.25
blood2=blood2-(comda+blood2)*0.25
print("你进行格挡反击")
time.sleep(1)
print("二爷进行狂暴一击,伤害与二爷血量相关")
time.sleep(1)
print("二爷对你进行攻击,受到格挡反击伤害",(comda+blood2)*0.25)
time.sleep(1)
print("你受到伤害",(comda+blood2)*0.25)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif com<0:
blood1=blood1-xixue*0.5
blood2=blood2+xixue*0.5
print("你进行格挡反击")
time.sleep(1)
print("二爷发动了吸血技能,被你部分格挡后,对你吸收的血量为",xixue*0.5)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("二爷剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了你二爷")
elif blood1<=0:
print("你二爷杀死了你")
elif mp<3:
print("行动点不足,请重新选择")
mp=mp-2
elif sel==6:
if mxp<400:
time.sleep(1)
print("等级不足,无法释放技能")
mp-=2
continue
if mp>=6:
mp=mp-6
if com>=0:
if com<=20:
blood1=blood1-com
blood2=blood2-play-dcj1-dcj2
print("你对二爷造成的一段伤害为:",play)
time.sleep(1)
print("你对二爷造成的二段伤害为",dcj1)
time.sleep(1)
print("你对二爷造成的三段伤害为",dcj2)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
print("二爷对你造成伤害为",com)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("你二爷杀死了你")
elif com>20:
blood1=blood1-(comda+flood2)*0.5
blood2=blood2-play-dcj1-dcj2
print("你对二爷造成的一段伤害为:",play)
time.sleep(1)
print("你对二爷造成的二段伤害为",dcj1)
time.sleep(1)
print("你对二爷造成的三段伤害为",dcj2)
time.sleep(1)
print("二爷剩余血量:",blood2)
time.sleep(1)
print("二爷进行狂暴一击,伤害与二爷血量相关")
time.sleep(1)
print("二爷对你造成伤害为",(comda+flood2)*0.5)
time.sleep(1)
print("你剩余血量:",blood1)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif com<0:
blood1=blood1-xixue
blood2=blood2+xixue-play-dcj1-dcj2
print("你对二爷造成的一段伤害为",play)
time.sleep(1)
print("你对二爷造成的二段伤害为",dcj1)
time.sleep(1)
print("你对二爷造成的三段伤害为",dcj2)
time.sleep(1)
print("二爷发动了吸血技能,对你吸收的血量为",xixue)
time.sleep(1)
print("你剩余血量",blood1)
time.sleep(1)
print("二爷剩余血量",blood2)
time.sleep(1)
if blood2<=0:
print("你杀死了二爷")
elif blood1<=0:
print("二爷杀死了你")
elif mp<6:
mp=mp-2
print("行动点不足,请重新选择")
if blood2<=0:
mxp=mxp+100
money+=10
print("你获得了10金币")
print("你获得100经验值")
data_2=open(".\data\money.txt","w")
data_2.write(str(int(money)))
data_2.close()
data_4=open(".\data\mxp.txt","w")
data_4.write(str(int(mxp)))
data_4.close()
break