用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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
Python中设置变量访问权限的方法
Apr 27 Python
详解10个可以快速用Python进行数据分析的小技巧
Jun 24 Python
python gensim使用word2vec词向量处理中文语料的方法
Jul 05 Python
python os.fork() 循环输出方法
Aug 08 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
python进度条显示-tqmd模块的实现示例
Aug 23 Python
Python 利用flask搭建一个共享服务器的步骤
Dec 05 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
懒就要懒到底——鼠标自动点击(含时间判断)
2007/02/20 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
实例讲解v-if和v-show的区别
2019/01/31 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
Python reduce函数作用及实例解析
2020/05/08 Python
css3.0 图形构成实例练习一
2013/03/19 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
2014年会演讲稿范文
2014/01/06 职场文书
学校师德师风整改方案
2014/10/28 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
先进集体申报材料
2014/12/25 职场文书
2015年植树节活动总结
2015/02/06 职场文书
黄河绝恋观后感
2015/06/08 职场文书
投诉信范文
2015/07/02 职场文书
联村联户简报
2015/07/21 职场文书
Python中的xlrd模块使用整理
2021/06/15 Python