import pygame as pg #调用pygame库
from random import randint #调用随机库
import sys #调用sys系统库
from pygame.locals import * #导入常量库
FPS=12 #画面帧数,代表蛇的移动速度
window_width=600 #画面宽度
window_height=500 #画面高度
cellsize=20 #游戏窗口内每一小格的大小
cell_width=int(window_width/cellsize)
#屏幕宽度被每一格的宽度整除——横向的格子数
cell_height=int(window_height/cellsize)
#屏幕高度被每一格的高度整除——纵向的格子数
BGcolor=(0,0,0) #背景:黑色
BLUE=(0,0,255) #字幕:蓝色
RED=(255,0,0) #字幕:红色
apple_color=(255,0,0)#蛇吃的苹果——红色
snake_color=(0,150,0)#蛇身的边缘为深绿色
GREEN=(0,255,0) #蛇身绿色
WHITE=(255,255,255) #白色 “game over",score
DARKGRAY=(40,40,40) #深灰 格子边框的颜色
UP="up" #定义蛇移动的四个方向
DOWN="down"
LEFT="left"
RIGHT="right"
HEAD=0 #定义蛇头的变量,设置蛇头吃苹果时使用。
def main():#主函数
global FPSclock,window,BASICFONT#全局变量 时间,窗口,基础字体
pg.init() #初始化游戏
FPSclock=pg.time.Clock() #获取pygame时钟进行计时
window=pg.display.set_mode((window_width,window_height))
#设置屏幕的宽高
BASICFONT=pg.font.Font("freesansbold.ttf",18)#字体,字号
pg.display.set_caption("snake") #游戏标题
showStartScreen() #显示开始画面
while True:#保证整个过程在运动游戏和结束游戏之间循环
runGame()#运行游戏函数(后面会单独定义此函数)
showGameOverScreen()#游戏结束画面(后面单独定义此函数)
def runGame():#定义运行游戏函数
startx=randint(5,cell_width-6) #随机生成:蛇的起点X坐标
starty=randint(5,cell_height-6)#随机生成:蛇的起点Y坐标
#设置蛇的身体,长度为X轴的3个格子
snakeCoords=[{"x":startx,"y":starty},
{"x":startx-1,"y":starty},
{"x":startx-2,"y":starty}]
direction=RIGHT #蛇的初始运动方向 向右
apple=getRandomLocation() #随机生成苹果
while True:#游戏过程的循环
for event in pg.event.get(): #获取事件
if event.type==QUIT: #如果获取的事件类型是“退出”
terminate() #触发退出函数(后面单独定义)
elif event.type==KEYDOWN:
#如果获取的事件类型是“按下键盘按键”
if event.key==K_LEFT and direction !=RIGHT:
#如果按下键盘左键
direction=LEFT #方向向左
elif event.key==K_RIGHT and direction !=LEFT:#右键
direction=RIGHT #方向向右
elif event.key==K_UP and direction !=DOWN:#上键
direction=UP #方向向上
elif event.key==K_DOWN and direction !=UP:#下键
direction=DOWN #方向向下
elif event.key==K_ESCAPE: #ESC键
terminate() #触发退出函数,退出游戏
#判断蛇头是否碰壁
if snakeCoords[HEAD]["x"]==-1 or snakeCoords [HEAD]["x"]==cell_width or snakeCoords[HEAD]["y"]==-1 or snakeCoords [HEAD]["y"]==cell_height:
return #游戏结束,重新开始
#判断蛇头是否碰到自己的身体
for snakeBody in snakeCoords[1:]:
#如果蛇头碰到蛇身
if snakeBody["x"]==snakeCoords[HEAD]["x"] and snakeBody["y"]==snakeCoords[HEAD]["y"]:
return #游戏结束,重新开始
#判断蛇吃到苹果
if snakeCoords[HEAD]["x"]==apple["x"] and snakeCoords [HEAD]["y"]==apple["y"]:
apple=getRandomLocation() #重新生成一个苹果
else:
del snakeCoords [-1] #没吃到苹果,就删除掉蛇身的最后一个格
#根据方向添加新的蛇头
if direction == UP:
newHead={"x":snakeCoords[HEAD]["x"],"y":snakeCoords[HEAD]["y"]-1}
elif direction==DOWN:
newHead={"x":snakeCoords[HEAD]["x"],"y":snakeCoords[HEAD]["y"]+1}
elif direction==LEFT:
newHead={"x":snakeCoords[HEAD]["x"]-1,"y":snakeCoords[HEAD]["y"]}
elif direction==RIGHT:
newHead={"x":snakeCoords[HEAD]["x"]+1,"y":snakeCoords[HEAD]["y"]}
snakeCoords.insert(0,newHead) #添加新蛇头在蛇的最前面
window.fill(BGcolor) #填充背景颜色
drawGrid() #画方格
drawSnake(snakeCoords)#画蛇
drawApple(apple) #画苹果
#显示分数
drawScore(len(snakeCoords)-3)
#蛇的总长度-初始长度=吃掉的苹果数
pg.display.update() #图像更新
FPSclock.tick(FPS) #设置帧率
def drawPressKeyMsg():#定义函数:绘制开始游戏提示信息
pressKeySurf=BASICFONT.render("Press a key to play",True,BLUE)
#提示信息
pressKeyRect=pressKeySurf.get_rect()#获取文字大小
pressKeyRect.topleft=(window_width-200,window_height-30)
#文字放在左下角位置
window.blit(pressKeySurf,pressKeyRect)#在屏幕上显示出来
def checkForKeyPress():#定义函数:检查是否触发按键事件
if len(pg.event.get(QUIT))>0:
terminate()#退出函数
keyUpEvents=pg.event.get(KEYUP)#不按按键
if len(keyUpEvents)==0:
return None #无动作
if keyUpEvents[0].key==K_ESCAPE:#按ESC
terminate() #退出
return keyUpEvents[0].key
def showStartScreen():#定义函数:开始画面
window.fill(BGcolor) #填充背景
titleFont=pg.font.Font("freesansbold.ttf",100)#字体,字号
titleSurf=titleFont.render("snake!",True,RED)#写出snake 红色
titleRect=titleSurf.get_rect()#获取矩形大小
titleRect.center=(window_width/2,window_height/2)
window.blit(titleSurf,titleRect)#显示在屏幕上
drawPressKeyMsg()#调用画文本函数
pg.display.update()
while True:
if checkForKeyPress():#如果触发了按键事件
pg.event.get()
return
def terminate():#定义函数:退出
pg.quit()#退出游戏
sys.exit()#退出系统
def getRandomLocation():#定义函数:苹果出现的位置
return{"x":randint(0,cell_width-1),"y":randint(0,cell_height-1)}
def showGameOverScreen(): #定义函数:游戏结束
gameOverFont=pg.font.Font("freesansbold.ttf",150)
gameSurf = gameOverFont.render("Game",True,WHITE)#显示Game
overSurf = gameOverFont.render("Over",True,WHITE)#显示over
gameRect = gameSurf.get_rect() #Game 大小
overRect = overSurf.get_rect() #Game 大小
gameRect.midtop = (window_width/2,10) #Game 中心点位置
overRect.midtop = (window_width/2,gameRect.height+10+25)#Game中心点
window.blit(gameSurf,gameRect)#显示Game
window.blit(overSurf,overRect)#显示Over
drawPressKeyMsg()
pg.display.update()
pg.time.wait(500)
checkForKeyPress()
while True:
if checkForKeyPress():
pg.event.get()
return
def drawScore(score):#定义函数:显示分数
scoreSurf=BASICFONT.render("Score:%s"%(score),True,WHITE)#字体颜色
scoreRect=scoreSurf.get_rect()#获取大小
scoreRect.topleft=(window_width-120,10)#位置
window.blit(scoreSurf,scoreRect)#显示
def drawSnake(snakeCoords):#定
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
《跟我一起玩编程》源代码.zip (40个子文件)
《跟我一起玩编程》源代码
计算题闯关.py 747B
贪吃蛇.py 9KB
漂亮的小房子.py 1KB
长方形.py 606B
正方形集合.py 676B
类与局部变量.py 248B
炫彩图画.py 581B
随机数库--0-50猜数.py 734B
面积计算器.py 890B
等边三角形.py 629B
复制小海龟.py 531B
一起玩Python编程.py 237B
水仙花数.py 419B
小海龟绘图.py 209B
绘制四个小海龟.py 801B
囚徒困境.py 567B
过五关斩六将.py 334B
绘制正方形和圆形.py 492B
BMI指数.py 1KB
游戏时间.py 1KB
奥迪车标.py 354B
密码设置.py 1KB
审问小老鼠.py 919B
三国大将.py 309B
解锁密码.py 1KB
大战青牛精.py 550B
五子棋.py 7KB
小球游戏.py 3KB
我爱玩编程.py 30B
五角星.py 214B
同心圆.py 840B
奥运五环.py 678B
梯形.py 209B
随机数库.py 1KB
寻找质数.py 728B
剪子石头布.py 545B
棋盘放米.py 486B
一颗红心_20190805_111201.py 413B
天数查询系统.py 984B
猜数字,比大小.py 768B
共 40 条
- 1
yaljj
- 粉丝: 0
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0