鱼C论坛

 找回密码
 立即注册
查看: 5263|回复: 15

[作品展示] 一个简单的孙悟空斗牛魔王的文字游戏

[复制链接]
发表于 2018-4-5 14:22:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 重庆帅哥Moses 于 2018-4-5 14:24 编辑
  1. import random
  2. # 武器类
  3. class Weapon:
  4.     def __init__(self, name="武器", damage=50):
  5.         self.__name = name
  6.         self.__damage = damage

  7.     def getName(self):
  8.         return self.__name

  9.     def getDamage(self):
  10.         return self.__damage

  11.     def setName(self, name):
  12.         self.__name = name

  13.     def setDamage(self, damage):
  14.         self.__damage = damage
  15. # 装备类
  16. class Equip:
  17.     def __init__(self, name, defense):
  18.         self.__name = name
  19.         self.__defense = defense

  20.     def getName(self):
  21.         return self.__name

  22.     def getDefense(self):
  23.         return self.__defense

  24.     def setName(self, name):
  25.         self.__name = name

  26.     def setDefense(self, defense):
  27.         self.__defense = defense


  28. # 角色类
  29. class Role:


  30.     # 带参构造方法
  31.     def __init__(self, name, health, damage):
  32.         self.__pos = random.randint(0, 100)
  33.         self.__name = name
  34.         self.__health = health
  35.         self.__damage = damage
  36.     # 设置位置、名字、血量、伤害及查看信息
  37.     def getPos(self):
  38.         return self.__pos

  39.     def getName(self):
  40.         return self.__name

  41.     def getHealth(self):
  42.         return self.__health

  43.     def getDamage(self):
  44.         return self.__damage

  45.     def setPos(self, pos):
  46.         self.__pos = pos

  47.     def setName(self, name):
  48.         self.__name = name

  49.     def setHealth(self, health):
  50.         self.__health = health

  51.     def setDamage(self, damage):
  52.         self.__damage = damage

  53.     def getWeapon(self, w):
  54.         self.__damage += w.getDamage()
  55.         print("%s使用武器:%s\t伤害变为:%d" % (self.__name, w.getName(), self.__damage))

  56.     def getEquip(self, e):
  57.         self.__health += e.getDefense()
  58.         print("%s穿上装备:%s\t血量变为:%d" % (self.__name, e.getName(), self.__health))
  59. # 动作类
  60. class Action:
  61.     def move(self, r, stepLength):
  62.         r.setPos(r.getPos() + stepLength)
  63.         print("%s向前移动了%d的距离,当前位置为:%d" % (r.getName(), stepLength, r.getPos()))

  64.     def fight(self, a, b):
  65.         b.setHealth(b.getHealth() - a.getDamage())
  66.         print("%s向%s发起了进攻    %s血量-%d,剩余血量:%d" % (a.getName(), b.getName(), b.getName(), a.getDamage(), b.getHealth()))


  67. # 生成角色、武器、装备、动作对象
  68. monkey = Role("孙悟空", 1000, 60)
  69. ox = Role("牛魔王", 5000, 30)
  70. monkeyWeapen = Weapon("如意金箍棒", 600)
  71. oxWeapen = Weapon("混铁棍", 300)
  72. headEquip = Equip("凤尾紫金冠", 600)
  73. bodyEquip = Equip("锁子黄金甲", 1000)
  74. footEquip = Equip("藕丝步云鞋", 400)
  75. action = Action()

  76. print("无可奈何的至尊宝最后戴上了金箍\n失去了他最爱的人他成为了最强\n英雄归来,悟空展开了与牛魔王的绝世之战")
  77. print("场景:夜晚小镇")

  78. # 牛魔王穿武器装备
  79. ox.getWeapon(oxWeapen)
  80. ox.getEquip(headEquip)
  81. ox.getEquip(bodyEquip)
  82. ox.getEquip(footEquip)

  83. # 回合计算器
  84. count = 1
  85. while True:
  86.     print("\n第" + str(count) + "回合!")
  87.     count += 1
  88.     if abs(ox.getPos() - monkey.getPos()) <= 15:
  89.         print("进入攻击范围!")
  90.     print("输入ls查看当前距离及信息\n输入move进行移动\n输入arm穿武器及装备\n输入a进行攻击")
  91.     option = input("\n请输入选项:")
  92.     if option == "ls":
  93.         print("\n角色名\t血量\t离对手距离\t攻击伤害")
  94.         print("%s\t%d\t\t%d\t\t   %d" % (
  95.         monkey.getName(), monkey.getHealth(), (monkey.getPos() - ox.getPos()), monkey.getDamage()))
  96.     elif option == "move":
  97.         stepLength = int(input("\n请输入移动的距离,可以为负:"))
  98.         action.move(monkey, stepLength)
  99.     elif option == "arm":
  100.         # 孙悟空穿武器装备
  101.         monkey.getWeapon(monkeyWeapen)
  102.         monkey.getEquip(headEquip)
  103.         monkey.getEquip(bodyEquip)
  104.         monkey.getEquip(footEquip)
  105.     elif option == "a":
  106.         if abs(ox.getPos() - monkey.getPos()) <= 15:
  107.             action.fight(monkey, ox)
  108.             action.fight(ox, monkey)
  109.         else:
  110.             print("超出攻击距离")
  111.     else:
  112.         print("输入错误!")

  113.     if monkey.getHealth() <= 0 and ox.getHealth() > 0:
  114.         print("\n牛魔王战胜了孙悟空\n牛魔王:西天势力就如同天庭一样将自己奉为神灵,却从未考虑过人间疾苦")
  115.         print("牛魔王:千百年来,我们苦心修炼,探寻着生命的最终奥秘,成果却被他们窃取;我挚亲挚信的兄弟,一个个却被他们蒙骗,现在来与我反戈")
  116.         print("扛起伤痕累累的悟空,牛魔王说道:这一次,我们不再被动挨打,这一次,我们主动出击,兽人永不为奴!")
  117.         break
  118.     elif monkey.getHealth() > 0 and ox.getHealth() <= 0:
  119.         print("\n孙悟空战胜了牛魔王")
  120.         print("悟空护送唐僧,穿过古镇门口,踏上了西天取经之路。。。")
  121.         print("古镇城门上,经过一番决斗的至尊宝最终抱起紫霞仙子,开心的笑着")
  122.         print("而紫霞仙子,看着穿个城门的悟空喃喃道:你看那个人好像一条狗!。。。。。。")
  123.         print("苦海 泛起爱恨\r\n" + "在世间 难逃避命运\r\n" + "相亲 竟不可接近\r\n" + "或我应该相信是缘分")
  124.         break
  125.     elif monkey.getHealth() == 0 and ox.getHealth() == 0:
  126.         print("\n本是同根生,相煎何太急...观世音在远远的云端喃喃道\n观世音:报告佛祖任务完成,孙悟空和牛魔王在我的挑拨下已经相杀而亡,距离我教一通中原指日可待")
  127.         break

  128. print("游戏结束!")
