用 Python 写个贪吃蛇,保姆级教程

本文是一篇针对Python新手的贪吃蛇游戏开发教程,基于Windows环境,介绍了如何使用curses库实现命令行版的贪吃蛇。教程详细讲解了curses的使用,包括新建子窗口、添加颜色和细节处理。接着,文章逐步阐述了贪吃蛇的设计和实现,包括界面、游戏流程控制和蛇与食物的逻辑。整个游戏分为界面、游戏流程控制和蛇与食物三个部分,通过面向对象的方式实现,确保代码结构清晰。
摘要由CSDN通过智能技术生成

本文基于 Windows 环境开发,适合 Python 新手

832264f63cbc4e85a6e4854dd682d322.jpg

下面我们就一起用 Python 实现一个简单有趣的命令行贪吃蛇小游戏,启动命令:

.私信小编01即可获取大量Python学习教程

git clone https://github.com/AnthonySun256/easy_gamescd easy_gamespython snake

9d0c313b0ec34ddfba05d3b6c85d4f82.jpg

本文包含设计和讲解,整体分为两个部分:第一部分是关于 Python 命令行图形化库 curses 接着是 snake 相关代码。

一、初识 curses

Python 已经内置了 curses 库,但是对于 Windows 操作系统我们需要安装一个补丁以进行适配。

Windows 下安装补全包:

pip install windows-curses

curses 是一个应用广泛的图形函数库,可以在终端内绘制简单的用户界面。

在这里我们只进行简单的介绍,只学习贪吃蛇需要的功能

如果您已经接触过 curses,请跳过此部分内容。

1.1 简单使用

Python 内置了 curses 库,其使用方法非常简单,以下脚本可以显示出当前按键对应编号:

# 导入必须的库import cursesimport time
# 初始化命令行界面,返回的 stdscr 为窗口对象,表示命令行界面stdscr = curses.initscr()
# 使用 noecho 方法关闭命令行回显
curses.noecho()
# 使用 nodelay(True) 方法让 getch 为非阻塞等待(即使没有输入程序也能继续执行)
stdscr.nodelay(True)while True:    
# 清除 stdscr 窗口的内容(清除残留的符号)    
stdscr.erase()    
# 获取用户输入并放回对应按键的编号    
# 非阻塞等待模式下没有输入则返回 -1    
key = stdscr.getch()    
# 在 stdscr 的第一行第三列显示文字    stdscr.addstr(1, 3, "Hello GitHub.")    
# 在 stdscr 的第二行第三列显示文字    stdscr.addstr(2, 3, "Key: %d" % key)    
# 刷新窗口,让刚才的 addstr 生效    
stdscr.refresh()    
# 等待 0.1s 给用户足够反应时间查看文字    
time.sleep(0.1)

用 Python 写个贪吃蛇,保姆级教程

您也可以尝试把 nodelay(True) 改为 nodelay(False) 后再次运行,这时候程序会阻塞在 stdscr.getch() 只有当您按下按键后才会继续执行。

1.2 整点花样

您也许会觉得上面的例子太菜了,随便用几个 print 都能达到相同的效果,现在我们来整点花样以实现一些使用普通输出无法达到的效果。

1.2.1 新建一个子窗口

说再多的话也不如一张图来的实际:

用 Python 写个贪吃蛇,保姆级教程

如果我们想要实现图中 Game over! 窗口,可以使用 newwin 方法:

import cursesimport timestdscr = curses.
initscr()curses.noecho()stdscr.addstr(1, 2, "HelloGitHub")
# 新建窗口,高为 5 宽为 25,在命令行窗口的 四行六列处new_win = curses.newwin(5, 25, 4, 6)
# 使用阻塞等待模式new_win.nodelay(False)
# 在新窗口的 2 行 3 列处添加文字new_win.addstr(2, 3, "www.HelloGitHub.com")
# 给新窗口添加边框,其中边框符号可以这是,这里使用默认字符new_win.border()
# 刷新窗口stdscr.refresh()# 等待字符输入
(这里会一直等待输入)
new_win.getch()
# 删除新窗口对象del new_win
# 清除所有内容(比 erase 更彻底)
stdscr.clear()
# 重新添加文字stdscr.addstr(1, 2, "HelloGitHub")
# 刷新窗口stdscr.refresh()
# 等待两秒钟time.sleep(2)
# 结束 curses 模式,恢复到正常命令行模式curses.endwin()

[图片上传失败…(image-cddc86-1628931467710)]

除了 curses.newwin 新建一个独立的窗口,我们还能在任意窗口上使用 subwin 或者 subpad 方法新建子窗口,例如 stdscr.subwin、 stdscr.subpad、new_win.subwin、new_win.subpad 等等,其使用方法与本节中创建的 new_win 或者 stdscr 没有区别,只是新建窗口使用

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值