欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

写简单游戏,学编程语言-python篇:大鱼吃小鱼

程序员文章站 2022-06-25 15:47:43
下面的图片是网上随便找的素材,这里用于切换主角的图片有三张,其他则是其他小鱼和boss鱼。我们控制的主人鱼的大小范围来决定加载不同的图片。以上准备的素材,其中一些背景色没有时间做处...
下面的图片是网上随便找的素材,这里用于切换主角的图片有三张,其他则是其他小鱼和boss鱼。我们控制的主人鱼的大小范围来决定加载不同的图片。以上准备的素材,其中一些背景色没有时间做处理,所以游戏中会有难看的背景色,只能凑合着用。。。

 

一、玩法及逻辑相关:

 

  控制你的鱼,有个初始大小,当碰到比你小的鱼的时候,你会吃掉它,并且会变大;遇到比你大的鱼,受到一点伤害,当总生命值为0时,失败游戏结束;当你控制的鱼大小增大最大时,游戏获胜。当鱼受到伤害时,有一段时间是无敌时间,且会闪烁。下面是主要的逻辑处理代码

 

  

 

 view code

主人公的控制类似一般的处理,这边用flashisonl来生成时间差(偶数值时间为真)playersurfaceset()函数决定主人公的图片类型。

 

二、敌方鱼的生成处理

 

  上篇做的敌方的处理会在当前视口随即出现,这个突兀感太强,鱼的出现也不能随机显示在当前视口,应该由摄像机视角之外生成才符合常理。并且当鱼离摄像区域太远的距离,需要删除掉鱼对象。

 

1 for i in range(len(fishobjs)-1,-1,-1):

2             if isoutsidearea(camerax,cameray,fishobjs[i]):

3                 del fishobjs[i]

4         while len(fishobjs)<10:

5             fishobjs.append(makenewfish(camerax,cameray))

 

 1 def makenewfish(camerax,cameray):

 2     sq={}

 3     generalsize=random.randint(5,25)

 4     multiplier = random.randint(1,3)

 5     sq['width'] = (generalsize +random.randint(0,10))*multiplier

 6     sq['height']= (generalsize +random.randint(0,10))*multiplier

 7     sq['x'],sq['y']=getrandomoffcamerapos(camerax,cameray,sq['width'],sq['height'])

 8     sq['movx'] = getrandomvelcocity()

 9     sq['movy'] = getrandomvelcocity()

10     if sq['movx']<0:

11         sq['surface']=surfaceset(sq['width'],sq['height'],true)

12     else:

13         sq['surface']=surfaceset(sq['width'],sq['height'],false)

14     return sq

 

三、跟随视角的处理

 

    这个主要是跟随主人公视角的问题,计算出主人公的中心点距离摄像机中心点的距离,当距离偏大的时候,需要移动摄像机的位置,具体处理代码如下:

 

  

 

 

 1         playercenterx=playerobj['x']+int(playerobj['size']/2)

 2         playercentery=playerobj['y']+int(playerobj['size']/2)

 3         if (camerax+half_winwidth)-playercenterx>cameraslack:

 4             camerax=playercenterx+cameraslack-half_winwidth

 5         elif playercenterx-(camerax+half_winwidth)>cameraslack:

 6             camerax=playercenterx-cameraslack-half_winwidth

 7         if (cameray+half_winheight)-playercentery>cameraslack:

 8             cameray=playercentery+cameraslack-half_winheight

 9         elif playercentery-(camerax+half_winheight)>cameraslack:

10             cameray=playercentery-cameraslack-half_winheight

复制代码

 大部分应该介绍的应该就这些了,只能说游戏这块水比较深,只能浅尝辄止一番,python做游戏只能简单玩玩,这块不是他的优势。有人感兴趣的话可以研究它,推荐一本不错的书《making games with python $ pygame》,哎 只能说有巨人的肩膀上站真好。