复制代码

评分

参与人数 1鱼币 +5 收起 理由
膜法记者 + 5 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-4-8 08:56:36 | 显示全部楼层
晓屁屁 发表于 2018-4-7 20:51
牛牛牛666
楼主太强了

我很也很菜的,一起努力哟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 20:51:51 | 显示全部楼层
牛牛牛666
楼主太强了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-7 18:29:36 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-7 17:32:55 | 显示全部楼层
JAY饭 发表于 2018-4-6 23:08
我个人觉得啊,改成动画版原理很简单,回合中随机发技能,总回合限定次数,找几张符合技能特效的图片,比如 ...

大神666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 23:08:37 | 显示全部楼层
我个人觉得啊,改成动画版原理很简单,回合中随机发技能,总回合限定次数,找几张符合技能特效的图片,比如金箍棒翻转,就用image模块复制几张不同角度的金箍棒png图片,什么气功炮更简单,一个带尾巴的球,然后在循环中位移前进就好,碰到了敌方就将技能效果清除,减少血条,此过程中,敌方单位可以随机选择闪避移动,单回合结束时,换另一方攻击,一旦血条长度为零,结束定输赢。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 22:55:49 | 显示全部楼层
JAY饭 发表于 2018-4-6 22:50
正好没事我帮你改成大乱斗版吧,取消攻击距离,改为普攻和技能的回合对A,然后弄个画面

算了,我不夸口了,刚搜了半天,图片太难找了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 22:50:56 | 显示全部楼层
正好没事我帮你改成大乱斗版吧,取消攻击距离,改为普攻和技能的回合对A,然后弄个画面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 15:38:32 | 显示全部楼层
新手·ing 发表于 2018-4-6 13:02
不是,就是我可以一直穿衣服加血,然后牛魔王一下被打死了。

666
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-6 13:02:54 | 显示全部楼层
重庆帅哥Moses 发表于 2018-4-6 10:07
是的,我才学没多久

不是,就是我可以一直穿衣服加血,然后牛魔王一下被打死了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 10:10:29 | 显示全部楼层
tsembrace 发表于 2018-4-5 16:18
不错不错就是攻击为何总是超出距离呢?距离都为0了还是不行

没有啊,距离在范围内会给你提示的,可以攻击啊,你是不是改代码了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 10:08:12 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-6 10:07:08 | 显示全部楼层

是的,我才学没多久
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 16:18:25 | 显示全部楼层
不错不错就是攻击为何总是超出距离呢?距离都为0了还是不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 15:12:55 | 显示全部楼层
好蛋疼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 14:39:18 | 显示全部楼层
还不错~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 20:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表