用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单链表实现代码实例
Nov 21 Python
python实现简单的计时器功能函数
Mar 14 Python
Python实现判断字符串中包含某个字符的判断函数示例
Jan 08 Python
Python SVM(支持向量机)实现方法完整示例
Jun 19 Python
python flask实现分页的示例代码
Aug 02 Python
django 单表操作实例详解
Jul 30 Python
Python hashlib模块实例使用详解
Dec 24 Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
python中HTMLParser模块知识点总结
Jan 25 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
PHP 采集程序 常用函数
2008/12/18 PHP
为你总结一些php信息函数
2015/10/21 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
php实现转换html格式为文本格式的方法
2016/05/16 PHP
tp5实现微信小程序多图片上传到服务器功能
2018/07/16 PHP
javascript实现的网页局布刷新效果
2008/12/01 Javascript
js url传值中文乱码之解决之道
2009/11/20 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
JS实现间歇滚动的运动效果实例
2016/12/22 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
vue mintui-Loadmore结合实现下拉刷新和上拉加载示例
2017/10/12 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
js实现详情页放大镜效果
2020/10/28 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
python实现一个简单的并查集的示例代码
2018/03/19 Python
python统计中文字符数量的两种方法
2019/01/31 Python
分析经典Python开发工程师面试题
2019/04/08 Python
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
员工入职担保书范文
2014/04/01 职场文书
美术指导助理求职信
2014/04/20 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
机关党员四风问题个人整改措施
2014/10/26 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
毕业班班主任工作总结2015
2015/07/23 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
Mysql中存储引擎的区别及比较
2021/06/04 MySQL