Python制作简单的终端交互小游戏

因为最近的集训课程中,老师让我们把python,java,nodejs都需要掌握,本人最常使用的是java,python许久没有用过,就想写一段逻辑来帮助自己复习,于是就有了这个交互类的终端小游戏,功能并不完善,有时间会持续更新

首先是创建一个存放要用到的Class的py文件,这里面存放大多数要用到的类还有少部分方法。我将其命名为classes.py

import randomclass Humen:def __init__(self,name,gender):self.name = nameself.gender = genderprint("人物"+name+"创建成功")if(gender == "男"):self.atack = random.randint(80,100)self.critical = random.randint(10,15)self.defense = random.randint(7,10)self.doge = random.randint(5,10)self.hp = random.randint(400,500)self.hpnow = self.hpself.mp = random.randint(180,220)self.mpnow = self.mpself.skills = []self.atkNum = 1self.grade = 1self.epvalue = 0else:self.atack = random.randint(40,50)self.critical = random.randint(5,10)self.defense = random.randint(3,6)self.doge = random.randint(5,10)self.hp = random.randint(300,400)self.hpnow = self.hpself.mp = random.randint(280,320)self.mpnow = self.mpself.skills = []self.atkNum = 2self.grade = 1self.epvalue = 0# 展示人物信息def shows(self):print("等级为:",self.grade)print("距离下一次升级还有:",100-self.epvalue)print("血量为:",self.hpnow,"/",self.hp)print("蓝量为:",self.mpnow,"/",self.mp)print("攻击力为:",self.atack)print("防御力为:",self.defense)print("暴击率为:",self.critical)print("闪避率为:",self.doge)print("="*40)# 增加经验值,num为经验值数量def upgrade(self,num):gnum = num/100unum = int(gnum)epnum = 100%numif(unum < 1):if(num+self.epvalue<100):self.epvalue += numelse:print("upgrade!",self.grade,">",self.grade+1)if(self.gender == "男"):self.grade += 1self.hp += 45self.mp += 20self.atack += 10self.defense += random.randint(1,2)else:self.grade += 1self.hp += 35self.mp += 30self.atack += 5self.defense += 1self.mpnow = self.mpself.hpnow = self.hpself.epvalue = self.epvalue+num-100else:if(epnum+self.epvalue<100):print("upgrade!",self.grade,">",self.grade+unum)if(self.gender == "男"):for i in range(unum):self.grade += 1self.hp += 45self.mp += 20self.atack += 10self.defense += random.randint(1,2)else:for i in range(unum):self.grade += 1self.hp += 35self.mp += 30self.atack += 5self.defense += 1self.epvalue += epnumelse:print("upgrade!",self.grade,">",self.grade+unum+1)if(self.gender == "男"):for i in range(unum+1):self.grade += 1self.hp += 45self.mp += 20self.atack += 10self.defense += random.randint(1,2)else:for i in range(unum+1):self.grade += 1self.hp += 35self.mp += 30self.atack += 5self.defense += 1self.epvalue = self.epvalue+epnum-100self.mpnow = self.mpself.hpnow = self.hp# 怪物
class Monster:# 根据怪物的level生成对应的怪物def __init__(self,level,name="小怪007",isGod=0):self.atack = level * 10self.hp = level * 50self.grade = levelself.atkNum = 1self.ep = 10self.name = nameif(isGod == 1):self.atack *= 1.5self.hp *= 1.5self.grade = levelself.atkNum = 1self.ep = 25# 背包
class Backpack:def __init__(self):self.addhp = 5    #回血药剂self.addmp = 5   #回蓝药剂self.wapon = None #武器self.armor = None #盔甲def shows(self):print("回血药剂:",self.addhp)print("回蓝药剂:",self.addmp)print("="*40)# 装备
class Wapon:def __init__(self,level,isGod=0):self.atack = random.randint(8,10) * levelself.critical = 10if(isGod == 1):self.atack = random.randint(8,10) * level * 2self.critical = 20def shows(self):print("攻击力:",self.atack)print("暴击率:",self.critical)class Armor:def __init__(self,level,isGod=0):self.defense = 5+levelself.doge = 5self.hp = level * 50if(isGod == 1):self.defense = (5+level)*2self.doge = 10self.hp = level * 100def shows(self):print("血量:",self.hp)print("防御力:",self.defense)print("闪避率:",self.doge)# 楼层
class Floor:def __init__(self,level):self.level = levelself.treaProb = 5self.addProb = 10self.monProb = 100self.name = str(level) + "楼"# 人打怪兽
def hATKm(Humen,Monster):if(Humen.gender == "男"):mul = 1isCri = random.randint(0,100)if(isCri <= Humen.critical):mul = 2hATK = mul*(Humen.atack+random.randint(-5,5))Monster.hp -= hATKprint(Humen.name,"对怪兽",Monster.name,"造成了",hATK,"伤害")else:for i in range(2):mul = 1isCri = random.randint(0,100)if(isCri <= Humen.critical):mul = 2hATK = mul*(Humen.atack+random.randint(-5,5))Monster.hp -= hATKprint(Humen.name,"对",Monster.name,"造成了",hATK,"伤害")# 怪兽打人
def mATKh(Humen,Monster):isDoge = random.randint(0,100)if(isDoge <= Humen.doge):print(Monster.name,"的攻击被闪避了")else:mul = (250-Humen.defense)/250mATK = mul*Monster.atackHumen.hpnow -= mATKprint(Monster.name,"对",Humen.name,"造成了",mATK,"伤害")# 判断战斗双方血量都大于0
def allCan(Humen,Monster):if(Humen.hpnow <= 0):return Falseelif(Monster.hp <= 0):return Falseelse:return True# 战斗至一方死亡
def battle(Humen,Monster):# 战斗开始判断等级高低Hgrade = Humen.gradeMgrade = Monster.gradewhile(allCan(Humen,Monster)):if(Hgrade>=Mgrade):hATKm(Humen,Monster)Mgrade+=1else:mATKh(Humen,Monster)Hgrade+=1if(Humen.hpnow < 0):print("人物死亡!")print("="*40)return Falseelse:if(Humen.grade - Monster.grade >= 2):print("人物获胜! 但是等级超过该层怪物两级,不获得经验")return Trueelse:print("人物获胜!经验加",Monster.ep)Humen.upgrade(Monster.ep)return True

