资讯专栏INFORMATION COLUMN

Python面向对象练习-乌龟吃鱼

刘福 / 3176人阅读

摘要:题目要求首先放上题目要求游戏编程按以下要求定义一个乌龟类和鱼类并尝试编写游戏假设游戏场景为范围为游戏生成只乌龟和条鱼它们的移动方向均随机乌龟的最大移动能力为它可以随机选择还是移动,鱼儿的最大移动能力是当移动到场景边缘,自动向反方向移动乌龟初

题目要求

首先放上题目要求:

游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏

假设游戏场景为范围(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.power=100 #体力
        #乌龟坐标
        self.x=random.randint(0,10)
        self.y=random.randint(0,10)
    #乌龟移动的方法:移动方向均随机 第四条
    def move(self):
        #计算移动后的新位置(只有四种可能)
        new_x=self.x+random.choice([1,2,-1,-2])
        new_y=self.y+random.choice([1,2,-1,-2])
        #判断移动后是否超出边界
        if new_x<0:
            self.x=0-new_x
        elif new_x>10:
            self.x=10-(new_x-10)
        else:
            #不越界则移动乌龟的位置
            self.x=new_x                
        if new_y<0:
            self.y=0-new_y
        elif new_y>10:
            self.y=10-(new_y-10)
        else:
            #不越界则移动乌龟的位置
            self.y=new_y
        self.power-=1 #乌龟每移动一次,体力消耗1           
    def eat(self):
        self.power+=20 #乌龟吃掉鱼,乌龟体力增加20
        if self.power>100:
            self.power=100 #乌龟体力100(上限)

#鱼类
class Fish:
    def __init__(self):
        #鱼坐标
        self.x=random.randint(0,10)
        self.y=random.randint(0,10)             
    def move(self):
        #计算移动后的新位置(只有四种可能)
        new_x=self.x+random.choice([1,-1])
        new_y=self.y+random.choice([1,-1])
        #判断移动后是否超出边界
        if new_x<0:
            self.x=0-new_x
        elif new_x>10:
            self.x=10-(new_x-10)
        else:
            #不越界则移动鱼的位置
            self.x=new_x                
        if new_y<0:
            self.y=0-new_y
        elif new_y>10:
            self.y=10-(new_y-10)
        else:
            #不越界则移动鱼的位置
            self.y=new_y       

#开始测试数据
tur=Turtle() #生成1只乌龟
fish=[] #生成10条鱼
for item in range(10):
    fish.append(Fish()) #把生成的鱼放到鱼缸里

#判断游戏是否结束:当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束  
if tur.power<0 or len(fish)==0:
    print("Game Over ~")
#游戏开始
#首先乌龟迈出第一步
# print(tur.x,tur.y) #乌龟移动前   
tur.move()
# print(tur.x,tur.y) #乌龟移动后
for item in fish:
    item.move()
    if item.x==tur.x and item.y==tur.y:
        tur.eat()
        fish.remove(item)
        print("死了一只鱼")
        print("乌龟最新体力值为 %d"%tur.power)   

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41208.html

相关文章

  • Python面向对象练习-通过pygame改良乌龟吃鱼

    摘要:先看看最后效果图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下是通过方向键操作乌龟,进行吃鱼吃鱼的时候根据乌龟的坐标和鱼的进行检测,在碰撞区域则干掉这条鱼背景音乐和吃鱼音乐的播放分数累积鱼的平滑游动控制帧频实现代码导入一些常用的函数乌 先看看最后效果 图片的话是从网上小鱼儿那个案例里面拿的,实现的功能如下: 是通过方向键操作乌龟,进行吃鱼 吃鱼的时候根据乌龟的x,y坐标和鱼的x...

    jk_v1 评论0 收藏0
  • python大佬养成计划--面向对象

    摘要:的名字并不是规定死的因为是形参,也可以使用,但是最好还是按照约定是用。类的私有方法两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类地外部调用。。 类 面向对象编程具有三大特性:多态、继承、封装定义:是一个抽象的模板对象:类实例化属性:这个类实例化后的对象具有的特征方法:类对象可以执行的函数 类的定义 class 类名 class People(object): ...

    hzc 评论0 收藏0
  • 不用看网课就能学到python的文章(第五天)

    摘要:类其实就是由属性和方法组成的一个抽象概念。类和对象的关系类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。使用同一个类,能够创建出很多对象。不同对象对应的属性值也会不同。 目录 类 对象(实例) 类中的成员 面向对象 变量 类 类是对一群具有相同 特征 或者 行为 的...

    wenzi 评论0 收藏0
  • Java编程基础10——面向对象_多态&抽象类&接口

    摘要:案例演示抽象类的成员特点抽象类的成员方法特性抽象方法强制要求子类做的事情。抽象类中定义的是该继承体系的共性功能。 1.多态的概述及其成员访问特点代码体现 A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提- 1.要有继承关系 2.要有方法重写 3.要有父类引用指向子类对象。 C:多态中的成员访问特点之 成员变量:编译和运行都看父类。 成员方法:编...

    dunizb 评论0 收藏0
  • 工厂模式理解了没有?

    摘要:我认为按书上的顺序比较好理解因为简单静态工厂模式是在工厂方法模式上缩减,抽象工厂模式是在工厂方法模式上再增强。所以我就先讲工厂方法模式了。抽象工厂模式抽象工厂模式就比较复杂了,我们一般的应用都写不到。 前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 昨天写了单例模式了,今天是时候写工厂模式啦~ 工厂模式我个人认为其实比...

    苏丹 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<