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


下面的图片是网上随便找的素材,这里用于切换主角的图片有三张,其他则是其他小鱼和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》,哎 只能说有巨人的肩膀上站真好。
 
 

评论关闭