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_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,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)
游戏运行图

来源:oschina
链接:https://my.oschina.net/u/4463123/blog/3195210