鱼C论坛

 找回密码
 立即注册
查看: 2369|回复: 4

[已解决]新人又来求助啦,大佬们帮忙康康这个改进的小游戏的毛病在哪里,怎么修改,谢谢啦

[复制链接]
发表于 2021-9-22 16:59:47 | 显示全部楼层 |阅读模式

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

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

x
#乌龟与鱼的小游戏
import random as r
"""初始化边界范围"""
w_x = [0,10]
w_y = [0,10]
class Turtle:
    """创建一个乌龟的类,具备位置与体力属性以及移动与吃鱼的方法"""
    def __init__(self):
        """初始化乌龟的位置坐标,体力值,体力上限以及等级属性"""
        self.x = r.choice(w_x)
        self.y = r.choice(w_y)
        self.power = 100
        self.power_legal = 100
        self.level = 1

    def move(self):
        """乌龟每次随机移动1-2个坐标单位,每移动一次体力-20"""
        new_x = self.x + r.choice([-2,-1,1,2])
        if new_x < w_x[0]:
            self.x = abs(new_x)
        elif new_x > w_x[1]:
            self.x = w_x[1] - (new_x - w_x[1])
        else:
            self.x = new_x

        new_y = self.y + r.choice([-2,-1,1,2])
        if new_y < w_y[0]:
            self.y = abs(new_y)
        elif new_y > w_y[1]:
            self.y = w_y[1] - (new_y - w_y[1])
        else:
            self.y = new_y

        self.power -= 1
        return(self.x,self.y)

    def eat(self):
        """定义乌龟吃鱼的方法,乌龟每次吃鱼等级+1,体力+20,体力上限+30(这里想乌龟每次升级的条件是上次升级的2倍,1级升2级的条件是吃掉1条鱼,这个不会搞,嘿嘿)"""
        self.level += 1
        if self.level > 15:
            self.level = 15
        self.power_legal += 30
        if self.power_legal > 550:
            self.power_legal = 550
        self.power += 20
        if self.power > 550:
            self.power = 550

class Fish:
    """创建一个鱼类,具备位置属性以及移动的方法"""
    def __init__(self):
        """初始化鱼的位置坐标"""
        self.x = r.choice(range(10))
        self.y = r.choice(range(10))

    def move(self):
        """鱼每次随机移动1个坐标单位"""
        new_x = self.x + r.choice([-1,1])
        if new_x < w_x[0]:
            self.x = abs(new_x)
        elif new_x > w_x[1]:
            self.x = w_x[1] - (new_x - w_x[1])
        else:
            self.x = new_x

        new_y = self.y + r.choice([-1,1])
        if new_y < w_y[0]:
            self.y = abs(new_y)
        elif new_y > w_y[1]:
            self.y = w_y[1] - (new_y - w_y[1])
        else:
            self.y = new_y

        return(self.x,self.y)

class Goldfish(Fish):
    pass
class Sandvenfish(Fish):
    pass
class Clarfish(Fish):
    pass

"""实例化乌龟和鱼"""
turtle = Turtle()
fish = []
ber = []
goldfish = Goldfish()
sandvenfish = Sandvenfish()
clarfish = Clarfish()
ber.append(goldfish)
ber.append(sandvenfish)
ber.append(clarfish)

while turtle.power:   
    new_fish = r.choice(ber)
    fish.append(new_fish)

    if not turtle.power:
        print("小龟龟没有体力啦,游戏结束^_^")
        break
    else:
        pos = turtle.move()
        for each in fish[:]:
            if each.move() == pos:
                turtle.eat()
                fish.remove(each)
                if each == goldfish:
                    print("一条小金鱼被吃掉了^_^")
                    if turtle.level < 15:
                        print(f"小龟龟升级啦,当前等级{turtle.level}")
                    print(f"小龟龟当前体力值为{turtle.power},当前体力上限为{turtle.power_legal}")

                elif each == sandvenfish:
                    print("一条三文鱼被吃掉了^_^")
                    if turtle.level < 15:
                        print(f"小龟龟升级啦,当前等级{turtle.level}")
                    print(f"小龟龟当前体力值为{turtle.power},当前体力上限为{turtle.power_legal}")

                else:
                    print("一条小鲤鱼被吃掉了^_^")
                    if turtle.level < 15:
                        print(f"小龟龟升级啦,当前等级{turtle.level}")
                    print(f"小龟龟当前体力值为{turtle.power},当前体力上限为{turtle.power_legal}")

