用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机器人行走步数问题的解决
Jan 29 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
Python使用python-docx读写word文档
Aug 26 Python
Python创建数字列表的示例
Nov 28 Python
深入了解如何基于Python读写Kafka
Dec 31 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
关于Python turtle库使用时坐标的确定方法
Mar 19 Python
150行Python代码实现带界面的数独游戏
Apr 04 Python
Python如何脚本过滤文件中的注释
May 27 Python
python状态机transitions库详解
Jun 02 Python
Python自动操作神器PyAutoGUI的使用教程
Jun 16 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/03/24 PHP
PHP获取http请求的头信息实现步骤
2012/12/16 PHP
php判断访问IP的方法
2015/06/19 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
js 与或运算符 || && 妙用
2009/12/09 Javascript
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
js函数参数设置默认值的一种变通实现方法
2014/05/26 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
React中的render何时执行过程
2018/04/13 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
VUE预渲染及遇到的坑
2018/09/03 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
JavaScript canvas实现雨滴特效
2021/01/10 Javascript
Python生成验证码实例
2014/08/21 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
pandas计数 value_counts()的使用
2019/06/24 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
奇怪的鱼:Weird Fish
2018/03/18 全球购物
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
XML文档面试题
2015/08/05 面试题
法律专业应届本科毕业生求职信
2013/10/25 职场文书
2014年干部作风建设总结
2014/10/23 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL