整个程序按照答案来敲的,我觉得按照自己的水平完全没思路写得出来框架,就当熟悉代码风格来处理吧。

import random as r

legal_x = [0,10]           #先定义范围,这里很巧妙,用一个列表2个数字来表示,而不是一个range
legal_y = [0,10]

class Turtle:
 def __init__(self):
  self.power = 100
  self.x=r.randint(legal_x[0],legal_x[1])   #正是因为上面的设置,下面生成初始位置就可以用randint函数来处理,这里是生成self的初始位置x
  self.y=r.randint(legal_y[0],legal_y[1])   #生成初始位置y
  
 def move(self):
  new_x=self.x+r.choice([1,2,-1,-2])          #移动一步后,新位置是原始位置加上移动距离,距离只有4种可能
  new_y=self.y+r.choice([1,2,-1,-2])
  
  if new_x <legal_x[0]:                               #如果X越出了负界限,则自动反向
   self.x=legal_x[0]-(new_x - legal_x[0])    
   
  elif new_x>legal_x[1]:                              #如果X越出了正界限,则自动反向
   self.x=legal_x[1]-(new_x - legal_x[1])
  else: 
   self.x=new_x                                          #不越界的情况下,刷新位置,就等于移动后位置
   
  if new_y<legal_y[0]:                                       
   self.y=legal_y[0]-(new_y - legal_y[0])
  
  elif new_y>legal_y[1]:
   self.y=legal_y[1]-(new_y - legal_y[1])
   
  else:
   self.y=new_y
   
  self.power -= 1
  return (self.x,self.y)
  
 def eat(self):                                              #定义动作吃,吃了以后体力加20
  self.power+=20
  if self.power>100:                                    #超过体力上限100了就不变
   self.power = 100
   
class Fish:
 def __init__(self):
  self.x = r.randint(legal_x[0],legal_y[1])     #这里定义鱼类,初始化位置
  self.y = r.randint(legal_y[0],legal_y[1])
  
 def move(self):                                          #和乌龟的属性一样,移动功能
  new_x = self.x + r.choice([1,2,-1,-2])
  new_y = self.y + r.choice([1,2,-1,-2])
  
  if new_x < legal_x[0]:
   self.x = legal_x[0] - (new_x-legal_x[0])
  
  elif new_x > legal_x[1]:
   self.x = legal_x[1]-(new_x-legal_x[1])
  
  else:
   self.x = new_x
  
  if new_y < legal_y[0]:
   self.y = legal_y[0]-(new_y - legal_y[0])
   
  elif new_y > legal_y[1]:
   self.y = legal_y[1]-(new_y - legal_y[1])
   
  else:
   self.y = new_y
   
  return (self.x,self.y)
  
  
turtle = Turtle()                           #实例化乌龟
fish=[]                                         #将所有的鱼放进一个list
for i in range(10):                       
 new_fish = Fish()                      #在新建实例的同时,在下一行代码,将实例鱼放进列表
 fish.append(new_fish)
 
while True:
 if not len(fish):                          #len(fish)在有鱼的情况下是true,所以当没鱼的时候,执行下面的while循环,当有鱼或者乌龟有体力的时候,游戏始终循环
  print ('no more fishes, game over')
  break
  
 if not turtle.power:                     #如果乌龟体力没了,游戏结束
  print ('turtle is dead')
  break
  
 pos = turtle.move()                   #将乌龟实例move函数返回的位置,赋值给pos
 for each_fish in fish[:]:              #历遍每条鱼,鱼移动后的位置和乌龟的位置有重叠,就执行吃的动作,并移除一条鱼
  if each_fish.move() == pos:
   turtle.eat()
   fish.remove(each_fish)
   print ('one fish was ated')



Python 小甲鱼教程 乌龟吃鱼游戏相关推荐

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

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

  2. python 小甲鱼小游戏_Python 小甲鱼教程 Easygui 篇

    Python 小甲鱼教程 Easygui 篇 终于有点实质性可以看到摸到的界面了,搜了一下虽然easygui用的不多,但是作为一个起步,z,----,先了解一下吧,e,毕竟道理想通. 下面按照小甲鱼的 ...

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

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

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

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

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

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

  6. python小甲鱼笔记

    提示:python小甲鱼笔记 文章目录 前言 〇.函数 1.常用基本函数 2.常用表函数 3.常用子函数 4.输入.输出 5.字符串函数 5.快捷键 一.常用函数案例 1.文本输出 2.猜数 if 实 ...

  7. Python小甲鱼学习笔记31-35

    31永久存储pickle模块 一.pickle模块 0.pickle的实质是什么?   a.将对象数据以二进制形式保存在文件中   b.将对象数据以二进制形式从文件中读取   输入输出二进制流 1.使 ...

  8. python小课文件_[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答...

    # -*- coding: utf-8 -*- """ Created on Fri Mar 8 15:49:32 2019 @author: Administrator ...

  9. (第二版)零基础入门Python小甲鱼-笔记-第三章-p5

    (第二版)零基础入门Python小甲鱼-笔记-第三章-p5 变量和字符串(下) 上节课讲了有些字符比如换行符.TAB制表符还有单引号.双引号等等...可以通过转义字符来实现,今天来谈谈原始字符串 1. ...

最新文章

  1. C 关于使用异或运算操作概述
  2. 高职扩招计算机应用课程,高职扩招带来的“新生”
  3. 清理Oracle安装目录里的一些日志信息
  4. java的dispatcher_Java RequestDispatcher 详解
  5. 手把手教你在 Ubuntu16.04 安装 GPU 驱动 + CUDA9.0 + cuDNN7
  6. 浅谈移动Web开发:深入概念
  7. 华为harmonyos公测,华为鸿蒙 Harmony OS 2.0 第二轮公测已开启,赶紧申请报名
  8. Linux基础之-网络配置,主机名设置,ssh登陆,scp传输
  9. 【Android 修炼手册】Gradle 篇 -- Android Gradle Plugin 主要流程分析
  10. 2019-03-22-算法-进化(环形链表)
  11. 单独像对相对定向元素解析
  12. 双重检查锁定及单例模式
  13. Atitit ati teck trend技术趋势资料包 C:\onedriver\OneDrive\Documents\0 it impttech topic\ati teck trend技术趋
  14. jQuery学习笔记之选取选定复选框的同行某列元素
  15. 做一个古诗词的html页面,制作一个古诗词的网页
  16. Leetcode 1484题: Group Sold Products By The Date
  17. 冰冻三尺非一日之寒——大型网站架构演进
  18. Spring中Environment的使用
  19. 何恺明团队新作ViTDet:用于目标检测的视觉Transformer主干网络
  20. 【STM32】基础知识 第十课 CubeMx

热门文章

  1. 25、进程的挂起状态
  2. ps入门第1天_认识PS基础文件设置_打印分辨率300像素_ps颜色模式
  3. android手机WiFi热点名修改
  4. 小程序三剑客-wxml、wxss、js初步认识
  5. linux 挂载 更改 权限,linux中重新挂载改写权限方法
  6. time模块和datetime模块详解
  7. ASM:《X86汇编语言-从实模式到保护模式》第13章:保护模式下内核的加载,程序的动态加载和执行...
  8. 红牛的广告:你的能量超乎你的想象
  9. cva《财务建模》第六讲笔记
  10. 14.信号完整性 关键字:信号反射 振铃 串扰 开关噪声 地弹 特性阻抗