用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三元运算符实现方法
Dec 17 Python
详解python的几种标准输出重定向方式
Aug 15 Python
python实现可以断点续传和并发的ftp程序
Sep 13 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
Python 学习教程之networkx
Apr 15 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
详解python statistics模块及函数用法
Oct 27 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
python实时监控logstash日志代码
Apr 27 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
pandas:get_dummies()与pd.factorize()的用法及区别说明
May 21 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上传文件中文文件名乱码的解决方法
2013/11/01 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
将文本输入框内容加入表中的js代码
2013/08/18 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
AngularJS自定义表单验证功能实例详解
2018/08/24 Javascript
Vue+Express实现登录注销功能的实例代码
2019/05/05 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
2019/08/26 Javascript
0基础学习前端开发的一些建议
2020/07/14 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
[43:03]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Python开发的单词频率统计工具wordsworth使用方法
2014/06/25 Python
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
Python简单计算文件夹大小的方法
2015/07/14 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Python datetime 格式化 明天,昨天实例
2020/03/02 Python
Keras-多输入多输出实例(多任务)
2020/06/22 Python
中秋寄语大全
2014/04/11 职场文书
绿色环保口号
2014/06/12 职场文书
个人作风建设自查报告
2014/10/22 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
安全员岗位职责范本
2015/04/11 职场文书
病危通知单
2015/04/17 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis