Python实训 姓名大作战

文档介绍:
原创人:蒲成伟
发表目的:保存代码,作为以后的借鉴模型,以防数据丢失。
提示:网友可以借鉴,可以提意见,有更好的修改方案本人一定改正

实训要求

三、实验内容
姓名大作战小游戏设计和开发要求:
(1)输入两个人的姓和名。
(2)分别根据两个人的姓和名计算他们的攻击力、防御力、生命值。
提示:姓的编码为攻击力、名的编码为防御力、姓名的编码为生命值
思考:复姓、两个字的名,攻击力和防御力如何设定?
(3)开始游戏,记录两人的战斗过程和战斗结果,直到某一方的生命值为0或负数。
提示:
·战斗过程:轮流攻防
·每次攻防之后计算并显示攻击结果,攻击效果要结合双方的攻击力和防御力来设计(思考:攻击效果如何判定?)

进阶要求:
1、战斗前可以随机给双方提供武器或防具
2、战斗前可以随机给双方赋予特殊技能
3、可以在战斗时设计暴击,设计随机事件
4、战斗过程不是由计算机控制,每次攻击由游戏者来操纵
其他特别要求:
变量名、类名都要以“姓的全拼和名字的声母作为前缀”,例如学生张三的类名叫Player,那么张三实际的类名叫“ZhangsPlayer”

代码截图

main.py:

