用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实现控制台输入密码的方法
May 29 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python处理Excel文件实例代码
Jun 20 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python中使用while循环的实例
Aug 05 Python
python+pygame实现坦克大战
Sep 10 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
Feb 28 Python
Python爬虫实现模拟点击动态页面
Mar 05 Python
TensorFlow的环境配置与安装方法
Feb 20 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 Python
Python中文纠错的简单实现
Jul 07 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
解析strtr函数的效率问题
2013/06/26 PHP
php中header跳转使用include包含解决参数丢失问题
2015/05/08 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
PHP实现图片的等比缩放和Logo水印功能示例
2017/05/04 PHP
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
JavaScript设置首页和收藏页面的小例子
2013/11/11 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
python 随机数生成的代码的详细分析
2011/05/15 Python
Python使用email模块对邮件进行编码和解码的实例教程
2016/07/01 Python
python线程、进程和协程详解
2016/07/19 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
详解python中的 is 操作符
2017/12/26 Python
Python socket实现简单聊天室
2018/04/01 Python
python处理csv中的空值方法
2018/06/22 Python
Python类反射机制使用实例解析
2019/12/30 Python
python实现人像动漫化的示例代码
2020/05/17 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Python __slots__的使用方法
2020/11/15 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
初任培训自我鉴定
2013/10/07 职场文书
部队学习十八大感言
2014/01/11 职场文书
大专生自荐书范文
2014/06/22 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers