用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错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
Python中static相关知识小结
Jan 02 Python
Python 查看文件的读写权限方法
Jan 23 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
python实现合并多个list及合并多个django QuerySet的方法示例
Jun 11 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
详解python中index()、find()方法
Aug 29 Python
python使用配置文件过程详解
Dec 28 Python
django 外键创建注意事项说明
May 20 Python
详解pycharm连接远程linux服务器的虚拟环境的方法
Nov 13 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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
php 文章采集正则代码
2009/12/28 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
php ajax实现文件上传进度条
2016/03/29 PHP
PHP上传图片、删除图片简单实例
2016/11/12 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
JS实现动画兼容性的transition和transform实例分析
2016/12/13 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
Vue中的transition封装组件的实现方法
2019/08/13 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[01:03:13]VG vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python生成器的使用方法
2013/11/21 Python
Python使用MONGODB入门实例
2015/05/11 Python
Random 在 Python 中的使用方法
2018/08/09 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
2018/10/14 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
解决python 上传图片限制格式问题
2019/10/30 Python
区域销售经理岗位职责
2013/12/10 职场文书
运动会表扬稿大全
2014/01/16 职场文书
聘任书模板
2014/03/29 职场文书
药店促销活动策划方案
2014/08/24 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
高三语文复习计划
2015/01/19 职场文书
学生检讨书
2015/01/27 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL