模拟乌龟吃鱼的小游戏

这是一个用Python编写的模拟乌龟在限定区域内移动并捕捉随机位置的鱼的游戏。乌龟和鱼每次移动后会检查是否越界,乌龟捕食到鱼后会增加体力,当所有鱼被捕完或乌龟体力耗尽时,游戏结束。
摘要由CSDN通过智能技术生成
import random as r

#==========定义场景范围==========
legal_x = [0, 10]
legal_y = [0, 10]
    
#==========定义乌龟类==========
class Turtle:
    def __init__(self):
        #初始化体力
        self.power = 100
        #初始化位置
        self.x = r.randint(legal_x[0], legal_x[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])
        #判断x是否越界
        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
        
        #判断y是否越界
        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

        #print('乌龟当前坐标:x = %d y =%d'%(self.x, self.y))
        return (self.x, self.y)

    def eat(self):
        self.power += 20
        #if self.power > 100:
            #self.power = 100

class Fish:
    def __init__(self,name):
        #初始化位置:只有在init中初始化每个实例的初始位置才不相同
        self.name = name
        self.x = r.randint(legal_x[0], legal_x[1])
        self.y = r.randint(legal_y[0], legal_y[1])

    def move(self):
        new_x = self.x + r.choice([1, -1])#在列表中随机选择一个成员
        new_y = self.y + r.choice([1, -1])
        #判断x是否越界
        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
        
        #判断y是否越界
        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

        #print('鱼%s当前坐标:x = %d y =%d'%(self.name, self.x, self.y))
        return (self.x, self.y)
    
turtle = Turtle()
fish = []#保存鱼的列表
#初始化鱼的列表
for i in range(10):
    new_fish = Fish(i)
    fish.append(new_fish)

#测试下查看鱼列表对象---打印的是内存地址
#print(fish)

while 1:
    if not len(fish):
        print('鱼被吃完,游戏结束!')
        break
    if not turtle.power:
        print('乌龟累死了,游戏结束!')
        break

    tpos = turtle.move()
    print('乌龟爬到了(%d, %d)'%(tpos[0], tpos[1]))
    #在迭代器中删除列表元素是危险的,因为迭代器是直接引用列表数据
    #所以使用列表拷贝方法[:]将列表赋值给迭代器,然后再对原有的列表进行操作
    for each_fish in fish[:]:
        fpos =each_fish.move()
        if fpos == tpos:
            print('鱼%s游到(%d, %d)被乌龟抓住了'%(each_fish.name, fpos[0], fpos[1]))
            turtle.eat()
            fish.remove(each_fish)
            print('哈哈,鱼%s被乌龟吃掉了...'%each_fish.name)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值