作者:丹枫无迹

  来源:大龄码农的Python之路

在开始今天的正文前,首先为大家推荐一本关于数据产品经历不错的书籍:

一、游戏介绍

贪吃蛇是个非常简单的游戏,适合练手。先来看一下我的游戏截图:

玩法介绍:

食物分红、绿、蓝三种,分别对应 10 分、20 分、30 分,每吃一个食物增加对应分值,每增加 100 分速度加快一级,没有设置关卡,我玩到 1100 分,速度太快了,然后就 GAME OVER 了。

二、游戏分析

贪吃蛇这个游戏很简单,屏幕上随机出现一个点,表示“食物”,上下左右控制“蛇”的移动,吃到“食物”以后“蛇”的身体加长,“蛇”碰到边框或自己的身体,则游戏结束。

我们先来分析一下,要写出这个游戏来需要注意哪些点。

1、蛇怎么表示

我们可以将整个游戏区域划分成一个个的小格子,由一组连在一起的小格子组成“蛇”,我们可以用不同的颜色来表示,如上图中,我以深色表示背景,浅色表示“蛇”。

我们可以用坐标来表示每一个小方格,X 轴和 Y 轴的范围都是可以设定好的。用一个列表来存放“蛇身”的坐标,那么一条“蛇”就出来了,最后只要显示的时候以不同的颜色表示即可。

2、蛇怎么移动?

第一反应就是像蚯蚓蠕动一样,每一个小方块向前移动一格,但这样实现起来很麻烦。一开始就是被这里卡住了。

想象一下我们玩过的贪吃蛇,每次“蛇”的移动感觉上是整体往前移动了一格,排除掉脑子中“蛇”的“动作”,细想移动前和移动后“蛇”的位置变化,其实除了头尾,其他部分根本就没有变。那就简单了,将下一格的坐标添加到列表开头,并移除列表的最后一个元素,就相当于蛇向前移动了一格。

3、如何判定游戏结束?

“蛇”移动超出了游戏区的范围或者碰到了自己就算输了,轴坐标的范围是事先定好的,超出范围很容易判断。那么如何判断碰到自己呢?

如果脑子里想的是“蛇”动的画面,那真的比较难了,但是放到代码中,我们的“蛇”是一个列表,那么只要判断下一格的坐标是否已经包含在“蛇”的列表中岂不就可以了?

理清了这些问题,我们就可以开始编码了。

三、代码展示

由于程序中要频繁的对“蛇”进行头尾的添加和删除操作,为了性能更好那么一点,我们用 deque 代替列表。

首先需要初始化“蛇”,“蛇”的初始长度为 3,位置位于左上角。

# 游戏区域的坐标范围
SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)snake = deque()
def _init_snake():snake.clear()snake.append((2, scope_y[0]))snake.append((1, scope_y[0]))snake.append((0, scope_y[0]))

创建“食物”,在屏幕内随机选取一个点作为“食物”,但是要保证“食物”不在“蛇”身上。

def create_food(snake):food_x = random.randint(SCOPE_X[0], SCOPE_X[1])food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])while (food_x, food_y) in snake:# 如果食物出现在蛇身上,则重来food_x = random.randint(SCOPE_X[0], SCOPE_X[1])food_y = random.randint(SCOPE_Y[0], SCOPE_Y[1])return food_x, food_y

“蛇”的移动可以有 4 个方向,用一个元组来表示移动的方向,每次按下方向键,给赋对应的值

# 方向
pos = (1, 0)for event in pygame.event.get():if event.type == QUIT:sys.exit()elif event.type == KEYDOWN:if event.key in (K_w, K_UP):# 这个判断是为了防止蛇向上移时按了向下键,导致直接 GAME OVERif pos[1]:pos = (0, -1)elif event.key in (K_s, K_DOWN):if pos[1]:pos = (0, 1)elif event.key in (K_a, K_LEFT):if pos[0]:pos = (-1, 0)elif event.key in (K_d, K_RIGHT):if pos[0]:pos = (1, 0)

而“蛇”的移动就可以表示为:

next_s = (snake[0][0] + pos[0], snake[0][1] + pos[1])
if next_s == food:# 吃到了食物snake.appendleft(next_s)food = create_food(snake)
else:if SCOPE_X[0] <= next_s[0] <= SCOPE_X[1] and SCOPE_Y[0] <= next_s[1] <= SCOPE_Y[1] and next_s not in snake:snake.appendleft(next_s)snake.pop()else:game_over = True

后台回复【贪吃蛇】,获取源码。

留言打卡 DAY 46

今日的留言话题是分享下你之前玩过的经典游戏,关于留言打卡的规则可以参考,请按照昵称+天数(请以自己实际连续打卡的天数为准,如day1 or day2 or day3)+ 留言内容(不少于15字)的方式留言

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

