条件:


# 检测例如按键等pygame事件

 for event in pygame.event.get():

     if event.type == QUIT:

         pygame.quit()

         sys.exit()

     elif event.type == KEYDOWN:

         # 判断键盘事件

         if event.key == K_RIGHT or event.key == ord('d'):

             changeDirection = 'right'

        if event.key == K_LEFT or event.key == ord('a'):

            changeDirection = 'left'

        if event.key == K_UP or event.key == ord('w'):

            changeDirection = 'up'

        if event.key == K_DOWN or event.key == ord('s'):

            changeDirection = 'down'

        if event.key == K_ESCAPE:

            pygame.event.post(pygame.event.Event(QUIT))

# 判断是否输入了反方向

if changeDirection == 'right' and not direction == 'left':

    direction = changeDirection

if changeDirection == 'left' and not direction == 'right':

    direction = changeDirection

if changeDirection == 'up' and not direction == 'down':

    direction = changeDirection

if changeDirection == 'down' and not direction == 'up':

    direction = changeDirection

方向设置好了,那么贪吃蛇蛇身变换怎么做啊?很简单,我们只需要根据方向变换一下坐标即可。


# 根据方向移动蛇头的坐标

 if direction == 'right':

     snakePosition[0] += 20

 if direction == 'left':

     snakePosition[0] -= 20

 if direction == 'up':

     snakePosition[1] -= 20

 if direction == 'down':

     snakePosition[1] += 20

# 增加蛇的长度

snakeSegments.insert(0,list(snakePosition))

贪吃蛇游戏里面最重要的就是食物判断和死亡判断。首先是食物判断,我们通过键盘按键来决定贪吃蛇的走向,以便它能吃到树莓。如何判断贪吃蛇有没有吃到树莓呢?很简单,如果贪吃蛇蛇头的位置和树莓的位置重合了,也就是相同,那么贪吃蛇就吃到树莓了,否则没有。同时,一旦发生了树莓被吃的情况,立刻重新随机生成一个新的树莓。相关代码如下:


# 判断是否吃掉了树莓

 if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:

     raspberrySpawned = 0

  else:

     snakeSegments.pop() #若没有吃掉树莓,需将最后一单位的蛇身提出列表,此处和蛇身移动时位置变换有关

 # 如果吃掉树莓,则重新生成树莓

 if raspberrySpawned == 0:

     x = random.randrange(1,30) #和游戏界面大小相关

     y = random.randrange(1,23)

    raspberryPosition = [int(x*20),int(y*20)]

    raspberrySpawned = 1

    score += 1

死亡判断则分为两类情况,一是触碰到了游戏界面的边界,二是贪吃蛇触碰到了自己的身体。一旦发生死亡,则触发gameover。


# 判断是否死亡

if snakePosition[0] > 600 or snakePosition[0] < 0: #若超过左右边界,触发gameover

    gameOver(playSurface,score)

if snakePosition[1] > 460 or snakePosition[1] < 0: #若超过上下边界,触发gameover

    gameOver(playSurface,score)

for snakeBody in snakeSegments[1:]: #若触碰到自己的身体,触发gameover

    if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:

        gameOver(playSurface,score)

贪吃蛇运动和吃掉树莓的过程中,游戏界面需要不断更新。同时,我们设置了游戏速度。


# 绘制pygame显示层

 playSurface.fill(blackColour) #蛇身为白色

 for position in snakeSegments:

     pygame.draw.rect(playSurface,whiteColour,Rect(position[0],position[1],20,20))

     pygame.draw.rect(playSurface,redColour,Rect(raspberryPosition[0], raspberryPosition[1],20,20))

 

 # 刷新pygame显示层

 pygame.display.flip()

 # 控制游戏速度

fpsClock.tick(5)

至此,我们就能完成一个贪吃蛇小游戏了。赶紧去实验一下吧!