from NameAttack import Pusplayers
from NameAttack import Pusjudge
import random
import timedef readey_player1():     #系统做玩家一做战斗前的准备工作(询问需要使用哪个技能)print("请" + player1.quanming + "选择你要使用的技能")print("你可以选择的技能是:" + player1_skill_choosed[0], player1_skill_choosed[1], player1_skill_choosed[2])result=islegal_choice(input("技能:"), player1_skill_choosed)return result  # 返回玩家选择的技能编号,给打斗函数告知需使用哪个技能的数据def readey_player2():     #系统做玩家一做战斗前的准备工作(询问需要使用哪个技能)print("请" + player2.quanming + "选择你要使用的技能")time.sleep(0.5)print("你可以选择的技能是:" + player2_skill_choosed[0], player2_skill_choosed[1], player2_skill_choosed[2])time.sleep(0.5)result=islegal_choice(input("技能:"), player2_skill_choosed)return result#玩家的攻击前系统做的准备#玩家的攻击前系统做的准备
def islegal_choice(num,option):flg="技能指令有误,输入的技能不存在,你将失去本次攻击机会"flg2="技能指令有误,输入的技能不属于你,你将失去本次攻击机会"while(0<int(num)<7):for i in range(len(option)):if num == option[i]:time.sleep(0.5)print("你选择了技能:"+num+" :"+str(Judger.skill[int(num)-1][1]))flg=numreturn flg    #判断技能是否合法,符合哪个技能,如不属于任何一个技能就告知玩家数据有误,并对战斗数值不做变更print(flg2)return 6print(flg)return 6#判断输入的是否合法
def numerical_variation(index, attacker, Defenser):#已经确认了技能了,无需再判断是否合法,开始攻击print("接收到的技能数值:" + str(index))time.sleep(0.5)index=int(index)-1print("为保障游戏公平,玩家每局攻击力减:2000点")time.sleep(0.5)attacker.Exocet -=2000     #由于攻击力可以叠加,每局给玩家削减一部分攻击力attacker.Exocet = attacker.Exocet + (Judger.skill[index])[2]         #技能可以对玩家有增益的效果,先加上增益的数值再参与战斗attacker.blood = attacker.blood + (Judger.skill[index])[6]attacker.Defense = attacker.Defense + (Judger.skill[index])[4]attacker.baoji = attacker.baoji + (Judger.skill[index])[3]attacker.shanbi =(Judger.skill[index])[5]print(attacker.quanming +"生命值:" + str(attacker.blood) +"增加(" + str((Judger.skill[index])[6]) + ")  " +"攻击力:" + str(attacker.Exocet) + "增加(" + str((Judger.skill[index])[2]) + ")  " +"暴击率:" + str(attacker.baoji) + "增加(" + str((Judger.skill[index])[3]) + ")  " +"闪避几率:" + str(attacker.shanbi) + "增加(" + str((Judger.skill[index])[5]) + ")  " +"防御力:" + str(attacker.Defense) +"增加(" + str((Judger.skill[index])[4]) + ")")     # 玩家选择技能后对各属性进行加成time.sleep(0.5)suijishu = random.randint(0, 100)     #生成随机数,如果随机数<玩家的闪避概率,判定本次攻击无效if suijishu <= Defenser.shanbi:#加成成功后开始攻击对手,先判断对方是否可以闪避攻击print(Defenser.quanming + "闪避了来自" + attacker.quanming + "的攻击")time.sleep(0.5)return 0else:if Defenser.Defense > attacker.Exocet * attacker.baoji:      #如果护甲可以完全抵挡本次攻击。那么血量等其他参数不变,在护甲数值上减去本次攻击数值即可(护甲值-=攻击者攻击值)Defenser.Defense -= attacker.Exocet * attacker.baojiprint(Defenser.quanming +"生命值:" + str(Defenser.blood) + "(受到 0 " "点伤害)" +"攻击力:" + str(Defenser.Exocet) +"暴击率:" + str(Defenser.baoji) +"闪避几率:" + str(Defenser.shanbi) +"防御力:" + str(Defenser.Defense) + "(损失" + str(attacker.Exocet * attacker.baoji) + "点护甲)")time.sleep(0.5)else:Defenser.blood -= attacker.Exocet * attacker.baoji      #如果护甲值不足以抵挡本次攻击,   Blood-=攻击者攻击值,然后  blood+=护甲残值,最后把护甲值赋值为0;Defenser.blood += Defenser.DefenseDefenser.Defense = 0print(Defenser.quanming +"生命值:" + str(Defenser.blood) + "(受到" + str(attacker.Exocet * attacker.baoji) + "点伤害)" +"攻击力:" + str(Defenser.Exocet) +"暴击率:" + str(Defenser.baoji) +"闪避几率:" + str(Defenser.shanbi) +"防御力:" + str(Defenser.Defense) + "(损失 0 点护甲)")time.sleep(2)if __name__ == '__main__':print("-----------------------------------------------------------------------------")print("-----------------------------欢迎来到姓名大作战-------------------------------")print("-----------------------------------------------------------------------------")player1 = Pusplayers.player()player2 = Pusplayers.player()      #实例化两个对象Judger=Pusjudge.caipan()      #创建裁判对象player1_skill_choosed = Judger.choose_Skill(player1.quanming)player2_skill_choosed = Judger.choose_Skill(player2.quanming)      #玩家开始选择技能Rounds=1     #定义回合数while player1.blood>=0 and player2.blood>=0:     #当满足两个玩家的Blood都>=0时,执行战斗,否则结束战斗print("     ")print("     ")print("     ")print("     ")print("     ")print("---------------------------第 "+str(Rounds)+" 回合开始---------------------------")if Rounds==1:       #第一回合需判定谁先开始Attacker = Judger.which_first(player1.quanming, player2.quanming)    #传入两个玩家的名字,开始随机选择并返回攻击者的姓名if Attacker==player1.quanming:numerical_variation(readey_player1(), player1, player2)      #开始战斗,使用函数  readey_player1 执行玩家1的战斗准备工作,再讲执行结果(选择的技能编号)作为参数传递给 numerical_variation 进行战斗数据变更Rounds+=1    #回合数加一xianshouwanjia =1   #记录是谁先动手的else:numerical_variation(readey_player2(), player2, player1)      #开始战斗,使用函数  readey_player2 执行玩家1的战斗准备工作,再讲执行结果(选择的技能编号)作为参数传递给 numerical_variation 进行战斗数据变更Rounds += 1  # 回合数加一xianshouwanjia = 2  # 记录是谁先动手的else:if xianshouwanjia == 2:    #如果不是第一局,判断谁先动的手if Rounds%2==0:#如果是玩家2先动手,则偶数局都为玩家二攻击,反之玩家一攻击numerical_variation(readey_player2(), player2, player1)Rounds += 1else :numerical_variation(readey_player1(), player1, player2)Rounds += 1else :if Rounds%2==0:numerical_variation(readey_player1(), player1, player2)Rounds += 1else :numerical_variation(readey_player2(), player2, player1)Rounds += 1if player1.blood<=0:print(player2.quanming+"终于战胜了"+player1.quanming)else:print(player1.quanming + "终于战胜了" + player2.quanming)   #判定谁的血量<=0print("--------游戏结束,将会在5秒后退出--------")print("制作人:蒲成伟")time.sleep(5)

Pusplayer:

