pygame----贪吃蛇

霸气de小男生 提交于 2020-03-12 11:30:28

开发工具:pycharm

游戏介绍:通过按键盘上的WDAS键来实现蛇的移动来吃进食物,使蛇变长,当蛇碰到边界则死亡,界面出现game over

程序设计步骤:

1.导入游戏所需模板

2.设置窗口

3.蛇移动

4.游戏结束约束条件

5.游戏结束界面

一,导入游戏所需模板

import pygame,sys,time,random
from pygame.locals import *

二,设置窗口

playSurface=pygame.display.set_mode((640,480))
pygame.display.set_caption("贪吃蛇游戏")

三,蛇移动

1. 初始化蛇的长度和一些食物用量

redColor=pygame.Color(255,0,0)
blackColor=pygame.Color(0,0,0)
whiteColor=pygame.Color(255,255,255)
greyColor=pygame.Color(150,150,150)
snakePosition=[100,100]
snakeSegments=[[100,100],[80,100],[60,100]]
raspberryPosition=[300,300]
raspberrySpawned=1
direction='right'
changeDirection=direction

2. 使用while侦听事件

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_DOLLAR 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

3.通过像素的加减确定蛇头的移动向上或向下加减20px相当于向上下移动一步

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,32)
    y=random.randrange(1,24)
    raspberryPosition=[int(x*20),int(y*20)]
raspberrySpawned=1
playSurface.fill(blackColor)

4.

四,游戏结束约束条件

if snakePosition[0]>620 or snakePosition[0] < 0:
    gameOver()
if snakePosition[1] > 460 or snakePosition[1] < 0:
    gameOver()
for snakeBody in snakeSegments[1:]:
    if snakePosition[0]==snakeBody[0] and snakePosition[1]==snakeBody[1]:
        gameOver()

五,游戏结束界面

def gameOver():
    gameOverFont=pygame.font.Font('simfang.ttf',72)
    gameOverSurf=gameOverFont.render('Game Over',True,greyColor)
    gameOverRect=gameOverSurf.get_rect()
    gameOverRect.midtop=(320,10)
    playSurface.blit(gameOverSurf,gameOverRect)
    pygame.display.flip()
    time.sleep(5)
    pygame.quit()
    sys.exit()

参考代码:

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("贪吃蛇游戏")
redColor=pygame.Color(255,0,0)
blackColor=pygame.Color(0,0,0)
whiteColor=pygame.Color(255,255,255)
greyColor=pygame.Color(150,150,150)
snakePosition=[100,100]
snakeSegments=[[100,100],[80,100],[60,100]]
raspberryPosition=[300,300]
raspberrySpawned=1
direction='right'
changeDirection=direction

def gameOver():
    gameOverFont=pygame.font.Font('simfang.ttf',72)
    gameOverSurf=gameOverFont.render('Game Over',True,greyColor)
    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_DOLLAR 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,32)
        y=random.randrange(1,24)
        raspberryPosition=[int(x*20),int(y*20)]
    raspberrySpawned=1
    playSurface.fill(blackColor)
    for position in snakeSegments:
        pygame.draw.rect(playSurface,whiteColor,Rect(position[0],position[1],20,20))
    pygame.draw.rect(playSurface,redColor,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 snakeSegments[1:]:
        if snakePosition[0]==snakeBody[0] and snakePosition[1]==snakeBody[1]:
            gameOver()
    fpsClock.tick(10)

 

运行结果:

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!