一、题目

  • 游戏场景为范围(x,y)为 0<=x<=10,0<=y<=10
  • 游戏生成1只乌龟和10条鱼
  • 它们的移动方向均随机
  • 乌龟的最大移动能力为2(可以随机选择1还是2),鱼儿的最大移动能力为1
  • 当移动到场景边缘,自动向反方向移动
  • 乌龟初始化体力为100(上限)
  • 乌龟每移动一次,体力消耗1
  • 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
  • 鱼暂不计算体力
  • 当乌龟体力值为0(挂掉)或鱼儿的数量为0游戏结束

二、题解

import random
class Turtle():def __init__(self):self.force = 100self.localx = random.randint(0,10)self.localy = random.randint(0,10)def local(self):print("乌龟的初始位置为:\n(%d,%d)\n"%(self.localx,self.localy))def move(self):if random.choice([0,1]):self.localx += random.choice([-2,-1,1,2])if self.localx < 0:self.localx = 0 - self.localxelif self.localx > 10:self.localx = 10 - (self.localx - 10)else:self.localy +=  random.choice([-2,-1,1,2])if self.localy <= 0:self.localx = 0 - self.localxelif self.localy >=10:self.localx = 10 - (self.localx - 10)self.force -= 20def now(self):print("乌龟的现在位置为:\n(%d,%d)\n"%(self.localx,self.localy))print("乌龟剩余体力为:",self.force)class Fish():def __init__(self):self.num = 20self.fishLocal = []for each in range(10):self.fishLocal.append([random.randint(0,10),random.randint(0,10)])def local(self):print("鱼的初始位置为:")for each in self.fishLocal:print("(%d,%d)\n"%(each[0],each[1]))def move(self):for each in self.fishLocal:if random.choice([0,1]):each[0] += random.choice([-1,1])if each[0] < 0:each[0] = 0 - each[0]elif each[0] >10:each[0] = 10 - (10 - each[0])else:each[1] += random.choice([-1,1])if each[1] < 0:each[1] = 0 - each[1]elif each[1] >10:each[1] = 10 - (10 - each[1])def now(self):print("鱼现在的位置为:",self.fishLocal)print("鱼剩余数列量:",self.num)def game():turtle = Turtle()fish = Fish()i=1turtle.local()fish.local()while 1:print("第%d步\n"%i)turtle.move()fish.move()turtle.now()fish.now()i += 1for each in fish.fishLocal:if each[0] == turtle.localx and  each[1] == turtle.localy:fish.num -= 1fish.fishLocal.remove(each)if turtle.force <=0:return "乌龟失败啦,鱼是赢家!"if fish.num <= 0:return "鱼失败啦,乌龟是赢家!"print(game())      

三、解题过程:

1.分析题目画出思路

2.将功能逐个完成

不确定的语法及时查阅、并通过IDE不断调试,完成了龟、鱼位置、体力、数量的初始化,以及龟鱼移动、显示其位置以及游戏结束的方法;
亮点:通过random函数控制龟鱼随机移动、通过数组存储十条鱼的位置。

3.功能修缮

发现自己没有注意到题目中到达边界即自动反向运动的条件,修改代码,增加龟鱼移动中的控制条件;
改进了缩进、运算符空格、反斜杠打反以及将随意取名的变量规范命名等问题;
增加面向用户的必要的中文print。

4.代码调试

1)编译错误

· if、class、def 后加漏冒号或者误输入成中午字符
·格式化输入的语法错误:与c语言不同,用%隔开而非’ , ’

 print("乌龟的初始位置为:\n(%d,%d)\n"%(self.localx,self.localy))

·

2)运行错误

·没有import random
·构造函数 ’ init ’ 是前后各两个下划线
·前面修改不规范命名的时候,出现未定义还冒出来的原来的不规范变量,导致something not defined
·关于调用实例方法、实例属性,一定不能漏掉self

>>> class BB:def printBB():print("no zuo no die")>>> bb = BB()
>>> bb.printBB()
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>bb.printBB()
TypeError: printBB() takes 0 positional arguments but 1 was given

因为Python严格要求方法需要有实例才能被调用,这种限制其实就是Python所谓的绑定概念。所以Python会自动把bb对象作为第一个参数传入,即bb.printBB(bb),然而类方法那边没有参数,所以才会出现TypeError:“需要0个参数,但实际传入了1个参数”。
正确的做法应该是:

>>> class BB:def printBB(self):print("no zuo no die")>>> bb = BB()
>>> bb.printBB()
no zuo no die

详见小甲鱼零基础学Python

3)运行成功后出现的问题

·原来在多重循环中运用break语句,但只能跳出一重循环,我在导致死循环,后来通过return语句解决

def game():turtle = Turtle()fish = Fish()i=1turtle.local()fish.local()while 1:print("第%d步\n"%i)turtle.move()fish.move()turtle.now()fish.now()i += 1for each in fish.fishLocal:if each[0] == turtle.localx and  each[1] == turtle.localy:fish.num -= 1fish.fishLocal.remove(each)if turtle.force <=0:return "乌龟失败啦,鱼是赢家!"if fish.num <= 0:return "鱼失败啦,乌龟是赢家!"print(game())

·展示的结果看起来不是很整洁,通过删改换行符等调整最终呈现效果

四、运行结果


Python-初应用:乌龟吃鱼(菜菜狂踩雷现场、典型低级错误)相关推荐

  1. python小鱼_Python面向对象练习-通过pygame改良乌龟吃鱼

    先看看最后效果 图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下: 是通过方向键操作乌龟,进行吃鱼 吃鱼的时候根据乌龟的x,y坐标和鱼的x,y进行检测,在碰撞区域则干掉这条鱼 背景音乐和吃鱼音乐 ...

  2. Python-小游戏-乌龟吃鱼

    #讲道理乌龟吃鱼的嘛? 先上代码,虽然感觉很多地方可以优化 import random import timeclass Tortoise:x = random.randint(0,10)y = ra ...

  3. 面向对象编程项目案例(栈与队列封装和乌龟吃鱼游戏)

    一.Pygame相关介绍 1.Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚.Pygame常用模块 2.一个游 ...

  4. Python 小甲鱼教程 乌龟吃鱼游戏

    整个程序按照答案来敲的,我觉得按照自己的水平完全没思路写得出来框架,就当熟悉代码风格来处理吧. import random as r legal_x = [0,10]           #先定义范围 ...

  5. 模拟乌龟吃鱼的小游戏

    import random as r #==========定义场景范围========== legal_x = [0, 10] legal_y = [0, 10] #==========定义乌龟类= ...

  6. 乌龟吃鱼类 -python

    """ 游戏编程:按照要求定义一个乌龟类和鱼类并尝试编程:- 假设游戏的场景范围(x,y)为 0<= x<= 10 0<= y<= 10- 游戏生 ...

  7. python画鱼_Python 水母吃鱼游戏 pygame

    [实例简介] 学习 pygame 自己写的个小游戏: F1 -添加鱼, 方向箭头移动水母吃鱼. 缺点: 鱼的移动不太自然,需要改进! [实例截图] [核心代码] 运行环境: python 3.7.3 ...

  8. 基于Python的水母吃鱼游戏的设计与实现

    源码获取:https://www.bilibili.com/video/BV1Ne4y1g7dC/ 基于Python的水母吃鱼游戏的设计与实现

  9. 超好用的5款开发工具,Python初习者必看

    很多Python初习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头.后来工作中深刻体会到,合理使用开发的工具的便利和高效.今天,小千就把Python程序员使 ...

  10. 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)

    软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计) 实验内容 编程语言以及开发环境的选择 实验思路(游戏设计) 一.游戏的逻辑设计 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按 ...

最新文章

  1. 不止JDK7的HashMap,JDK8的ConcurrentHashMap也会造成CPU 100%
  2. Entity Framework 5中遇到的 mysql tinyint(1) 转换为 bool 的问题 (我用的是VS2013中的EF5版本)...
  3. 直播报名 | 用户中台建设实践解析
  4. php合同在线签约功能_【市场在线】杭汽辅机实现海外发电市场重大突破 —成功签约阿联酋Fujairah F3 IPP项目表冷器合同...
  5. Audit(查看审核/审计信息)
  6. celery 实例进阶
  7. java in查询无法查询到数据(mybatis字符#与字符$的区别)
  8. 入职抖音之后,我变强了,但是营养也有点跟不上了...
  9. mysql 建表语句 及完整案例_Linux运维必会的100道MySql面试题之(一)
  10. 【OpenCV】基于图像处理和模式识别的火灾检测方法
  11. paip.提升用户体验----解决浏览器关闭后自动退出的问题
  12. 实例化Spring容器的两种常用方式
  13. 特种期货开户交易权限开通认定标准
  14. 如何找到 SketchUp 插件所在的目录?
  15. 让我的诗句带走你的空虚
  16. WMS系统功能分析-出库、库管
  17. excel打开csv文件乱码解决办法
  18. Java之二维码工具包-yellowcong
  19. oracle java培训机构
  20. VLAN的作用及用法详解_01

热门文章

  1. 全球20大半导体企业无1家入围,中国半导体任重道远
  2. 计算机指令load是什么意思,overload
  3. 解决win10新建文本文档内容可以打开但显示图标不对的问题
  4. 算法界的“视界杯”,2021腾讯广告算法大赛来了!
  5. java 权重_java实现权重的简单算法
  6. 311、FirebaseAnalytics和Google Analytics总结
  7. matlab画图——semilogy函数介绍
  8. 已解决:ORA-00932:数据类型不一致:应为-,但却获得CLOB
  9. 睡眠十律 (BBC纪录片) -- 讲述10分钟获得好睡眠的方法
  10. 正则表达式数字匹配规则整理