python面向对象练习题_Python面向对象练习-乌龟吃鱼

题目要求

首先放上题目要求:

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

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

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

它们的移动方向均随机

乌龟的最大移动能力为2(它可以随机选择1还是2移动),鱼儿的最大移动能力是1

当移动到场景边缘,自动向反方向移动

乌龟初始化体力为100(上限)

乌龟每移动一次,体力消耗1

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

鱼暂不计算体力

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

场景图

bV1JVN?w=787&h=653

代码实现

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值