注:这是本人很早之前写的的一个小游戏,最近玩编程农场有点上头,就想复现一下之前写的的一个小游戏,现在主要介绍实现方法,以及本人打包好的exe文件
项目地址:suyihang15/Snake-Game: 基于python实现的贪吃蛇
下载地址:https://github.com/suyihang15/Snake-Game/releases/download/1.0.0/default.exe
1、环境配置
python(运行所要的环境)
pycharm(编写所需要的IDE,毕竟你不可能用记事本写吧,社区版是免费的)
pip install pygame(安装所需的第三方库)
2、编写代码
1、导入工具库 (这是下面可以运行的必要条件)
import pygame, random
pygame 做游戏窗口、画图、按键控制的库,我觉得大部分python小游戏的实现都要靠这个小玩意
random 专门用来随机生成食物位置
2、初始化游戏(创建游戏窗口)
pygame.init()
W, H = 600, 400
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("贪吃蛇")
clock = pygame.time.Clock()
pygame.init() :启动游戏引擎,就是直接调用第三方库,不然全部逻辑你自己写得写死
W, H = 600, 400 :设定窗口宽度 600,高度 400,可以根据需要改嘛
screen = … :创建一个游戏窗口
set_caption("贪吃蛇") :窗口标题写“贪吃蛇”,或者写你自己想到的任何你名字都行,不影响整体逻辑
clock = pygame.time.Clock() :用来控制蛇的移动速度
3、定义颜色
BLACK = (0,0,0)
WHITE = (255,255,255)
RED = (255,0,0)
GREEN = (0,255,0)
给颜色起名字,后面画图直接用单词,不用记数字,当然你自己记得那个调色板的那个一点点写也可以,不拦你(R,G,B)三色板自己调去吧。
BLACK:背景黑色
RED:食物红色
GREEN:蛇身体绿色
4、游戏基础参数(差不多就是游戏的初始值)
block = 10
speed = 12
block = 10 :蛇每一节、食物都是 10 像素大小,你可以理解为蛇和食物的大小设置
speed = 12 :游戏每秒刷新 12 次,数字越大蛇跑得越快
5、主函数开始
def main():
把整个游戏放进一个函数里
6、游戏初始状态
x, y = W//2, H//2
dx, dy = block, 0
snake = [[x, y]]
food = [random.randrange(0, W, block), random.randrange(0, H, block)]
score = 0
x, y = 窗口中心 :蛇出生在屏幕正中间,后面的就是刚好在窗口正中心,W和H我上面定义了的,注意看
dx, dy = block, 0 :- dx = 水平方向速度
dy = 垂直方向速度
一开始蛇向右走
snake = [[x, y]] :蛇是一个列表,每一节是一个坐标- 刚开始只有一个头
food = [random.randrange(0, W, block), random.randrange(0, H, block)] :随机生成食物位置,坐标是 10 的倍数,和蛇对齐
score = 0 :初始分数为 0
7、游戏主循环(循环运行毕竟你不可能让他一下子就结束吧)
while True:
游戏永远循环执行
直到关闭窗口或蛇死掉才跳出
8、处理退出事件
for e in pygame.event.get():
if e.type == pygame.QUIT:
pygame.quit()
return
检测你是否点了窗口右上角的 ×
点了就关闭游戏,退出程序
9、按键控制方向
if e.type == pygame.KEYDOWN:
if e.key == pygame.K_LEFT and dx == 0:
dx, dy = -block, 0
elif e.key == pygame.K_RIGHT and dx == 0:
dx, dy = block, 0
elif e.key == pygame.K_UP and dy == 0:
dx, dy = 0, -block
elif e.key == pygame.K_DOWN and dy == 0:
dx, dy = 0, block
按上下左右键改变蛇的方向
dx == 0 / dy == 0 是为了防止蛇立刻反向撞死自己- 比如向右走时不能直接向左
10、蛇移动核心逻辑
x += dx
y += dy
snake.append([x, y])
先更新蛇头坐标
把新蛇头加到蛇的列表最后
蛇看起来就像往前挪了一步
11、吃食物
if [x, y] == food:
score += 1
food = [random.randrange(0, W, block), random.randrange(0, H, block)]
else:
snake.pop(0)
如果蛇头碰到食物:1. 分数 +1
重新随机生成一个食物
不删除尾巴 → 蛇变长
没吃到食物:- 删除最后一节身体 → 蛇保持长度,只向前移动
12、碰撞检测(死亡判断)
if x < 0 or x >= W or y < 0 or y >= H or [x, y] in snake[:-1]:
print("游戏结束!得分:", score)
pygame.quit()
return
满足任意一条,蛇死亡:
撞墙:x、y 超出窗口范围
撞自己:蛇头坐标出现在身体里
死掉后打印分数,关闭游戏
13、绘制画面(就是场景设置)
screen.fill(BLACK)
pygame.draw.rect(screen, RED, (food[0], food[1], block, block))
for pos in snake:
pygame.draw.rect(screen, GREEN, (pos[0], pos[1], block, block))
pygame.display.update()
clock.tick(speed)
全屏涂黑色
画红色食物方块
循环画出蛇的每一节
update() :把画好的内容显示到屏幕
clock.tick(speed) :控制游戏速度,保持稳定
14、程序入口(要开始喽)
if name == "main":
main()
只有直接运行这个文件时,才启动游戏 main()
注:上面的代码就是大致的介绍,缩进什么的自己调,基本上你有点基础的都可以看懂的,这是大致的效果

本人主要是介绍一下大致的实现过程,完整的代码也已经放在我github仓库了。
如果改好了代码。想自己打包成exe可以看我这个python打包成exe(pyinstaller的使用) – 苏的小站








Comments | NOTHING