开发工具: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)
运行结果:

来源:oschina
链接:https://my.oschina.net/u/4463382/blog/3192390