用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生成指定尺寸缩略图的示例
May 07 Python
python使用psutil模块获取系统状态
Aug 27 Python
Python 读写文件和file对象的方法(推荐)
Sep 12 Python
python实现NB-IoT模块远程控制
Jun 20 Python
python实现合并两个排序的链表
Mar 03 Python
python批量读取文件名并写入txt文件中
Sep 05 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
django中间键重定向实例方法
Nov 10 Python
Python 生成一个从0到n个数字的列表4种方法小结
Nov 28 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
Python Mock模块原理及使用方法详解
Jul 07 Python
Python实现简单的猜单词小游戏
Oct 28 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
php中strstr、strrchr、substr、stristr四个函数的区别总结
2014/09/22 PHP
非常全面的php日期时间运算汇总
2015/11/04 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JavaScript instanceof 的使用方法示例介绍
2013/10/23 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
在Python中使用poplib模块收取邮件的教程
2015/04/29 Python
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
python中实现字符串翻转的方法
2018/07/11 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
python、Matlab求定积分的实现
2019/11/20 Python
python识别验证码的思路及解决方案
2020/09/13 Python
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
数百万免费的图形资源:Freepik
2020/09/21 全球购物
女方回门宴答谢词
2014/01/14 职场文书
工地标语大全
2014/06/18 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
社区党建工作汇报材料
2014/10/27 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
爱的承诺书
2015/01/20 职场文书
劳动者解除劳动合同通知书
2015/04/16 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android