用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中删除文件的程序代码
Mar 13 Python
ptyhon实现sitemap生成示例
Mar 30 Python
Python3基础之函数用法
Aug 13 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
浅谈python标准库--functools.partial
Mar 13 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
python处理RSTP视频流过程解析
Jan 11 Python
在Mac中PyCharm配置python Anaconda环境过程图解
Mar 11 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
python爬虫请求头设置代码
Jul 28 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
Laravel 5框架学习之用户认证
2015/04/09 PHP
php里array_work用法实例分析
2015/07/13 PHP
php数组生成html下拉列表的方法
2015/07/20 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
thinkPHP实现多字段模糊匹配查询的方法
2016/12/01 PHP
php获得刚插入数据的id 的几种方法总结
2018/05/31 PHP
再分享70+免费的jquery 图片滑块效果插件和教程
2014/12/15 Javascript
用Node.js通过sitemap.xml批量抓取美女图片
2015/05/28 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
json实现添加、遍历与删除属性的方法
2016/06/17 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
基于jQuery实现左侧菜单栏可折叠功能
2016/12/27 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
Python3连接MySQL(pymysql)模拟转账实现代码
2016/05/24 Python
Python通过matplotlib绘制动画简单实例
2017/12/13 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
python里 super类的工作原理详解
2019/06/19 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
Python如何解除一个装饰器
2020/08/07 Python
Python txt文件如何转换成字典
2020/11/03 Python
介绍一下OSI七层模型
2012/07/03 面试题
学校元旦晚会方案
2014/02/19 职场文书
秋季运动会广播稿
2014/02/22 职场文书
第一批党的群众路线教育实践活动工作总结
2014/03/03 职场文书
2014年行政工作总结
2014/11/19 职场文书
国庆节慰问信
2015/02/15 职场文书
唐山大地震观后感
2015/06/05 职场文书
2016年国陪研修感言
2015/11/18 职场文书