用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正则表达式re模块详解
Jun 25 Python
Python远程桌面协议RDPY安装使用介绍
Apr 15 Python
Python入门之三角函数tan()函数实例详解
Nov 08 Python
基于Python 装饰器装饰类中的方法实例
Apr 21 Python
python中for用来遍历range函数的方法
Jun 08 Python
python实现简单多人聊天室
Dec 11 Python
Python理解递归的方法总结
Jan 28 Python
Mac 使用python3的matplot画图不显示的解决
Nov 23 Python
Python实现图片识别加翻译功能
Dec 26 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
Django启动时找不到mysqlclient问题解决方案
Nov 11 Python
利用python调用摄像头的实例分析
Jun 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
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
PHP 日,周,月点击排行统计
2012/01/11 PHP
php通过修改header强制图片下载的方法
2015/03/24 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
删除节点的jquery代码
2014/01/13 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
JavaScript前端开发时数值运算的小技巧
2020/07/28 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
用Python操作字符串之rindex()方法的使用
2015/05/19 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
python全栈知识点总结
2019/07/01 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
工商管理专业实习生自我鉴定
2013/09/29 职场文书
优秀求职信范文分享
2013/12/19 职场文书
快递业务员岗位职责
2014/01/06 职场文书
社团活动总结书
2014/06/27 职场文书
同学会邀请函模板
2015/01/30 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
请求模块urllib之PYTHON爬虫的基本使用
2022/04/08 Python