利用Python自制贪吃蛇游戏相关推荐

  1. 如何用python开发一个贪吃蛇游戏_教你一步步利用python实现贪吃蛇游戏

    教你一步步利用python实现贪吃蛇游戏 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  教你一步步利用python实现贪吃蛇游戏.txt ] (友情提示:右键点 ...

  2. python制作贪吃蛇游戏_用Python写贪吃蛇游戏的代码实例

    这篇文章主要为大家详细介绍了Python贪吃蛇游戏的编写代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 最近在学Python,想做点什么来练练手,命令行的贪吃蛇一般是C的练手项目,但是一时之间 ...

  3. 利用OpenGL设计贪吃蛇游戏

    利用OpenGL设计贪吃蛇游戏 文章目录 利用OpenGL设计贪吃蛇游戏 任务介绍 游戏玩法 开发环境 游戏实现 贪吃蛇游戏的框架搭建 主程序 游戏类 游戏对象类 工具类 着色器类 摄像机类 精灵渲染 ...

  4. PAOGD个人作业4——利用OpenGL设计贪吃蛇游戏

    中山大学数据科学与计算机学院本科生实验报告 (2019年春季学期) 课程名称 PAOGD 任课老师 郑贵锋 年级 16 专业(方向) 软件工程(计算机应用方向) 学号 16340132 姓名 梁颖霖 ...

  5. python编写贪吃蛇游戏下载,python实现简单的贪吃蛇游戏

    本文实例为大家分享了python实现贪吃蛇游戏的具体代码,加入按钮.难度.音乐.得分功能,供大家参考,具体内容如下 贪吃蛇小游戏,可以显示出得分,又背景音乐,难度选择和开始重启按钮设置. 游戏实现效果 ...

  6. 【课件】使用Python写贪吃蛇游戏(pygame)

    使用Python写贪吃蛇游戏(pygame) 课件地址:https://blog.csdn.net/a772304419/article/details/130087202 本地路径: cd /D/W ...

  7. 回忆经典,九叔教你用Python制作贪吃蛇游戏

    众所周知Python除了不能生孩子啥都行. 咱们今天就说一下如何利用Python写一个简易的小游戏. 所以呀咱们今天就用Python写大家都玩过的小游戏--贪吃蛇. 用Python写游戏就得用到pyg ...

  8. 手把手教你使用 Python 制作贪吃蛇游戏

    贪吃蛇游戏是有史以来最受欢迎的街机游戏之一.在这个游戏中,玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果.在学习 Python 或 Pygame 时,可以将创建蛇游戏视为一项挑战.这是每个 ...

  9. python设计贪吃蛇游戏论文_用Python写一个贪吃蛇AI,让程序自己玩游戏

    前言 这两天在网上看到一张让人涨姿势的图片,图片中展示的是贪吃蛇游戏, 估计大部分人都玩过.但如果仅仅是贪吃蛇游戏,那么它就没有什么让人涨姿势的地方了. 问题的关键在于,图片中的贪吃蛇真的很贪吃XD, ...

最新文章

  1. 路由器远程登陆配置:01一个人登陆多台设备
  2. python端午dragboat消消乐 美轮美奂的界面效果
  3. 如何在网页标题栏title加入icon图标?
  4. LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
  5. ubuntu离线安装依赖
  6. learn python app v3_Python3 采集APP数据及相关配置
  7. Python中DataFrame去重
  8. 1007. 素数对猜想 (20)-PAT乙级真题
  9. python免费全套教程400集视频-阿里巴巴大佬打造400集Python视频教程视频拿去,学完万物皆可爬...
  10. Wind River workbench介绍
  11. Eclipse的下载与安装
  12. 银行业务分析(数据整合)
  13. 用计算机观察声音的波形,用计算机观察声音的波形
  14. JETT(四)-支持JEXL
  15. 干货!探索单目车辆估计中的中间几何表示
  16. 在线教育重新被点燃:火花思维逆势融资8500万美元
  17. 【最全】ISTQB- FL模拟题(含答案)
  18. 华为杯山东理工大学第二届团体程序设计天梯赛
  19. 因子分析(factor analyis)
  20. 云起实验室:基于Redis实现在线游戏积分排行榜

热门文章

  1. # 阿里云服务器的运行与维护(1)
  2. 如何获取苹果设备UDID?
  3. 《世界是平的》The World Is Flat
  4. 旭凤为什么和锦觅共付鸿蒙,《香蜜》中旭凤对锦觅做的5件事,最让她开心的不是灵修,而是它...
  5. 使用Label(标签)
  6. HTML-input标签事件监听
  7. MT4/MQL4入门到精通EA教程第四课-MQL语言常用函数(四)-K线取值常用函数
  8. 安超云生态 | 安超云与百信完成产品兼容互认证 携手打造协同生态
  9. CURLINFO_HTTP_CODE 505 PHP
  10. 老人与海好词100英文带翻译_老人与海英文版好词好句摘抄