鱼C论坛

 找回密码
 立即注册
查看: 1790|回复: 1

[原创] 乌龟和鱼的游戏故事

[复制链接]
发表于 2020-8-31 08:45:23 | 显示全部楼层 |阅读模式

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

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

x
[b]乌龟和鱼的游戏故事[/b]
     假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
     游戏生成1只乌龟和10条鱼
    它们的移动方向均随机
    乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
   游戏界面: 037-01游戏界面.jpg
      
  
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 [self.x,self.y]
    

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 [self.x,self.y]
    
    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("   0  1  2  3  4  5  6  7  8  9  ")#行号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[25]=self.lines[25][0:3+8*i]+str(self.listFish[i].worth)+self.lines[25][3+8*i+len(str(self.listFish[i].worth)):]#生命值
            posXy=str(self.listFish[i].x)+":"+str(self.listFish[i].y) 
            self.lines[27]=self.lines[27][0:3+8*i]+posXy+self.lines[27][3+8*i+len(posXy):]#X:Y坐标
            
            #显示鱼的生命值
            if self.listFish[i].worth>0:
                self.lines[self.listFish[i].x*2+2]=self.lines[self.listFish[i].x*2+2][0:self.listFish[i].y*3+2]+"="+self.lines[self.listFish[i].x*2+2][self.listFish[i].y*3+3:]
                #显示活鱼的位置
            else:
                self.lines[self.listFish[i].x*2+2]=self.lines[self.listFish[i].x*2+2][0:self.listFish[i].y*3+2]+"."+self.lines[self.listFish[i].x*2+2][self.listFish[i].y*3+3:]
                #显示死鱼位置
        ########################################################################
                
        self.lines[self.turtle1.x*2+2]=self.lines[self.turtle1.x*2+2][0:self.turtle1.y*3+2]+"X"+self.lines[self.turtle1.x*2+2][self.turtle1.y*3+3:]
        self.lines[29]=self.lines[29][0:14]+str(self.turtle1.worth)+" "+str(self.turtle1.x)+":"+str(self.turtle1.y)+self.lines[29][18+len(str(self.turtle1.worth)):]
        #显示乌龟位置及生命值

        #############################################################################
        self.lines[31]=self.lines[31][0:12]+str(self.countTur)+self.lines[31][13:42]+str(self.countFish)+self.lines[31][42+len(str(self.countFish)):]

        #####统一显示
        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游戏结束
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 23:12:18 From FishC Mobile | 显示全部楼层
你的那个打印出来的代码有点重复麻烦了,可以在改进一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 13:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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