YIRANNA 发表于 2021-1-27 21:16:32

小甲鱼作业题 乌龟吃鱼

没什么别的意思,就想看乌龟赢一次,写了如下代码
import random as r
legal_x=
legal_y=
class Turtle :
    def __init__(self):
      self.power=100
      self.x=r.randint(0,10)
      self.y=r.randint(0,10)
    def move(self):
      new_x=self.x+r.choice()
      new_y=self.y+r.choice()
      if new_x>=legal_x:
            new_x=10-(new_x-10)
      if new_x<=legal_x:
            new_x=0-new_x
      self.x=new_x
      self.y=new_y
      self.power-=1
      return(self.x,self.y)
    def eat(self):
      self.power+=20
class Fish():
    def __init__(self):
      self.hp=1
      self.x=r.randint(0,10)
      self.y=r.randint(0,10)
    def move(self):
      if self.hp==0:
            self.x=-1
            self.y=-1
            return(self.x,self.y)            
      new_x=self.x+r.choice()
      new_y=self.y+r.choice()
      if new_x>=legal_x:
            new_x=10-(new_x-10)
      if new_x<=legal_x:
            new_x=0-new_x
      self.x=new_x
      self.y=new_y
      return(self.x,self.y)            
    def beeat(self):
      self.hp-=1

turtle=Turtle()
fish_list=[]
for i in range(0,10):
    new_fish=Fish()
    fish_list.append(new_fish)
fish_eat=0
while 1:
    if turtle.power==0:
      print(fish_eat)
      print('turtle die')
      break
    if len(fish_list)==0:
      print('turtle became more powerful')
      break
    turtle.move()
    for v in range(0,len(fish_list)):
      fish_list.move()
      if fish_list.x==turtle.x and fish_list.y ==turtle.y:
            fish_list.beeat()
            turtle.eat()
            print('turtle eat')
    for i in range(0,len(fish_list)):
      if fish_list.x==-1 and fish_list.y==-1:
            fish_eat+=1
    if fish_eat==len(fish_list):
      print(fish_eat)
      print('turtle became more powerful')
      break
我个人认为问题出现在fish_eat上,或者前面的fish.move中的if hp==0里

Twilight6 发表于 2021-1-28 09:39:05



这个乌龟吃鱼游戏本身对乌龟就不友好哈,你将乌龟生命值调高些即可:

部分修改,参考代码:

import random as r
legal_x=
legal_y=
class Turtle :
    def __init__(self):
      self.power= 1000
      self.x=r.randint(0,10)
      self.y=r.randint(0,10)
    def move(self):
      new_x=self.x+r.choice()
      new_y=self.y+r.choice()
      if new_x>=legal_x:
            new_x=10-(new_x-10)
      if new_x<=legal_x:
            new_x=0-new_x
      self.x=new_x
      self.y=new_y
      self.power-=1
      return(self.x,self.y)
    def eat(self):
      self.power+=1000
class Fish():
    def __init__(self):
      self.hp=1
      self.x=r.randint(0,10)
      self.y=r.randint(0,10)
    def move(self):
      if self.hp==0:
            self.x=-1
            self.y=-1
            return(self.x,self.y)            
      new_x=self.x+r.choice()
      new_y=self.y+r.choice()
      if new_x>=legal_x:
            new_x=10-(new_x-10)
      if new_x<=legal_x:
            new_x=0-new_x
      self.x=new_x
      self.y=new_y
      return(self.x,self.y)            
    def beeat(self):
      self.hp-=1

turtle=Turtle()
fish_list=[]
for i in range(0,10):
    new_fish=Fish()
    fish_list.append(new_fish)
fish_eat=0
while 1:
   if turtle.power==0:
      print('The turtle ate %d fish.'%fish_eat)
      print('turtle die')
      break
   if len(fish_list)==0:
      print('turtle became more powerful')
      break
   turtle.move()
   for v in range(0,len(fish_list)):
      fish_list.move()
      if fish_list.x==turtle.x and fish_list.y ==turtle.y:
          fish_list.beeat()
          turtle.eat()
          print('turtle ate a fish~')
          fish_eat+=1
   if fish_eat == len(fish_list):
          print('The turtle ate up all the fish.')
          print('turtle victory!')
          break
页: [1]
查看完整版本: 小甲鱼作业题 乌龟吃鱼