class player:xing = Noneming = Nonequanming=Noneblood=NoneExocet=NoneDefense=Nonebaoji=0shanbi=0def __init__(self):self.xing = input("请输入你的姓:")self.ming = input("请输入你的名:")for i in range(len(self.xing)):self.Exocet = ord(self.xing[i])for j in range(len(self.ming)):self.Defense = ord(self.ming[j])self.blood = self.Exocet + self.Defenseself.quanming=self.xing+self.mingself.Exocet/=7self.Exocet=round(self.Exocet,2)print('{} 的血量为:{} 攻击力:{} 防御力: {}'.format(self.xing + self.ming, self.blood, self.Exocet, self.Defense))

Pusjudge.py

from NameAttack import Pusplayers
from NameAttack import main
import random
import timeclass caipan(Pusplayers.player):Skill_1=NoneSkill_2=NoneSkill_3 = NoneSkill_4 = NoneSkill_5 = NoneSkill_6 = Noneskill_1_message = [1, "雷霆半月斩", 3000, 1.2, 1300, 10, 1000]     #将技能的参数都储存在数组中,方便程序调用skill_2_message = [2,"九天雷霆山脚蹬",1500,1.1,900,40,2000]skill_3_message = [3, "万象重生", 700, 1.1, 2300, 20, 6000]skill_4_message = [4, "反伤刺甲", 2000, 1.15, 300, 32, 3000]skill_5_message = [5, "火烧赤壁", 3500, 1, 0, 20, -1000]skill_6_message = [6, "铁索连环", 200, 1, 200, 10, 500]ERRor_message=[7,1,1,1,1,1,1]skill=[skill_1_message,skill_2_message,skill_3_message,skill_4_message,skill_5_message,skill_6_message,ERRor_message]def __init__(self):print("游戏载入中...")time.sleep(2)self.Skill_1 = "            |       技能代号: 1 ,技能: 雷霆月斩, 伤害: 3000, 暴击率: 1.2,  防御增益: 1300, 闪避增益: 10, 血量回复:1000,  技能简介:大刀之下,寸草不生        |"self.Skill_2 = "            |       技能代号: 2 ,技能: 九天雷霆, 伤害: 1500, 暴击率: 1.13, 防御增益: 900,  闪避增益: 40, 血量回复:2000,  技能简介:三十六计走为上策          |"self.Skill_3 = "            |       技能代号: 3 ,技能: 万象重生, 伤害: 700,  暴击率: 1.05, 防御增益: 2300, 闪避增益: 20, 血量回复:6000,  技能简介:稳住,待我回口血          |"self.Skill_4 = "            |       技能代号: 4 ,技能: 反伤刺甲, 伤害: 2000, 暴击率: 1.5,  防御增益: 300,  闪避增益: 32, 血量回复:3000,  技能简介:伤害转移。                |"self.Skill_5 = "            |       技能代号: 5 ,技能: 火烧赤壁, 伤害: 5000, 暴击率: 1,    防御增益: 0     闪避增益: 0,  血量回复:-1000, 技能简介:火焰攻击,真实伤害        |"self.Skill_6 = "            |       技能代号: 6 ,技能: 铁索连环, 伤害: 200,  暴击率: 1,    防御增益: 200,  闪避增益: 10, 血量回复:500,   技能简介:杀敌一千,自损八百        |"self.Skill_7 = "            |       技能代号: 7 ,技能: 错误代码, 伤害: 0,    暴击率: 1,    防御增益: 0,    闪避增益: 0,  血量回复: 0,    技能简介:后备代码,输入不符时调用  |"print("——————————————————————————————————————————————————————————————————————————————————————")print(str(self.Skill_1))print(str(self.Skill_2))print(str(self.Skill_3))print(str(self.Skill_4))print(str(self.Skill_5))print(str(self.Skill_6))print("——————————————————————————————————————————————————————————————————————————————————————")def choose_Skill(self,name):              #让玩家选择技能player_skill1 = input(name + "请选择你的第一个技能(技能代号):")player_skill2 = input(name + "请选择你的第二个技能:")player_skill3 = input(name + "请选择你的第三个技能:")player_skill_choosed=[player_skill1,player_skill2,player_skill3]print("你选择的技能:"+str(player_skill_choosed))return player_skill_chooseddef which_first(self,player1_quanming,player2_quanming):      #随机选择哪个玩家先手a = random.randint(0, 1)if a == 0:print("经系统随机选择" + player1_quanming + "先出手")return player1_quanmingelse:print("经系统随机选择" + player2_quanming + "先出手")return player2_quanming

程序运行截图:



