用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使用urllib2获取网络资源实例讲解
Dec 02 Python
python实现多线程采集的2个代码例子
Jul 07 Python
python魔法方法-自定义序列详解
Jul 21 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
Nov 30 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Python3 SSH远程连接服务器的方法示例
Dec 29 Python
python+pyqt5实现24点小游戏
Jan 24 Python
Python3中exp()函数用法分析
Feb 19 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 Python
Django之路由层的实现
Sep 09 Python
Tensorflow实现多GPU并行方式
Feb 03 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 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
APACHE的AcceptPathInfo指令使用介绍
2013/01/18 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
JavaScript时间转换处理函数
2015/04/14 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
详解webpack4多入口、多页面项目构建案例
2018/05/25 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python使用PIL库实现验证码图片的方法
2016/03/11 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python学习思维导图(必看篇)
2017/06/26 Python
python实现电脑自动关机
2018/06/20 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
银行学习十八大感想
2014/01/11 职场文书
大学生旅游业创业计划书
2014/01/29 职场文书
消防安全汇报材料
2014/02/08 职场文书
黄金搭档广告词
2014/03/21 职场文书
授权委托书(完整版)
2014/09/10 职场文书
毕业横幅标语
2014/10/08 职场文书
乡镇党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
办公室管理规章制度
2015/08/04 职场文书
创业计划书之餐饮馄饨店
2019/07/18 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
Vue组件更新数据v-model不生效的解决
2022/04/02 Vue.js