最佳答案
2021-9-24 15:26:07
  1. import random
  2. import numpy as np

  3. class Turtle:
  4.     def __init__(self, stamina = 100):
  5.         self.stamina = stamina
  6.         self.x = random.randint(0, 10)
  7.         self.y = random.randint(0, 10)
  8.         self.point = (self.x, self.y)
  9.    
  10.     def move(self):
  11.         while True:
  12.             a = (self.x + random.choice([-2, -1, 1, 2]))%10
  13.             b = (self.y + random.choice([-2, -1, 1, 2]))%10
  14.             if a >= 0 and b >= 0:
  15.                 self.x = a
  16.                 self.y = b
  17.                 break
  18.         self.point = (self.x, self.y)
  19.         self.stamina -= 1


  20. class Fish:
  21.     def __init__(self):
  22.         self.x = random.randint(0, 10)
  23.         self.y = random.randint(0, 10)
  24.         self.point = (self.x, self.y)
  25.    
  26.     def move(self):
  27.         while True:
  28.             a = (self.x + random.choice([-2, -1, 1, 2]))%10
  29.             b = (self.y + random.choice([-2, -1, 1, 2]))%10
  30.             if a >= 0 and b >= 0:
  31.                 self.x = a
  32.                 self.y = b
  33.                 break
  34.         self.point = (self.x, self.y)

  35. class AllFish:
  36.     def __init__(self):
  37.         self.allfish = [Fish() for _ in range(10)]
  38.    
  39.     def position(self):
  40.         return [i.point for i in self.allfish]
  41.    
  42.     def kill(self, point):
  43.         for n, i in enumerate(self.allfish):
  44.             if i.point == point:
  45.                 self.allfish.pop(n)
  46.                 break

  47. def coordinate(A, B):
  48.     res = [[" " for _ in range(10)] for _ in range(10)]
  49.     res[A[0]][A[1]] = "T"
  50.     for i in B:
  51.         x, y = i
  52.         res[y][x] = "F"
  53.     res = np.array(res)
  54.     print(res)

  55. t = Turtle()
  56. f = AllFish()

  57. while True:
  58.     if not f.allfish:
  59.         print("鱼被吃完了,最后乌龟位置:")
  60.         coordinate(t.point, f.position())
  61.         break
  62.     if not t.stamina:
  63.         print(f"乌龟体力耗尽了,鱼剩下 {len(f.allfish)} 只,最后鱼和乌龟位置:")
  64.         coordinate(t.point, f.position())
  65.         break
  66.     t.move()
  67.     for i in f.allfish:
  68.         i.move()
  69.     if t.point in f.position():
  70.         print(f"地标:{t.point} 鱼被乌龟吃了")
  71.         f.kill(t.point)
  72.         t.stamina += 20
  73.         if t.stamina > 100:
  74.             t.stamina = 100
