Python小甲鱼课后习题 乌龟吃小鱼

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

学习内容:

按以下要求定义一个乌龟类和鱼类并尝试编写游戏。
#1、假设游戏场景为范围(x,y)为0<= x <=10,0<= y <=10
#2、游戏生成1只乌龟和10条鱼
#3、它们的移动方向是随机的
#4、乌龟的最大移动能力是2(它可以随机选择移动1还是2),鱼儿的最大移动能力是1
#5、当移动到场景边缘,自动反方向移动
#6、乌龟初始化体力为100(上限)
#7、乌龟每移动一次,体力消耗1
#8、当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
#9、鱼暂不计体力
#10、当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

学习产出:

#游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。
#1、假设游戏场景为范围(x,y)为0<= x <=10,0<= y <=10
#2、游戏生成1只乌龟和10条鱼
#3、它们的移动方向是随机的
#4、乌龟的最大移动能力是2(它可以随机选择移动1还是2),鱼儿的最大移动能力是1
#5、当移动到场景边缘,自动反方向移动
#6、乌龟初始化体力为100(上限)
#7、乌龟每移动一次,体力消耗1
#8、当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
#9、鱼暂不计体力
#10、当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

import random as r

class Turtle:

    def __init__(self):
        self.num=1
        self.power=100
        self.x=r.randint(0,9)
        self.y=r.randint(0,9)
        print("乌龟初始位置是:(%d  %d)"%(self.x,self.y))
        

    def move(self):

        random_move=r.randint(1,4) #产生1向左移动,2向右移动,3向上移动,4向下移动
        if random_move ==1:  
            self.x -=r.randint(1,2)
        elif random_move ==2:
            self.x +=r.randint(1,2)
        elif random_move ==3:
            self.y +=r.randint(1,2)
        else:
            self.y -=r.randint(1,2)
        self.power -=1
        print("乌龟随机移动后的位置是:(%d  %d),乌龟体力值:%d"%(self.x,self.y,self.power))

        #如果乌龟移动到边缘,则进行自动反方向移动
        if self.x==0 or self.x==10 or self.y==0 or self.y==10:
            
            if self.x==0:
                self.x +=r.randint(1,2)
            elif self.x ==10:
                self.x -=r.randint(1,2)
            elif self.y ==0:
                self.y +=r.randint(1,2)
            elif self.y ==10:
                self.y -=r.randint(1,2)
            self.power -=1
            print("乌龟运动到边缘,反向移动后的位置是:(%d  %d),乌龟体力值:%d"%(self.x,self.y,self.power))
        return (self.x,self.y)
    def eat(self):
        self.power +=20
        
        if self.power >100:
            self.power=100
        print("现在乌龟的体力值:",self.power)
class Fish:
    
    def __init__(self):
        self.num=10
        self.x=r.randint(0,9)
        self.y=r.randint(0,9)
        print("小鱼鱼初始位置是:(%d  %d)"%(self.x,self.y))

    def move(self):

        random_move=r.randint(1,4) #产生1向左移动,2向右移动,3向上移动,4向下移动
        if random_move ==1:  
            self.x -=1
        elif random_move ==2:
            self.x +=1
        elif random_move ==3:
            self.y +=1
        else:
            self.y -=1
        
        print("小鱼鱼随机移动后的位置是:(%d  %d)"%(self.x,self.y))

        #如果小鱼鱼移动到边缘,则进行自动反方向移动
        if self.x==0 or self.x==10 or self.y==0 or self.y==10:
            
            if self.x==0:
                self.x +=1
            elif self.x ==10:
                self.x -=1
            elif self.y ==0:
                self.y +=1
            elif self.y ==10:
                self.y -=1
            
            print("小鱼鱼运动到边缘,反向移动后的位置是:(%d  %d)"%(self.x,self.y))
        return (self.x,self.y)    
        

#类的实例化对象
a=Turtle()

#产生10条小鱼的坐标————
fish=[]

for i in range(0,10):
    b=Fish()
    fish.append(b)
    

#游戏编程
while True:
    turtle=a.move()
    
    for each_fish in fish[:]:
        xiaoyu=each_fish.move()

        if xiaoyu==turtle:
            a.eat()
            fish.remove(each_fish)
            print("有条鱼被吃啦!,现在还剩下%d 条鱼"%(len(fish)))
        
    

    if not a.power:
        print("乌龟的体力值用完啦!游戏结束")
        break
    if not len(fish):
        print("小鱼鱼的数量为0,游戏结束")
        break

    
    


        
        
 
            
    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值