用python要求定义一个乌龟类和鱼类并尝试编写游戏。

目录

前言

一、游戏需求概述

二、实现步骤

1.分析

2.代码实现

总结




前言

用python要求定义一个乌龟类和鱼类并尝试编写游戏。


一、游戏需求概述

假设游戏场景范围为(x, y),0≤x≤10, 0≤y≤10。

(1)游戏生成 1 只乌龟和 10 条鱼;

(2)它们的移动方向均随机;

(3)乌龟的最大移动能力是 2(可以随机移动 1 或 2),鱼的最大移动能力 是 1,移动是沿 x 轴或 y 轴进行;

(4)当移动到场景边界,移动向反方向移动;

(5)乌龟初始化体力为 100;

(6)乌龟每移动一次,体力消耗 1;

(7)当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加 20;

(8)鱼暂不计算体力;

(9)当乌龟体力值为 0 或者鱼儿的数量为 0,游戏结束

二、实现步骤

1.分析

 根据上述要求,此游戏有两类对象,分别是乌龟和鱼,它们分别具有的能力 如下。

(1)乌龟:初始化位置(随机),移动(随机 1 或 2,遇到边界向反方向移 动),吃鱼(乌龟坐标和鱼坐标重叠,乌龟吃鱼);

(2)鱼:初始化位置(随机),移动(移动 1,遇到边界向反方向移动)。

以上分析表明,乌龟和鱼类都有“随机初始化位置”和“移动”的方法,为 此抽象出它们的父类 GameAnimal,在父类中定义初始化位置(initLocation)和移 动(move)的方法。此游戏包括三个类,GameAnimal,乌龟(Tortoise)和鱼(Fish)。

在主程序中,定义 1 个乌龟对象和 10 个鱼对象,然后循环执行如下步骤:

(1)获取乌龟的坐标;

(2)判断所有鱼当中是否有鱼的坐标与乌龟的坐标重叠,如果重叠则删除 此鱼对象,乌龟体力增加 20;

(3)若鱼被吃完,退出循环;

(4)若乌龟能量为 0,退出循环。

2.代码实现

代码如下(示例):

from random import *
class GameAnimal:
    def initLocation(self,ph=None):
        self.x=randint(0,10)
        self.y=randint(0,10)
        self.ph=ph
    def move(self):
        if isinstance(self,Fish):
            m=list(range(-1,2))
        else:
            m=list(range(-2,3))
            self.ph=self.ph-1
        m.remove(0)
        step=choice(m)
        if randint(0,1):
            self.x=abs(self.x+step)
            if self.x>10:
                self.x=10-self.x%10
        else:
            self.y=abs(self.y+step)
            if self.y>10:
                self.y=10-self.y%10
        return step
class Tortoise(GameAnimal):
    pass
class Fish(GameAnimal):
    pass
t=Tortoise()
t.initLocation(100)
print(type(t))
print("创建乌龟  初始位置:({0},{1})".format(t.x,t.y))

fishes={}
for i in range(10):
    fishes[i]=Fish()
    fishes[i].initLocation()
    print("创建弟{0}条鱼, 初始位置:({1},{2})".format(i+1,fishes[i].x,fishes[i].y))

while True:
    for i in list(fishes.keys()):
        fishes[i].move()
        if fishes[i].x==t.x and fishes[i].y==t.y:
            t.ph=t.ph+20
            print("第{0}条鱼被吃掉,其位置为:({1},{2}),当前乌龟的体力{3}".format(i+1,fishes[i].x,fishes[i].y,t.ph))
            del fishes[i]
        else:
            print("第{0}鱼移动后的位置为:({1},{2})".format(i+1,fishes[i].x,fishes[i].y))
    print("当前乌龟的移动步长为{0},移动后的位置为:({1},{2}),当前体力为{3}".format(t.move(),t.x,t.y,t.ph))
    print("")
    if len(fishes)==0:
        print("鱼被吃完了")
    if t.ph==0:
        print("乌龟没体力了")
        break
 

总结

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值