鱼C论坛

 找回密码
 立即注册
查看: 1762|回复: 2

关于《零基础入门学习Python》课后作业037讲类和对象面向对象编程最后1题乌龟吃鱼游戏

[复制链接]
回帖奖励 8 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次(中奖概率 50%)
发表于 2021-4-9 14:28:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
啊首先说一下我是0基础自学编程的,好多知识点都感觉一知半解,然后这个乌龟吃鱼的题我在看答案之前自己琢磨出来的,没敢用迭代,关于课程里讲到的self用法也不太明白,希望能有大佬对我的代码提出意见建议、以及不好的习惯、可以改进简化的地方,在这里先感谢大佬,以下是代码:


class Game():
   
    origin = (0, 0)    # 原点
    legal_x = [-5, 5]  # x轴的移动范围
    legal_y = [-5, 5]  # y轴的移动范围
   
    #设定游戏场景范围
   
    # 随机生成位置
    def rand():
        import random
        x = random.randint(-5, 6)
        y = random.randint(-5, 6)
        return (x, y)

   
   
    # 鱼移动方法
    def fish_moving(x, y):
        import random
        # direction参数设置方向,1为向右(向上),-1为向左(向下),0为不移动(当前为必须移动)
        direction = [-1, 1]
        # step参数设置移动的距离
        step = [1]
        new_x = x + random.choice(direction) * random.choice(step)
        new_y = y + random.choice(direction) * random.choice(step)
        # 检查移动后是否超出x轴边界
        if new_x < Game.legal_x[0]:
            pos_x = Game.legal_x[0] - (new_x - Game.legal_x[0])
        elif new_x > Game.legal_x[1]:
            pos_x = Game.legal_x[1] - (new_x - Game.legal_x[1])
        else:            
            pos_x = new_x
        # 检查移动后是否超出y轴边界
        if new_y < Game.legal_y[0]:
            pos_y = Game.legal_y[0] - (new_y - Game.legal_y[0])
        elif new_y > Game.legal_y[1]:
            pos_y = Game.legal_y[1] - (new_y - Game.legal_y[1])
        else:
            pos_y = new_y
        return pos_x, pos_y

    # 龟移动方法
    def tortoise_moving(x, y):
        import random
        # direction参数设置方向,1为向右(向上),-1为向左(向下),0为不移动(当前为必须移动)
        direction = [-1, 1]
        # step参数设置移动的距离
        step = [1, 2]
        new_x = x + random.choice(direction) * random.choice(step)
        new_y = y + random.choice(direction) * random.choice(step)
        # 检查移动后是否超出x轴边界
        if new_x < Game.legal_x[0]:
            pos_x = Game.legal_x[0] - (new_x - Game.legal_x[0])
        elif new_x > Game.legal_x[1]:
            pos_x = Game.legal_x[1] - (new_x - Game.legal_x[1])
        else:            
            pos_x = new_x
        # 检查移动后是否超出y轴边界
        if new_y < Game.legal_y[0]:
            pos_y = Game.legal_y[0] - (new_y - Game.legal_y[0])
        elif new_y > Game.legal_y[1]:
            pos_y = Game.legal_y[1] - (new_y - Game.legal_y[1])
        else:            
            pos_y = new_y
        return pos_x, pos_y
   
   
# 游戏开始
print('游戏开始啦!')
# 生成1只乌龟和10条鱼
tortoise = Game.rand()
fish1 = Game.rand()
fish2 = Game.rand()
fish3 = Game.rand()
fish4 = Game.rand()
fish5 = Game.rand()
fish6 = Game.rand()
fish7 = Game.rand()
fish8 = Game.rand()
fish9 = Game.rand()
fish10 = Game.rand()

# 游戏场景内
list_pool = [tortoise, fish1, fish2, fish3, fish4, fish5, fish6, fish7, fish8, fish9, fish10]

# 测试
#print('初始生成')
#print(list_pool)

power = 100   # 龟体力
i = 1


# 移动

while power > 0 and len(list_pool) > 1:

    # 比较函数
    def compare(x):
        if x == 0:
            return 0
        else:
            new_fish = Game.fish_moving(x[0], x[1])
        if new_fish == tortoise:
            print('第%d次鱼被吃掉啦!' % i)
            global power
            power += 20
            return 0
        else:
            return new_fish

   
    # 龟、鱼移动
    tortoise = Game.tortoise_moving(tortoise[0], tortoise[1])
    fish1 = compare(fish1)
    fish2 = compare(fish2)
    fish3 = compare(fish3)
    fish4 = compare(fish4)
    fish5 = compare(fish5)
    fish6 = compare(fish6)
    fish7 = compare(fish7)
    fish8 = compare(fish8)
    fish9 = compare(fish9)
    fish10 = compare(fish10)
    list_pool = [tortoise, fish1, fish2, fish3, fish4, fish5, fish6, fish7, fish8, fish9, fish10]

    # 在列表中移除已被吃掉的鱼
    k = 1
    while k:
        if 0 in list_pool:
            list_pool.remove(0)
            k = 1
        else:
            k = 0
   
    # 测试
   
    i += 1
    #print(list_pool)

   
    power -= 1
   
if power == 0:
    print('乌龟体力耗尽!还剩%d条鱼!' % (len(list_pool) - 1))
else:
    print('鱼被吃光啦!乌龟剩余%d体力!' % power)
print('游戏结束!')
# 待解决问题:鱼被吃掉时显示第几条鱼被吃掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-10 08:21:56 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-11 17:05:47 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 02:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表