大家好,又见面了,我是你们的朋友全栈君。
跳转目录
- 前言
- 运行示例
- 程序分析
- 捕获键盘操作
- 输出游戏画面
- 代码分析一
- 安装运行环境
- 游戏地图的实现
- 炸弹的实现
- 食物的实现
- 蛇的实现
- 初步测试
- 键盘控制的实现
- 主程序
- game函数
- 图形界面显示分数, 得分
- 结束函数
- 游戏主函数
- 源码下载
前言
该程序未使用pygame库, 而是采用keyboard库的
on_press()
函数捕获键盘操作, 使用windows控制台缓冲区作为图形界面。 第一次写文章,如有错误请谅解
运行示例
程序分析
捕获键盘操作
Python从控制台读取可以使用
input()
函数, 但很明显的是, 贪吃蛇游戏需要在游戏运行的同时不断读取键盘操作, 使用input()输入需要每次都使用回车键, 可行性较差 本程序中使用keyboard库中的on_press()
函数捕获键盘操作, 并将捕获的键盘操作传递给一个key_envent()
函数进一步处理, 进而控制游戏
输出游戏画面
贪吃蛇游戏需要不断的更新和显示游戏画面, 游戏地图可以使用二维矩阵的形式储存, 显示画面时, 将矩阵中的信息转换成字符串并输出即可
代码分析一
安装运行环境
代码语言:javascript复制# 测试python版本为3.9.8
pip install keyboard
pip install win32
游戏地图的实现
创建地图需要的基本信息包括宽度width, 以及高度height 地图的每个格子代表一种元素,
0
代表空格,1
代表食物,2
代表炸弹,3
代表蛇的头部,4
代表蛇的身体 对地图的操作包括读取(x, y)
位置的元素, 改变(x, y)
位置的元素, 以及将列表输出为可以显示的形式
- 地图的初始化
class Map():
def __init__(self, width=10, height=10):
if (width < 10):
width = 10
if (height < 10):
height = 10
self.size = (width, height)
self.__map = [[0 for i in range(width)] for i in range(height)]
# 0为空白块,1为食物,2为炸弹,3为蛇头,4为蛇尾
- 读取某位置的元素
def read(self, x, y):
if (x >= 0 and x < self.size[0] and y >= 0 and y < self.size[1]):
return self.__map[y][x]
return -1 # 如果该位置超过地图边界, 返回-1
- 改变某位置的元素
def write(self, x, y, val=0):
self.__map[y][x] = val
- 将地图以可显示形式输出
代码语言:javascript复制输出部分为按行输出(便于后续图形界面的排版), 将每行结果储存在列表中并返回
def list(self):
ls = []
ls.append('# ' * (self.size[0] 2)) # 地图上边界
for line in self.__map:
li = '# '
for k in line:
if (k == 0): # 0表示空白块
li = ' '
elif (k == 1): # 1表示食物
li = "