用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 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
浅谈django三种缓存模式的使用及注意点
Sep 30 Python
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
May 23 Python
详解Python3除法之真除法、截断除法和下取整对比
May 23 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
flask框架jinja2模板与模板继承实例分析
Aug 01 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
python dict乱码如何解决
Jun 07 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
Python tkinter之ComboBox(下拉框)的使用简介
Feb 05 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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报表之jpgraph柱状图实例代码
2011/08/22 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
关于php中一些字符串总结
2016/05/05 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
jQuery Validate表单验证插件 添加class属性形式的校验
2016/01/18 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
关于Javascript回调函数的一个妙用
2016/08/29 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
angularJS模态框$modal实例代码
2017/05/27 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
jquery.onoff实现简单的开关按钮功能(推荐)
2018/05/24 jQuery
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
vue.js 实现a标签href里添加参数
2019/11/12 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
Python3多线程操作简单示例
2018/05/22 Python
Pytorch实现GoogLeNet的方法
2019/08/18 Python
python多线程分块读取文件
2019/08/29 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
怎么写自荐书范文
2014/02/12 职场文书
诚信考试倡议书
2014/04/15 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
2014年惩防体系建设工作总结
2014/12/01 职场文书
法人代表证明书范本
2015/06/18 职场文书
诚信教育主题班会
2015/08/13 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python