很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码。这边主要还是以学习编程语言和学习编程思路为重点记录一下吧。最近时间有点吃紧,只能匆忙记录一下。用pygame做的大鱼吃小鱼的游戏截图如下:(有些鱼的图片背景没有做透明处理,这块确实需要点美工时间,只能先凑合了)。
下面的图片是网上随便找的素材,这里用于切换主角的图片有三张,其他则是其他小鱼和boss鱼。我们控制的主人鱼的大小范围来决定加载不同的图片。以上准备的素材,其中一些背景色没有时间做处理,所以游戏中会有难看的背景色,只能凑合着用。。。
一、玩法及逻辑相关:
控制你的鱼,有个初始大小,当碰到比你小的鱼的时候,你会吃掉它,并且会变大;遇到比你大的鱼,受到一点伤害,当总生命值为0时,失败游戏结束;当你控制的鱼大小增大最大时,游戏获胜。当鱼受到伤害时,有一段时间是无敌时间,且会闪烁。下面是主要的逻辑处理代码
1 flashIsOn=round(time.time(),1)*10%2==1 2 if not gameOverMode and not (invulnerableMode and flashIsOn): 3 playerobj['rect']=pygame.Rect((playerobj['x']-camerax,playerobj['y'] 4 -cameray,playerobj['size'],playerobj['size'])) 5 SCREEN.blit(playerobj['surface'],playerobj['rect']) 6 for event in pygame.event.get(): 7 if event.type == QUIT: 8 pygame.quit() 9 sys.exit() 10 elif event.type==KEYDOWN: 11 if event.key in (K_UP,K_w): 12 moveDown =False 13 moveUp = True 14 elif event.key in (K_DOWN,K_s): 15 moveDown =True 16 moveUp = False 17 elif event.key in (K_LEFT,K_a): 18 moveRight = False 19 moveLeft= True 20 if playerobj['facing']==RIGHT: 21 playerobj['surface']=playersurfaceset(playerobj['size'], True) 22 playerobj['facing']=LEFT 23 elif event.key in (K_RIGHT,K_d): 24 moveRight = True 25 moveLeft= False 26 if playerobj['facing']==LEFT: 27 playerobj['surface']=playersurfaceset(playerobj['size'], False) 28 playerobj['facing']=RIGHT 29 elif winMode and event.key == K_r: 30 return 31 elif event.type==KEYUP: 32 if event.key in (K_LEFT,K_a): 33 moveLeft=False 34 elif event.key in (K_RIGHT,K_d): 35 moveRight=False 36 elif event.key in (K_UP,K_w): 37 moveRight=False 38 elif event.key in (K_DOWN,K_s): 39 moveRight=False 40 if not gameOverMode: 41 if moveLeft: 42 playerobj['x']-=MOVESPEED 43 if moveRight: 44 playerobj['x']+=MOVESPEED 45 if moveUp: 46 playerobj['y']-=MOVESPEED 47 if moveDown: 48 playerobj['y']+=MOVESPEED 49 for i in range(len(fishobjs)-1,-1,-1): 50 obj=fishobjs[i] 51 if 'rect' in obj and playerobj['rect'].colliderect(obj['rect']): 52 if obj['width']*obj['height']<=playerobj['size']**2: 53 playerobj['size']+=int((obj['width']*obj['height'])**0.2) 54 del fishobjs[i] 55 if playerobj['face']== LEFT: 56 playerobj['surface']=playersurfaceset(playerobj['size'],True) 57 if playerobj['face']== RIGHT: 58 playerobj['surface']=playersurfaceset(playerobj['size'],False) 59 if playerobj['size']>WINSIZE: 60 winMode=True 61 elif not invulnerableMode: 62 invulnerableMode=True 63 invulnerableStartTime=time.time() 64 playerobj['health']-=1 65 if playerobj['health']==0: 66 gameOverMode =True 67 gameOverStartTime=time.time()