Python实训 姓名大作战相关推荐

  1. Python实训 姓名大作战进阶版(封装,继承)

    简介: 发表人:蒲成伟 发表时间:2020-5-15 发表目的:保存代码以便后期查询,可以参考,严禁抄袭.... 题目要求: 实验内容 在上一实验"姓名大作战小游戏设计开发"的基础 ...

  2. Python实训day14pm【Python网络爬虫综合大作业-参考解析】

    Python实训-15天-博客汇总表 题目:天气数据的爬取和统计 大作业题目思路引导:定时爬取每个地级市的实时天气状况.存入excel中.为每个城市生成html展示.历史excel文件以每日为单位归档 ...

  3. Python实训day13am【Python网络爬虫综合大作业PPT】

    Python实训-15天-博客汇总表   今天上午大家抓紧时间继续完成实训报告和PPT,有问题我会在群里跟大家说明, 暂时不用上线直播了. 实训结束后,我会在博客上发布网络爬虫综合大作业题目及解析.

  4. Python实训day12am【网络爬虫大作业简略解析:动态生成html页面、数据写入Excel】

    Python实训-15天-博客汇总表 目录 1.HTML页面设计 2.生成每个城市的HTML页面 2.1.HTML页面代码(weatherTemplate.html) 2.2.实例代码-动态生成htm ...

  5. Python实训day11pm【大作业简略解析】

    Python实训-15天-博客汇总表 目录 1.课堂笔记 2.群消息 3.代码 3.1.demo1 3.2.demo2 1.课堂笔记 大作业题目思路引导: 题目1:定时爬取每个地级市的实时天气状况.存 ...

  6. Python实训day14am【Python网络爬虫综合大作业-答辩】

    Python实训-15天-博客汇总表 实训总结: 由浅入深的了解了python语言应用: 编写了很多案例,完成了发作业,提升了编程思路和能力: 了解了行业现状,认识到企业对人才的要求,去除焦虑,对后续 ...

  7. Python实训day11am【大作业思路梳理】

    Python实训-15天-博客汇总表 定时任务:定时任务框架APScheduler学习详解 - 小学弟- - 博客园

  8. Python实训day10am【Python中的地址引用、os模块】

    Python实训-15天-博客汇总表 目录 1.Python中的地址引用 2.os模块(操作系统模块) 2.1.os案例1 2.2.os案例2 2.3.os案例3 2.4.os案例4 2.5.os案例 ...

  9. Python实训day09pm【Python处理Excel实际应用】

    Python实训-15天-博客汇总表 目录 1.实训分组 2.练习题 2.1.课堂练习1 2.2.课堂练习2 1.实训分组 4人一组,完成实训大作业和实训报告. 每组只提交一份大作业 和 一份实训报告 ...

最新文章

  1. python窗体开发环境_Python窗口开发环境boa-constructor教程2:创建状态栏:
  2. sublime php 乱码,sublime打开TXT文件乱码的问题
  3. python 的日志logging模块学习
  4. 链表和顺序表的一些区别
  5. java 读取jar包中的文件
  6. CentOS7安装Python3.4 ,让Python2和3共存
  7. 40种网站设计常用技巧
  8. python中列表生成式strip_python之列表生成式
  9. 消息通知系统模型设计
  10. 把计算机怎么连接手机的网络助手在哪里,手机连接电脑上网,详细教您手机如何连接电脑上网...
  11. newifimini出厂固件_newifi mini固件
  12. 蓝桥杯官网练习系统入门训练(一)
  13. 年终盘点丨2021边缘计算大事记
  14. 三星手机性能测试软件,三星Galaxy S III性能速测:一个字“快”
  15. 1.0 Android基础入门教程
  16. BG2RHE - 树莓派安装官网新版ArduinoIDE
  17. JVM调优案例详解及面试题
  18. 解决安装Ubuntu系统卡在载入界面,显示正在安装open vm tools
  19. C++的future,promise,packaged_task
  20. Salesforce WhatsApp 集成

热门文章

  1. 文件上传 java 进度条_Java如何实现动态显示文件上传进度条
  2. 从github上下载的vue项目如何运行
  3. 【转载】Java定时器的cron设置详解
  4. 修改注册表禁用USB接口
  5. python parse函数_Python3的urllib.parse常用函数小结
  6. 赫夫曼树的经典应用——赫夫曼编码解码
  7. 百度搜索中台新一代内容架构:FaaS化和智能化实战
  8. MySQL - 数据库的监控方式
  9. Web流程、Web服务器软件、Servlet
  10. 教你从技术上程序员不愁无线如何操作