用Python实现童年贪吃蛇小游戏功能的实例代码


Posted in Python onDecember 07, 2020

贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中。

用Python实现童年贪吃蛇小游戏功能的实例代码

尽管贪吃蛇的历史相对比较久远,但它却有着十分顽强的生命力,保持经久不衰,其中很重要的原因便是游戏厂家不断的对其进行更新迭代。现在,这款游戏无论是游戏场景、规则等都变得十分丰富。

用Python实现童年贪吃蛇小游戏功能的实例代码

接下来,我们看一下如何通过 Python 简单的实现这款小游戏。

规则

  • 要有游戏主界面、贪吃蛇、食物
  • 能够控制贪吃蛇移动并获取食物
  • 贪吃蛇吃了食物后,增加自身长度、分数,食物消失并随机生成新的食物
  • 贪吃蛇触碰到周围边界或自己身体时,游戏结束

 环境

  •  操作系统:Windows
  • Python 版本:3.6
  • 涉及模块:sys、random、pygame

实现

首先,安装第三方库 pygame,使用 pip install pygame 即可。

➢ 游戏主界面

SCREEN_X = 500
SCREEN_Y = 500
screen_size = (SCREEN_X, SCREEN_Y)
screen = pygame.display.set_mode(screen_size)
pygame.display.set_caption('贪吃蛇')

➢ 贪吃蛇

初始化

def __init__(self):
 self.dirction = pygame.K_RIGHT
 self.body = []

移动

def addNode(self):
 left, top = (0, 0)
 if self.body:
 left, top = (self.body[0].left, self.body[0].top)
 node = pygame.Rect(left, top, 20, 20)
 if self.dirction == pygame.K_LEFT:
 node.left -= 20
 elif self.dirction == pygame.K_RIGHT:
 node.left += 20
 elif self.dirction == pygame.K_UP:
 node.top -= 20
 elif self.dirction == pygame.K_DOWN:
 node.top += 20
 self.body.insert(0, node)

def delNode(self):
 self.body.pop()

改变方向

def changeDirection(self, curkey):
 LR = [pygame.K_LEFT, pygame.K_RIGHT]
 UD = [pygame.K_UP, pygame.K_DOWN]
 if curkey in LR + UD:
 if (curkey in LR) and (self.dirction in LR):
  return
 if (curkey in UD) and (self.dirction in UD):
  return
 self.dirction = curkey

死亡判断

def isDead(self):
 # 撞墙
 if self.body[0].x not in range(SCREEN_X):
 return True
 if self.body[0].y not in range(SCREEN_Y):
 return True
 # 撞自己
 if self.body[0] in self.body[1:]:
 return True
 return False

➢ 食物

投放食物

def set(self):
 if self.rect.x == -20:
 allpos = []
 for pos in range(20, SCREEN_X - 20, 20):
  allpos.append(pos)
 self.rect.left = random.choice(allpos)
 self.rect.top = random.choice(allpos)
 print(self.rect)

吃掉食物

def remove(self):
 self.rect.x = -20

➢ 文字显示

显示方法

def show_text(screen, pos, text, color, font_bold=False, font_size=30, font_italic=False):
 # 设置文字大小
 cur_font = pygame.font.SysFont("宋体", font_size)
 # 加粗
 cur_font.set_bold(font_bold)
 # 斜体
 cur_font.set_italic(font_italic)
 # 设置内容
 text_fmt = cur_font.render(text, 1, color)
 # 绘制文字
 screen.blit(text_fmt, pos)

显示分数

show_text(screen, (50, 400), 'scores: ' + str(scores), (103, 213, 213))

显示死亡提示

show_text(screen, (150, 50), 'GAME OVER', (227, 29, 18), False, 50)
show_text(screen, (140, 100), "Press space to try again", (0, 0, 22), False, 30)

➢ 吃到食物

当贪吃蛇吃掉食物,增加蛇身长度、分数,食物消失,重新投放食物。

if food.rect == snake.body[0]:
 scores += 1
 food.remove()
 snake.addNode()

# 投放食物
food.set()

➢ 最终效果

用Python实现童年贪吃蛇小游戏功能的实例代码

打包

打包使用 pyinstaller,具体实现参考用Python实现童年小游戏俄罗斯方块

中的打包。

到此这篇关于用Python实现贪吃蛇童年小游戏功能的实例代码的文章就介绍到这了,更多相关Python贪吃蛇小游戏内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python定时检查启动某个exe程序适合检测exe是否挂了
Jan 21 Python
分析Python的Django框架的运行方式及处理流程
Apr 08 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Python模块文件结构代码详解
Feb 03 Python
使用Python为中秋节绘制一块美味的月饼
Sep 11 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
PyTorch 随机数生成占用 CPU 过高的解决方法
Jan 13 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
如何快速理解python的垃圾回收机制
Sep 01 Python
Python爬虫教程之利用正则表达式匹配网页内容
Dec 08 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 #Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 #Python
用python对excel查重
Dec 07 #Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 #Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 #Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 #Python
BeautifulSoup中find和find_all的使用详解
Dec 07 #Python
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
php4与php5的区别小结(配置异同)
2011/12/20 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
JavaScript中对循环语句的优化技巧深入探讨
2014/06/06 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
jQuery EasyUI菜单与按钮详解
2016/07/13 Javascript
JS控制静态页面之间传递参数获取参数并应用的简单实例
2016/08/10 Javascript
总结Node.js中的一些错误类型
2016/08/15 Javascript
jQuery3.0中的buildFragment私有函数详解
2016/08/16 Javascript
bootstrap多种样式进度条展示
2016/12/20 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
2017/05/20 jQuery
详解如何用webpack打包一个网站应用项目
2017/07/12 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
[04:50]DOTA2亚洲邀请赛小组赛第四日 TOP10精彩集锦
2015/02/02 DOTA
python文件比较示例分享
2014/01/10 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
Python解析多帧dicom数据详解
2020/01/13 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
哈萨克斯坦最大的时装、鞋子和配饰在线商店:Lamoda.kz
2019/11/19 全球购物
普通院校学生的自荐信
2013/11/27 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
稽核岗位职责
2015/02/10 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技