然后创建一个py文件封装人物和他的物品,我将其命名为prepare.py。这里面有一个显示装备的方法,其实应该放到classes.py里更加好看,但是写了很多了后面不好改就每改了qwq

import classes as claclass Pre:wanjia = cla.Humen("程汉博","男")backpack = cla.Backpack()flevel = 1def showEquip(self):wapon = self.backpack.waponarmor = self.backpack.armorif(wapon == None):print('-'*20)print("无武器")print('----------')else:print('-'*20)print('武器:')wapon.shows()print('----------')if(armor == None):print("无盔甲")print('-'*20)else:print("盔甲:")armor.shows()print('-'*20)

最后是一个测试类,我将其命名为test.py

import classes as cla
import prepare as pre
import random# 循环
def loop(Pre):print("下一步:1(探索) 2(查看) 3(下一层) 4(使用) 88(结束)")order = input()if(order == '88'):print("再见!")return Falseelif(order == '1'):floor = cla.Floor(Pre.flevel)print("第",floor.name)thisPro = random.randint(0,100)if(thisPro <= 5):waponPro = int(random.randint(1,10)/8)armorPro = int(random.randint(1,10)/8)wapon = cla.Wapon(Pre.flevel,waponPro)armor = cla.Armor(Pre.flevel,armorPro)print("找到装备! 1(查看) 2(装备武器) 3(装备盔甲) 88(退回上一级)")treaOrder = input()if(treaOrder == '1'):print("当前装备:")Pre.showEquip()print('-'*20)print("武器:")wapon.shows()print("-"*20)print("盔甲:")armor.shows()print("-"*20)print("是否装备? 2(装备武器) 3(装备盔甲) 88(不装备)")choise = input()if(choise == '2'):if(Pre.backpack.wapon != None):Pre.wanjia.atack -= Pre.backpack.wapon.atackPre.wanjia.critical -= Pre.backpack.wapon.criticalPre.backpack.wapon = waponPre.wanjia.atack += wapon.atackPre.wanjia.critical += wapon.criticalprint("="*40)loop(Pre)elif(choise == '3'):if(Pre.backpack.armor != None):Pre.wanjia.hp -= Pre.backpack.armor.hpif(Pre.wanjia.hp-Pre.wanjia.hpnow>=Pre.backpack.armor.hp):passelse:Pre.wanjia.hpnow = Pre.wanjia.hpPre.wanjia.defense -= Pre.backpack.armor.defensePre.wanjia.doge -= Pre.backpack.armor.dogePre.backpack.armor = armorPre.wanjia.hp += armor.hpPre.wanjia.hpnow += armor.hpPre.wanjia.defense += armor.defensePre.wanjia.doge += armor.dogeprint("="*40)loop(Pre)elif(choise == '88'):print("="*40)loop(Pre)else:print("请重新输入")choice = input()if(choice == '2'):Pre.backpack.wapon = waponprint("="*40)loop(Pre)elif(choice == '3'):Pre.backpack.armor = armorprint("="*40)loop(Pre)else:print("放弃了选择自动跳过")print("="*40)loop(Pre)elif(treaOrder == '2'):if(Pre.backpack.wapon != None):Pre.wanjia.atack -= Pre.backpack.wapon.atackPre.wanjia.critical -= Pre.backpack.wapon.criticalPre.backpack.wapon = waponPre.wanjia.atack += wapon.atackPre.wanjia.critical += wapon.criticalprint('='*40)loop(Pre)elif(treaOrder == '3'):if(Pre.backpack.armor != None):Pre.wanjia.hp -= Pre.backpack.armor.hpif(Pre.wanjia.hp-Pre.wanjia.hpnow>=Pre.backpack.armor.hp):passelse:Pre.wanjia.hpnow = Pre.wanjia.hpPre.wanjia.defense -= Pre.backpack.armor.defensePre.wanjia.doge -= Pre.backpack.armor.dogePre.backpack.armor = armorPre.wanjia.hp += armor.hpPre.wanjia.hpnow += armor.hpPre.wanjia.defense += armor.defensePre.wanjia.doge += armor.dogeprint('='*40)loop(Pre)elif(treaOrder == '88'):print("="*40)loop(Pre)else:print("输入错误自动放弃")print("="*40)loop(Pre)elif(thisPro <= 10):Pre.backpack.addhp += 1Pre.backpack.addmp += 1print("找到回血和回蓝药剂各一瓶!")print("="*40)loop(Pre)else:print("遭遇怪物")monPro = int(random.randint(0,10)/9)mon = cla.Monster(floor.level,"xdd",monPro)if(cla.battle(Pre.wanjia,mon)):print('='*40)loop(Pre)else:print("游戏结束")elif(order == '2'):askWhat(Pre)elif(order == '3'):if(Pre.wanjia.grade >= Pre.flevel):print("进入下一层")Pre.flevel += 1print("="*40)loop(Pre)else:print("玩家等级不够")loop(Pre)elif(order == '4'):useWhat(Pre)else:print("退出请输入88")print('='*40)loop(Pre)# 查询时调用
def askWhat(Pre):print("查询:1(人物状态) 2(背包) 3(装备) 88(退到上一级)")order = input()if(order == '1'):Pre.wanjia.shows()loop(Pre)elif(order == '2'):Pre.backpack.shows()loop(Pre)elif(order == '3'):Pre.showEquip()print("="*40)loop(Pre)elif(order == '88'):loop(Pre)# 使用时调用
def useWhat(Pre):print("使用:1(回血药剂) 2(回蓝药剂) 3(技能)")order = input()if(order == '1'):if(Pre.backpack.addhp == 0):print("药剂不够!")print("="*40)loop(Pre)else:if(Pre.wanjia.hpnow == Pre.wanjia.hp):print("人物血量是满的,不需要使用")print("="*40)loop(Pre)elif(Pre.wanjia.hpnow < Pre.wanjia.hp/2):Pre.backpack.addhp -= 1Pre.wanjia.hpnow += Pre.wanjia.hp/2print("回复了",Pre.wanjia.hp/2,"的血量  目前血量:",Pre.wanjia.hpnow,"/",Pre.wanjia.hp)print("="*40)loop(Pre)else:Pre.backpack.addhp -= 1Pre.wanjia.hpnow = Pre.wanjia.hpprint("人物血量恢复至满  目前血量:",Pre.wanjia.hpnow,"/",Pre.wanjia.hp)print("="*40)loop(Pre)elif(order == '2'):if(Pre.backpack.addmp == 0):print("药剂不够!")print("="*40)loop(Pre)else:if(Pre.wanjia.mpnow == Pre.wanjia.mp):print("人物蓝量是满的,不需要使用")print("="*40)loop(Pre)elif(Pre.wanjia.mpnow < Pre.wanjia.mp/2):Pre.backpack.addmp -= 1Pre.wanjia.mpnow += Pre.wanjia.mp/2print("回复了",Pre.wanjia.mp/2,"的蓝量  目前蓝量:",Pre.wanjia.mpnow,"/",Pre.wanjia.mp)print("="*40)loop(Pre)else:Pre.backpack.addmp -= 1Pre.wanjia.mpnow = Pre.wanjia.mpprint("人物蓝量恢复至满  目前蓝量:",Pre.wanjia.mpnow,"/",Pre.wanjia.mp)print("="*40)loop(Pre)# 使用技能elif(order == '3'):print("技能功能尚未增加")print("="*40)loop(Pre)else:print("输入有误,请重新输入")useWhat(Pre)prep = pre.Pre()
loop(prep)

