jack_xy 发表于 2020-8-31 08:45:23

乌龟和鱼的游戏故事

乌龟和鱼的游戏故事[/b]
   假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
   游戏生成1只乌龟和10条鱼
    它们的移动方向均随机
    乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
   游戏界面:
      
    import random
import time
import winsound

class Turtle:
    def __init__(self):
      self.x =random.randint(0,9)
      self.y =random.randint(0,9)
      self.worth = 100
    def move(self):
      direction =random.randint(1,4)#1 代表向左;2代表向右;3代表向上;4代表向下
      step =random.randint(1,2) #移动距离
      if direction == 1:
            self.x -=step
            if self.x<0:
                self.x *=-1
      elif direction ==2:
            self.x +=step
            if self.x>=10:
                self.x -=10
      elif direction ==3:
            self.y +=step
            if self.y>=10:
                self.y -=10
      else:
            self.y -=step
            if self.y<0:
                self.y *=-1
      self.worth -=1
      
   
   
    def eatfish(self):
      self.worth += 20
      return self.worth

    def getposition(self):
      #print(self.x,self.y,"in Turtle")
      return
   

class Fish:
    def __init__(self):
      self.x =random.randint(0,9)
      self.y =random.randint(0,9)
      self.worth = 20

    def move(self):
      direction =random.randint(1,4)#1 代表向左;2代表向右;3代表向上;4代表向下
      step = 1 #移动距离
      if direction == 1:
            self.x -=step
            if self.x<0:
                self.x *=-1
      elif direction ==2:
            self.x +=step
            if self.x>=10:
                self.x -=10
      elif direction ==3:
            self.y +=step
            if self.y>=10:
                self.y -=10
      else:
            self.y -=step
            if self.y<0:
                self.y *=-1
               
    def getposition(self):
      #print(self.x,self.y,"in Fish")
      return
   
    def destroyed(self):
      self.worth = 0

class Pool:
    #turtle1 =Turtle()#生成乌龟1只
    def __init__(self):
      self.turtle1 = Turtle()
      self.listFish = [] #生成鱼群---10只
      for i in range(10):
            self.listFish.append(Fish())            
      self.countTur =1
      self.countFish =10
      self.lines = [] #记录输出界面
      

      



    def judge(self): #游戏结束返回False,否则返回True
      for fish in self.listFish:
            
            if self.turtle1.getposition() == fish.getposition() and fish.worth>0:
                self.turtle1.eatfish()
                fish.destroyed()
                self.countFish -=1
                winsound.Beep(600,50)#吃上鱼发出告警声 50毫秒时间
            
      if (self.countFish == 0 or self.countTur == 0):
            return False
      else:
            return True
      
    def initPanel(self):
      self.lines = []
      self.lines.append("   0123456789")#行号0
      self.lines.append(" |------------------------------")#行号1
      self.lines.append("0||||||||||| 0")#行号2
      self.lines.append(" |-----------------------------|")#行号3
      self.lines.append("1||||||||||| 1")#行号4
      self.lines.append(" |-----------------------------|")#行号5
      self.lines.append("2||||||||||| 2")#行号6
      self.lines.append(" |-----------------------------|")#行号7
      self.lines.append("3||||||||||| 3")#行号8
      self.lines.append(" |-----------------------------|")#行号9
      self.lines.append("4||||||||||| 4")#行号10
      self.lines.append(" |-----------------------------|")#行号11
      self.lines.append("5||||||||||| 5")#行号12
      self.lines.append(" |-----------------------------|")#行号13
      self.lines.append("6||||||||||| 6")#行号14
      self.lines.append(" |-----------------------------|")#行号15
      self.lines.append("7||||||||||| 7")#行号16
      self.lines.append(" |-----------------------------|")#行号17
      self.lines.append("8||||||||||| 8")#行号18
      self.lines.append(" |-----------------------------|")#行号19
      self.lines.append("9||||||||||| 9")#行号20
      self.lines.append("1|--------------------------------------------------------------------------------|")#行号21
      self.lines.append("2|鱼      |鱼   |鱼   |鱼   |鱼   |鱼   |鱼   |鱼   |鱼   |鱼   |")#行号22
      self.lines.append("3|1       |2      |3      |4      |5      |6      |7      |8      |9      |10   |")#行号23
      self.lines.append("4|--------------------------------------------------------------------------------|")#行号24
      self.lines.append("5|      |       |       |       |       |       |       |       |       |       |")#行号25 鱼的生命值
      self.lines.append("6|--------------------------------------------------------------------------------| ")#行号26
      self.lines.append("7|      |       |       |       |       |       |       |       |       |       |")#行号27 鱼的位置
      self.lines.append("8|--------------------------------------------------------------------------------|")#行号28
      self.lines.append("9|乌龟X生命值及位置:                                                             |")#行号29
      self.lines.append("0|--------------------------------------------------------------------------------|")#行号30
      self.lines.append("9|活乌龟数量:                  |活鱼数量:                                     |")#行号31
               
    def display(self):
      
      self.lines = []
      self.initPanel()
      
      #显示鱼的位置,及生命值,活鱼用#表示,死鱼用.表示
      for i in range(10):
            self.lines=self.lines+str(self.listFish.worth)+self.lines.worth)):]#生命值
            posXy=str(self.listFish.x)+":"+str(self.listFish.y)
            self.lines=self.lines+posXy+self.lines#X:Y坐标
            
            #显示鱼的生命值
            if self.listFish.worth>0:
                self.lines.x*2+2]=self.lines.x*2+2].y*3+2]+"="+self.lines.x*2+2].y*3+3:]
                #显示活鱼的位置
            else:
                self.lines.x*2+2]=self.lines.x*2+2].y*3+2]+"."+self.lines.x*2+2].y*3+3:]
                #显示死鱼位置
      ########################################################################
               
      self.lines=self.lines+"X"+self.lines
      self.lines=self.lines+str(self.turtle1.worth)+" "+str(self.turtle1.x)+":"+str(self.turtle1.y)+self.lines
      #显示乌龟位置及生命值

      #############################################################################
      self.lines=self.lines+str(self.countTur)+self.lines+str(self.countFish)+self.lines

      #####统一显示
      for each in self.lines:
            print(each)
               
               
      
      

    def act(self):
      if self.turtle1.worth>0:
            self.turtle1.move()#乌龟移动            
            if self.turtle1.worth<=0:#如果乌龟生命值为零 则调整池子中乌龟的数量
                self.countTur=0
      for fish in self.listFish:#鱼群移动
            if fish.worth>0:
                fish.move()

      
               
      result = self.judge() #判断一下乌龟有无吃到鱼群中的鱼,并由此乌龟调整生命值和存活鱼的数量
                              #池子中如果鱼,或龟的数量有一个为零,则返回False游戏结束,否则返回True
      
      
      self.display()#显示移动和判定后所有动物(乌龟和鱼)的位置及新的生命值
      
      return result
      
      
      
   
myPool =Pool()   
while True:
      
      
      
       result =myPool.act()
       if result==False:
         break
      
      
      
   
当移动到场景边缘,自动向反方向移动
乌龟初始化体力为100(上限)
乌龟每移动一次,体力消耗1
当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
鱼暂不计算体力
当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束

我想吃甲鱼汤 发表于 2020-8-31 23:12:18

你的那个打印出来的代码有点重复麻烦了,可以在改进一下
页: [1]
查看完整版本: 乌龟和鱼的游戏故事