很常见的游戏之一,实现原理并不复杂,并且参考了几个相关的代码。这边主要还是以学习编程语言和学习编程思路为重点记录一下吧。最近时间有点吃紧,只能匆忙记录一下。用pygame做的大鱼吃小鱼的游戏截图如下:(有些鱼的图片背景没有做透明处理,这块确实需要点美工时间,只能先凑合了)。

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

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

 

下面的图片是网上随便找的素材,这里用于切换主角的图片有三张,其他则是其他小鱼和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()
View Code

相关文章: