用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操作Excel之xlsx文件
Mar 24 Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 Python
python从子线程中获得返回值的方法
Jan 30 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
django admin.py 外键,反向查询的实例
Jul 26 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
使用keras实现densenet和Xception的模型融合
May 23 Python
Python定义一个Actor任务
Jul 29 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
如何理解python接口自动化之logging日志模块
Jun 15 Python
Python使用DFA算法过滤内容敏感词
Apr 22 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
PHP面向对象程序设计OOP继承用法入门示例
2016/12/27 PHP
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
iframe实用操作锦集
2014/04/22 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
js实现手机发送验证码功能
2017/03/13 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
详解JavaScript 为什么要有 Symbol 类型?
2019/04/03 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
python中setuptools的作用是什么
2020/06/19 Python
Django静态文件加载失败解决方案
2020/08/26 Python
Python 实现一个简单的web服务器
2021/01/03 Python
Django实现简单的分页功能
2021/02/22 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
《二泉映月》教学反思
2014/04/15 职场文书
社区矫正工作方案
2014/06/04 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
酒店宣传语大全
2015/07/13 职场文书
2016年清明节寄语
2015/12/04 职场文书
《跨越海峡的生命桥》教学反思
2016/02/18 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS