Game case based on pygame

Game case based on pygame

  • Development tool: python
  • Development platform: pycharm
  • Game case: greedy snake
  • Rules of the game:

The keyboard wasd controls the direction of the snake and looks for the food. The body of the strawberry snake will eat more and more and touch the wall. If it bites its own body or its tail, the game is over.

1, Snake game

Game screenshots

code analysis

Color definition:

redColour = pygame.Color(255, 0, 0)
blackColour = pygame.Color(0, 0, 0)
whiteColour = pygame.Color(255, 255, 255)
greyColour = pygame.Color(150, 150, 150)

Initialization variable:

snakePosition = [100,100]
snakeSements = [[100,100],[80,100],[60,100]]
raspberryPosition = [300,300]
raspberrySpawned = 1
direction = 'right'
changeDirection = direction

Add a section of the snake's body to the head:

snakeSements.insert(0,list(snakePosition))

Check whether the X and Y coordinates of the snake head are equal to the X and Y coordinates of strawberry:

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

The font here can be set freely. The system font should be selected because there is no imitation song font:

gameOverFont = pygame.font.SysFont('arial',72)
Part of code
import pygame,sys,time,random
from pygame.locals import *
pygame.init()
fpsClock = pygame.time.Clock()
playSurface = pygame.display.set_mode((640,480))
pygame.display.set_caption('Snake game')
redColour = pygame.Color(255, 0, 0)
blackColour = pygame.Color(0, 0, 0)
whiteColour = pygame.Color(255, 255, 255)
greyColour = pygame.Color(150, 150, 150)
snakePosition = [100,100]
snakeSements = [[100,100],[80,100],[60,100]]
raspberryPosition = [300,300]
raspberrySpawned = 1
direction = 'right'
changeDirection = direction

def gameOver():
    gameOverFont = pygame.font.SysFont('arial',72)
    gameOverSurf = gameOverFont.render('Game Over',True,greyColour)
    gameOverRect = gameOverSurf.get_rect()
    gameOverRect.midtop = (320 ,10)
    playSurface.blit(gameOverSurf,gameOverRect)
    pygame.display.flip()
    time.sleep(5)
    pygame.quit()
    sys.exit()
while True:
    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
    snakeSements.insert(0,list(snakePosition))
    if snakePosition[0] == raspberryPosition[0] and snakePosition[1] == raspberryPosition[1]:
        raspberrySpawned = 0
    else:
        snakeSements.pop()
    if raspberrySpawned == 0:
        x = random.randrange(1,32)
        y = random.randrange(1,24)
        raspberryPosition = [int(x*20),int(y*20)]
    raspberrySpawned = 1
    playSurface.fill(blackColour)
    for position in snakeSements:
        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.display.flip()
    if snakePosition[0]>620 or snakePosition[0]<0:
        gameOver()
    if snakePosition[1]>460 or snakePosition[1]<0:
        gameOver()
    for snakeBody in snakeSements[1:]:
        if snakePosition[0] == snakeBody[0] and snakePosition[1] == snakeBody[1]:
            gameOver()
    fpsClock.tick(10)

Tags: Python Pycharm

Posted on Tue, 17 Mar 2020 10:09:03 -0400 by johnpdmccall