第二周Python如期而至##

——分享我的心得及不懂的地方(望看到的大佬能帮忙解决一下)
Project:超级玛丽woroshop

  1. 这周我们接着上周对代码进行完善
  2. 这次敲的代码相对上周而言比较多
    下面是代码
南昌理工学院人工智能学院 深度学习workshop兴趣小组
Project:超级玛丽woroshop第二周
#游戏地图"""
#引入time库
import time
#引入随机相关函数
import random# 与学姐的台词
SCRIPT_NPC_SCHOOL_SISTER = ['你好!','你好!','你是新生吗?','是的','想要我教你魔法吗?','\n1、好的 \\n2、不用了吧,我不和学姐学魔法!\n']# 世界里的魔法清单
MAGIC_BOOKS = [['火魔法', 1],['水魔法', 2],['土魔法', 0.5]
]class Body:  # 人物类NAME = ''  # 名字HP = 0  # 血量MAX_HP = 0  # 最大血量MP = 0  # 魔法值MAX_MP = 0  # 最大魔法值ATTACK = 1MAGIC_ATTACK = 1.3HAS_MAGIC = []  # 会的魔法POS_NAME = '南昌理工学院南大门'  # 地点def __init__(self, NAME_='Ice NPC', HP_=3, MP_=3, MAX_HP_=3, MAX_MP_=3, ATTACK_=1, MAGIC_ATTACK_=1.3, HAS_MAGIC_=[],POS_NAME_='南昌理工学院南大门'):# 初始化 默认值self.NAME = NAME_self.HP = HP_self.MP = MP_self.MAX_HP = MAX_HP_self.MAX_MP = MAX_MP_self.ATTACK = ATTACK_self.MAGIC_ATTACK = MAGIC_ATTACK_self.POS_NAME = POS_NAME_self.HAS_MAGIC = HAS_MAGIC_def display_status(self):  # 显示人物状态print('\n\r', '    状态:' + self.NAME, end='')print('\n血量:' + '❤' * int(self.HP), '\n  魔法值:' + '⚓' * int(self.MP))print('地点:' + self.POS_NAME)if self.HAS_MAGIC == []:print('无魔法')else:self.display_magic()def display_status_fighting(self):print('\n\r', '    状态:' + self.NAME, end='')print('\n血量:' + '❤' * int(self.HP), '  魔法值:' + '⚓' * int(self.MP))def display_magic(self):  # 显示魔法print(self.NAME + '会如下几种魔法:')print('魔法名 ,消耗点数')i = 0for iMagic in self.HAS_MAGIC:print('第', i, '个魔法:', MAGIC_BOOKS[iMagic])i = i + 1def talk_to(self, NPC_, NPC_SCRIPT_, delay=0.3):# 按剧本和NPC聊天print('在' + self.POS_NAME + '遇到 ' + NPC_.NAME)for i in range(len(NPC_SCRIPT_)):if i % 2 == 1:  # 判断当前说话的人TURN = self.NAMEelse:TURN = NPC_.NAMEprint(TURN + ':' + NPC_SCRIPT_[i])time.sleep(delay)def learn_magic_from(self, NPC_):# 向NPC学习魔法NPC_.display_magic()CHOOSE = input('是否向' + NPC_.NAME + '学魔法?(输入:1/2/no)')if CHOOSE == '1':print('恭喜' + self.NAME + '学会' + MAGIC_BOOKS[NPC_.HAS_MAGIC[0]][0] +',每次使用消耗' + str(MAGIC_BOOKS[NPC_.HAS_MAGIC[0]][1]) + 'MP.')self.HAS_MAGIC = self.HAS_MAGIC + [NPC_.HAS_MAGIC[0]]self.display_magic()elif CHOOSE == '2':print('恭喜' + self.NAME + '学会' + MAGIC_BOOKS[NPC_.HAS_MAGIC[1]][0] +',每次使用消耗' + str(MAGIC_BOOKS[NPC_.HAS_MAGIC[1]][1]) + 'MP.')self.HAS_MAGIC = self.HAS_MAGIC + [NPC_.HAS_MAGIC[1]]self.display_magic()elif CHOOSE == 'no':print('由于你的固执,没有学习新的魔法.')else:print('不明白你说什么.')def attack_one_time(self, NPC_, iChoose_magic_=-1):  # 攻击一下NPCif iChoose_magic_ == -2:self.display_status()elif iChoose_magic_ == -1:NPC_.HP = NPC_.HP - self.ATTACKprint('【', self.NAME + '击剑攻击' + NPC_.NAME, '造成了' + str(self.ATTACK), '点攻击】')elif iChoose_magic_ in self.HAS_MAGIC:# print(iChoose_magic_)hit = self.MAGIC_ATTACK * MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][1]# print('hit:',hit,',',self.MAGIC_ATTACK,',',self.HAS_MAGIC[iChoose_magic_])NPC_.HP = NPC_.HP - hit  # 魔法伤害=魔法消耗*魔法攻击力NPC_.MP = NPC_.MP - self.HAS_MAGIC[iChoose_magic_]print('【', self.NAME + '用魔法' + MAGIC_BOOKS[self.HAS_MAGIC[iChoose_magic_]][0] + ',攻击了' + NPC_.NAME + ',','造成了' + str(hit) + '点攻击!】')if NPC_.HP <= 0:return 1else:return 0def fight_with(self, NPC_):# 挑战NPCprint('【', self.NAME + '开始和' + NPC_.NAME + '战斗! !', '】')MAX_ROUND = 100IS_DEAD = 0for ROUND in range(MAX_ROUND):if (ROUND % 2 == 0):self.display_status_fighting()self.display_magic()NPC_.display_status_fighting()choose_magic = int(input('-----使用魔法/普通攻击(-1普通攻击,0/1/2..魔法攻击,查看状态-2):'))IS_DEAD = self.attack_one_time(NPC_, choose_magic)IS_DEAD = IS_DEAD * 2  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了else:choose_magic = random.choice(NPC_.HAS_MAGIC + [-1])IS_DEAD = NPC_.attack_one_time(self, choose_magic)IS_DEAD = IS_DEAD * 4  # 用乘法,让我们不改变0,非0状态的情况下,标记是谁赢了if IS_DEAD >= 1:print('【战斗结束】')if IS_DEAD == 2:print('【', self.NAME + '战胜了' + NPC_.NAME, '】')elif IS_DEAD == 4:print('【', NPC_.NAME + '战胜了' + self.NAME, '】')return IS_DEADelse:if ROUND % 2 == 1:print('【第' + str(1 + int(ROUND / 2)) + '回合结束!】\n===================================')class World:  # 世界类# 剧本:遇到学姐# 玩家初始化PLAYER = Body()# NPC初始化(先创造三个NPC,学姐,冰怪,火怪NPCs = {'school elder sister': Body(NAME_='school elder sister', HAS_MAGIC_=[0, 1]),'ice monster': Body(NAME_='ice monster', HAS_MAGIC_=[2]),'fire monster': Body(NAME_='fire monster', HAS_MAGIC_=[0])}# 显示一句话:两种方式,直接显示0,以及逐步显示1def display_a_line(way, script='hello'):for i in range(len(script)):time.sleep(0.3)print('\r', script[0:i], end='')# 初始化世界:def init(self):player_name = input('请输入玩家名:')self.PLAYER.NAME = player_nameprint('....南理文字RPG0.2的世界开始了.....')welcome_script = 'Hi,' + self.PLAYER.NAME + ',欢迎加入南理文字RPG0.2 '# self.display_a_line(script=welcome_script)print(welcome_script)self.PLAYER.display_status()self.PLAYER.talk_to(self.NPCs['school elder sister'],SCRIPT_NPC_SCHOOL_SISTER)  # 通过NPCs集合,调取'school elder sister'NPCself.PLAYER.learn_magic_from(self.NPCs['school elder sister'])def run(self):self.PLAYER.fight_with(self.NPCs['fire monster'])magic_world = World()magic_world.init()magic_world.run()代码片

这次封装了较多的函数,比上周的更为简洁,也将上周的文字停留效果进行了改善,除了讲了函数
、类
、还讲了字典

3.当然本次也留了作业
#L2-作业1:南理文字RPG代码每次魔法攻击,没有扣魔法值,请把代码加上去
即在attack_one_time函数里增加即可,代码如下红色框所示

#L2-作业2:给Body类加DEFENSE防御力属性(类的变量),并且在普通物理攻击的时候,考虑如何结合防御力和攻击力,扣血。
#L2-作业3:给Body类增加经验值体系EXP,以及等级LEVEL,以及对应的等级提高了后,怎么升级各个属性(最好考虑代码复用性)
作业2和作业3代码如下 ,有些代码下有波浪线,我也不知道怎么回事,具体如何升级各个属性我还没想到该怎么解决

 def DEFENCE_(self,NPC):hit = self.ATTACK*(100-self.DEFENCE) % 100return hit

#L2-作业4#:分析attack_one_time 方法,分析这个方法还有哪些细节没考虑到,结合游戏互动可能发生的事情。
在群里面有讨论到可以增加暴击力,防御值之类的,我觉得可以增加共享方法来提升整体能力,也就是说不一定是以一对一进行挑战,可以多对多。(当然,我只是这么想,实现的话可能有些麻烦)
#L2-作业5: 大家自己不抄代码,按自己的理解,从零实现一下这个代码。
这是我运行时出的问题,后面发现是在初始化的时候DEFENCE忘记和前面代码一致了(漏了下划线
#L2-作业6:完成以下3个链接的代码的练习和调试实验。
函数:https://www.w3school.com.cn/python/python_functions.asp
字典:https://www.w3school.com.cn/python/python_dictionaries.asp
类:https://www.w3school.com.cn/python/python_classes.asp
作业6我在对应链接上已经运行过了。
4.总体感觉这周更难一些,有些还没理解,或许是代码增多了并且知识点也在增多,我得多加敲敲代码,熟练熟练。

超级玛丽workshop-第二周相关推荐

  1. 超级玛丽workshop-第一周

    ## "南昌理工学院人工智能学院实验室WORKSHOP实践项目#小白入门 python第一周的心得 虽刚入门,却发现很有趣.或许这便是python语言的魅力吧!学了它的print.if.el ...

  2. 20165334 四则运算阶段性总结(第二周)

    四则运算阶段性总结(第二周) 结对对象 学号 :20165334 姓名 : 李天龙 担任角色 (驾驶员):李天龙 (副驾驶):陈国超 一.实验实现步骤 整数计算类 分数计算类 自动生成题目的类 测试结 ...

  3. 20155222 第二周测试

    20155222 第二周测试 1 vi 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号 用Vi输入图中代码,并用gcc编译通过 在Vi中使用K查找printf的帮助文档 提交vi编辑过程 ...

  4. Emojify - v2 吴恩达老师深度学习第五课第二周编程作业2

    吴恩达老师深度学习第五课第二周编程作业2,包含答案! Emojify! Welcome to the second assignment of Week 2. You are going to use ...

  5. Operations on word vectors-v2 吴恩达老师深度学习课程第五课第二周编程作业1

    吴恩达老师深度学习课程第五课(RNN)第二周编程作业1, 包含答案 Operations on word vectors Welcome to your first assignment of thi ...

  6. Linux第二周学习笔记(7)

    Linux第二周学习笔记(7) 2.13 文档查看cat_more_less_head_tail (1). cat命令 cat命令:用于查看一个文件的内容并将其显示在屏幕上 cat-A命令:显示所有的 ...

  7. 2月第二周.COM增近12万 ×××域名.XXX减122个

    IDC评述网(idcps.com)02月18日报道:根据Registrar Stats实时数据,截至2014年2月16日,全球.COM域名注册总量已达到了112,369,017个,环比上周新增近12万 ...

  8. 机电传动控制第二周学习笔记

    机电传动控制第二周学习笔记 经过第二周的学习,我了解了电机的发展历史.从奥斯特发现电生磁的现象,到法拉第电磁回转实验,再到后来的电机一步步的发展至今.它充满了巧合,但是它又必然一步步向更完美走去.电机 ...

  9. Linux第二周学习笔记(11)

    Linux第二周学习笔记(11) 2.17 隐藏权限lsattr_chattr chattr命令:是设置吟唱隐藏权限的命令,更改Linux文件系统上的文件属性. 参数说明: A:表示文件或目录的ati ...

最新文章

  1. 一文读懂密码学中的证书
  2. Entity Framework Core 1.1 升级通告
  3. 比特币未来几个月怎么样_您需要了解的关于比特币技术的未来
  4. 项目管理系统、工作台、经营看板、质量管理、合同管理、合同审核、新建合同、分包商管理、立项审批、创建项目、项目模板、项目统计、计划管理、结项申请、审批流程、审批记录、审批状态、参数设置、axure原型
  5. VS2005里自定义控件设计时语法
  6. Dev-C++/Cpp使用入门详解
  7. 龙格现象python程序_基于切比雪夫多项式的函数插值逼近
  8. web技术基础---网站设计说明书
  9. Unity5 UI.Text 引发Canvas.SendWillRenderCanvases很卡的问题
  10. 什么是jsp,什么是Servlet?jsp和Servlet有什么区别?
  11. LWR 局部加权线性回归算法
  12. 【数据分析师自学系列-MySQL】创建新表create table、create table as、create table like的区别
  13. 【智能零售】解读双11后的新零售趋势
  14. IOS系统ipa软件包在线安装
  15. alibab的滑动验证
  16. XMIND中调整某一主题中英文大小写
  17. 创建数据库表格的方法
  18. 排序算法(不定时更新~)
  19. ESR黑客年暮:给年轻黑客和其他有志青年的建议
  20. Mysql:分组查询

热门文章

  1. (二) selenium元素定位(上)
  2. 合众达电子SEED_VPM642开发板调试及应用(技术小结)
  3. 心田花开写作指导二年级看图写话风筝写作方法
  4. 怎么用硬盘安装xp系统
  5. 程序员代码面试指南刷题--第五章.数组中两个字符串的最小距离
  6. 大数问题(循环求余/快速幂求余/快速幂问题)
  7. 第五维度存在的意义:或许可以解释量子理论
  8. 动态场景下基于实例分割的SLAM(毕业设计开题及语义分割部分)
  9. php餐厅预定座位系统,一种餐厅座位智能化预订系统的制作方法
  10. 〖Python接口自动化测试实战篇⑤〗- 接口自动化测试必备基础 - http协议