写简单游戏,学编程语言-python篇:大鱼吃小鱼
一、玩法及逻辑相关:
控制你的鱼,有个初始大小,当碰到比你小的鱼的时候,你会吃掉它,并且会变大;遇到比你大的鱼,受到一点伤害,当总生命值为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》,哎 只能说有巨人的肩膀上站真好。
上一篇: Python::OS 模块 -- 简介
下一篇: 跳表的python实现