复制代码
  1. 地标:(4, 7) 鱼被乌龟吃了
  2. 地标:(5, 9) 鱼被乌龟吃了
  3. 地标:(9, 6) 鱼被乌龟吃了
  4. 地标:(8, 0) 鱼被乌龟吃了
  5. 地标:(4, 4) 鱼被乌龟吃了
  6. 地标:(2, 2) 鱼被乌龟吃了
  7. 地标:(4, 1) 鱼被乌龟吃了
  8. 地标:(2, 3) 鱼被乌龟吃了
  9. 地标:(4, 6) 鱼被乌龟吃了
  10. 乌龟体力耗尽了,鱼剩下 1 只,最后鱼和乌龟位置:
  11. [[' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  12. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  13. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  14. [' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' ' ']     
  15. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  16. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  17. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  18. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  19. [' ' 'F' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  20. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']]  
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-23 09:24:17 | 显示全部楼层
可以把问题精简一下吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-24 15:26:07 | 显示全部楼层    本楼为最佳答案   
  1. import random
  2. import numpy as np

  3. class Turtle:
  4.     def __init__(self, stamina = 100):
  5.         self.stamina = stamina
  6.         self.x = random.randint(0, 10)
  7.         self.y = random.randint(0, 10)
  8.         self.point = (self.x, self.y)
  9.    
  10.     def move(self):
  11.         while True:
  12.             a = (self.x + random.choice([-2, -1, 1, 2]))%10
  13.             b = (self.y + random.choice([-2, -1, 1, 2]))%10
  14.             if a >= 0 and b >= 0:
  15.                 self.x = a
  16.                 self.y = b
  17.                 break
  18.         self.point = (self.x, self.y)
  19.         self.stamina -= 1


  20. class Fish:
  21.     def __init__(self):
  22.         self.x = random.randint(0, 10)
  23.         self.y = random.randint(0, 10)
  24.         self.point = (self.x, self.y)
  25.    
  26.     def move(self):
  27.         while True:
  28.             a = (self.x + random.choice([-2, -1, 1, 2]))%10
  29.             b = (self.y + random.choice([-2, -1, 1, 2]))%10
  30.             if a >= 0 and b >= 0:
  31.                 self.x = a
  32.                 self.y = b
  33.                 break
  34.         self.point = (self.x, self.y)

  35. class AllFish:
  36.     def __init__(self):
  37.         self.allfish = [Fish() for _ in range(10)]
  38.    
  39.     def position(self):
  40.         return [i.point for i in self.allfish]
  41.    
  42.     def kill(self, point):
  43.         for n, i in enumerate(self.allfish):
  44.             if i.point == point:
  45.                 self.allfish.pop(n)
  46.                 break

  47. def coordinate(A, B):
  48.     res = [[" " for _ in range(10)] for _ in range(10)]
  49.     res[A[0]][A[1]] = "T"
  50.     for i in B:
  51.         x, y = i
  52.         res[y][x] = "F"
  53.     res = np.array(res)
  54.     print(res)

  55. t = Turtle()
  56. f = AllFish()

  57. while True:
  58.     if not f.allfish:
  59.         print("鱼被吃完了,最后乌龟位置:")
  60.         coordinate(t.point, f.position())
  61.         break
  62.     if not t.stamina:
  63.         print(f"乌龟体力耗尽了,鱼剩下 {len(f.allfish)} 只,最后鱼和乌龟位置:")
  64.         coordinate(t.point, f.position())
  65.         break
  66.     t.move()
  67.     for i in f.allfish:
  68.         i.move()
  69.     if t.point in f.position():
  70.         print(f"地标:{t.point} 鱼被乌龟吃了")
  71.         f.kill(t.point)
  72.         t.stamina += 20
  73.         if t.stamina > 100:
  74.             t.stamina = 100
复制代码
  1. 地标:(4, 7) 鱼被乌龟吃了
  2. 地标:(5, 9) 鱼被乌龟吃了
  3. 地标:(9, 6) 鱼被乌龟吃了
  4. 地标:(8, 0) 鱼被乌龟吃了
  5. 地标:(4, 4) 鱼被乌龟吃了
  6. 地标:(2, 2) 鱼被乌龟吃了
  7. 地标:(4, 1) 鱼被乌龟吃了
  8. 地标:(2, 3) 鱼被乌龟吃了
  9. 地标:(4, 6) 鱼被乌龟吃了
  10. 乌龟体力耗尽了,鱼剩下 1 只,最后鱼和乌龟位置:
  11. [[' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  12. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  13. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  14. [' ' ' ' ' ' ' ' ' ' 'T' ' ' ' ' ' ' ' ']     
  15. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  16. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  17. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  18. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  19. [' ' 'F' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']     
  20. [' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ']]  
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-27 15:35:45 | 显示全部楼层
newu 发表于 2021-9-23 09:24
可以把问题精简一下吗

不好意思,最近感冒了,一直没上鱼C官网,今天才看到回复,这个游戏我就是想在小甲鱼留的课后作业的基础上扩展一下,给乌龟加个等级的属性,原来是想着升级的条件是阶梯式增长,但是发现自己做不出来,就只好作罢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-27 15:43:02 | 显示全部楼层

不好意思,最近感冒了,一直没上鱼C官网,今天才看到回复,大佬辛苦了,就是还有点想法,那个乌龟升级的那里大佬好像漏了哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 06:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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