因为这段逻辑是我在测试classes类的时候写的,写这写着就写成了方法,也没有放到classes.py里面去了,所以显得很臃肿,估计过两天我也看不懂了。。。

Python制作简单的终端交互小游戏相关推荐

  1. Py之tkinter:python最简单的猜字小游戏带你进入python的GUI世界

    Py之tkinter:python最简单的猜字小游戏带你进入python的GUI世界 目录 输出结果 设计思路 输出结果 设计思路 from tkinter import * import tkint ...

  2. 基于Python制作的消消乐小游戏

    导语 哈喽,好久不见.消失人口上线更新一波每月必出的 python 制作小游戏系列文章.本期我们将制作一个消消乐小游戏,让我们愉快地开始吧 开发工具 Python 版本:3.6.4 相关模块: pyg ...

  3. 利用Python制作一个发红包的小游戏

    本系统的内容是综合应用python程序设计的知识,实际并实现了一款简单发红包的小游戏,具体功能如下: (1)拼手气红包:随机金额 (2)普通红包:能够通过输入的红包人数与红包金额实现平均分配 (3)专 ...

  4. python超简单小游戏代码-Python实现简单的猜单词小游戏

    本文实例为大家分享了Python实现猜单词小游戏的具体代码,供大家参考,具体内容如下 思路 1.一个words列表里存放若干的单词,例如:["extends", "pri ...

  5. 可怜的博主跟小豆人杠起来啦!Python制作的吃豆人小游戏,快来围观!!

    相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 对了大家可以关注小编的公众号哟~~ Python日志 开发环境 Python版本:3.6.4 相关模块: pygame模块: 以及一些P ...

  6. 【C#】制作简单的飞行棋小游戏

    飞行棋双人小游戏 目标:实现飞行棋游戏基础功能 玩家在地图触发道具: 获得道具,可以进行一次选择 1–交换位置 2–让对方退随机格子 踩到炸弹,让对方暂停一回合 乘上了飞机,前进10格 进入隧道,将随 ...

  7. 使用Python制作个消灭病毒的小游戏吧(教程含源码)

    近年来,电子游戏有了很大的发展.大约十年前,(那时我还不知道自己的名字怎么拼)我最喜欢的手机游戏是"space-impact":我曾经在诺基亚的手机上玩过. 这很容易,也很有趣! ...

  8. 用python实现简单的飞机大战小游戏

    1.下载一个包 PySide2-5.15.2.1-5.15.2-cp35.cp36.cp37.cp38.cp39.cp310-none-win_amd64 如果下载错误,就先下载shiboken2-5 ...

  9. python实现简单的对战小游戏(王者荣耀简化版)

    直接上代码: '' 游戏 1.选择人物 2.购买武器 金币 3.打仗 赢 得金币 4.选择删除武器 5.查看游戏 6.退出游戏 ''' import random print('*'*40) prin ...

最新文章

  1. 使用LitePal操作数据库(CRUD增删改查) 项目已上传GitHub
  2. C/Cpp / STL / vector 的 erase 会造成当前位置和之后的迭代器失效的疑问
  3. C和C++实务精选丛书
  4. python常用内置方法_Python3 常用的几个内置方法
  5. android jni示例_Android动画示例
  6. 多个线程交替打印ABC,打印10次
  7. Java的keytool命令
  8. 【iOS与EV3混合机器人编程系列之一】iOS要干嘛?EV3可以更酷!
  9. [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
  10. 【Java基础】Java网络编程基础
  11. c语言两矩阵相乘算法,用c语言实现两个矩阵相乘怎么做?
  12. .强力卸载或者删除文件
  13. PeopleSoft
  14. 4G LTE浪潮何时席卷全球?
  15. 鏖战双十一:阿里直播平台面临的技术挑战
  16. 25.JavaScript的Symbol类型、隐藏属性、全局注册表
  17. 1.4 Kronecker积
  18. oracle无法打开12560
  19. 聚观早报 | 恒大汽车或将被并购;比亚迪今年将进入丹麦市场
  20. 各类指数数据(商品价格指数、消费者价格指数和企业景气及信心指数)

热门文章

  1. 高考计算机会考等级划分标准,高中会考评分等级标准
  2. 【如何系统的学习it技术】
  3. USB线上/串口/I2C引脚串联电阻的作用
  4. 掘金开发者大会 ∙ 微信小程序专场正式启动|文末有福利
  5. 【实用教程】教你制作好看的论文区位图
  6. 【选词填空-分析上下文对应关系】
  7. shader实现雪地中的脚印
  8. Webstorm安装及使用
  9. 2021精选 Java面试题附答案 1-10
  10. 《反恐24小时》第6季的预告片出来了