9 贪吃蛇

图书简介可以看这里:

童晶:《Python游戏趣味编程》新书上架了

本章我们将编写一个贪吃蛇的游戏,效果如图9-1所示。键盘控制小蛇上下左右移动,吃到食物后长度加一;蛇头碰到自身或窗口边缘,游戏失败。首先构造小蛇,实现向四个方向移动;然后实现游戏失败的判断、吃食物增加长度、得分功能;最后学习函数的定义与使用,并进行时间控制的改进。

本章案例最终代码一共97行,代码参看:配套资源\第9章\9-10-2.py,视频效果参看:配套资源\第9章\贪吃蛇.mp4。

import pgzrun  # 导入游戏库
import time  # 导入时间库
import random # 导入随机库TILE_SIZE = 20  # 小蛇方块的大小,20*20
WIDTH = 40*TILE_SIZE  # 设置窗口的宽度 800
HEIGHT = 30*TILE_SIZE  # 设置窗口的高度 600snkaeHead = Actor('snake1')  # 导入蛇头方块图片
snkaeHead.x = WIDTH/2   # 蛇头方块图片的x坐标
snkaeHead.y = HEIGHT/2  # 蛇头方块图片的y坐标cookie = Actor('cookie')  # 导入食物方块图片
cookie.x = random.randint(10, 30)*TILE_SIZE  # 食物方块图片的x坐标
cookie.y = random.randint(10, 30)*TILE_SIZE  # 食物方块图片的y坐标Snake = []  # 存储蛇的列表
Snake.append(snkaeHead)  # 把蛇头加入到列表中direction = 'up'  # 控制小蛇运动方向
isLoose = False # 游戏是否失败
score = 0 # 游戏得分for i in range(4):  # 再为蛇添加4段蛇身snakebody = Actor('snake1')  # 导入蛇身方块图片snakebody.x = Snake[i].x - TILE_SIZE  # 蛇身方块图片的x坐标snakebody.y = Snake[i].y  # 蛇身方块图片的y坐标Snake.append(snakebody)   # 把蛇身加入到列表中def draw():  # 绘制模块,每帧重复执行screen.clear()  # 每帧清除屏幕,便于重新绘制for snkaebody in Snake:  # 绘制蛇snkaebody.draw()cookie.draw() # 食物的绘制screen.draw.text("得分:"+str(score), (360, 20), fontsize=25,fontname='s', color='white')if isLoose:  # 显示游戏失败信息screen.draw.text("游戏失败!", (180, HEIGHT/2-100),fontsize=100, fontname='s', color='blue')def update():  # 更新模块,每帧重复操作global directionif keyboard.left:  # 如果按下键盘左键direction = 'left'  # 小蛇要向左移if keyboard.right:  # 如果按下键盘右键direction = 'right'  # 小蛇要向右移if keyboard.up:  # 如果按下键盘上键direction = 'up'  # 小蛇要向上移if keyboard.down:  # 如果按下键盘下键direction = 'down'  # 小蛇要向下移def moveSnake(): # 和蛇相关的一些操作global direction, isLoose, scorenewSnakeHead = Actor('snake1')  # 创建新蛇头的图片# 根据direction变量设定新蛇头的坐标,比如小蛇向下移动,就在旧蛇头的下边newSnakeHead = Actor('snake1')if direction == 'right':  # 小蛇向右移动newSnakeHead.x = Snake[0].x + TILE_SIZEnewSnakeHead.y = Snake[0].yif direction == 'left':  # 小蛇向左移动newSnakeHead.x = Snake[0].x - TILE_SIZEnewSnakeHead.y = Snake[0].yif direction == 'up':  # 小蛇向上移动newSnakeHead.x = Snake[0].xnewSnakeHead.y = Snake[0].y - TILE_SIZEif direction == 'down':  # 小蛇向下移动newSnakeHead.x = Snake[0].xnewSnakeHead.y = Snake[0].y + TILE_SIZE# 当小蛇(新蛇头)超出边框时游戏失败if newSnakeHead.y < 0 or newSnakeHead.y > HEIGHT \or newSnakeHead.x < 0 or newSnakeHead.x > WIDTH:isLoose = True# 当小蛇蛇头碰到自身时,游戏失败for snakebody in Snake: # 对所有蛇身循环,判断是否和蛇头坐标一致if newSnakeHead.x == snakebody.x and newSnakeHead.y == snakebody.y:isLoose = Truebreak# 当小蛇头碰到食物时,不处理,也就是长度+1;饼干重新随机位置出现;if newSnakeHead.x == cookie.x and newSnakeHead.y == cookie.y:cookie.x = random.randint(5, 35)*TILE_SIZEcookie.y = random.randint(5, 25)*TILE_SIZEscore = score + 1  # 得分加1else:  # 否则,删除掉旧蛇尾,也就是蛇的长度保持不变del Snake[len(Snake)-1]Snake.insert(0, newSnakeHead)  # 把新蛇头加到列表的最前面# time.sleep(0.2)  # 暂停0.2秒clock.schedule_unique(moveSnake, 0.2)  # 下一次隔0.2秒调用moveSnake()  # 调用移动蛇的函数pgzrun.go()  # 开始执行游戏

分步骤代码、图片素材、讲解视频可以从异步社区下载:

https://www.epubit.com/bookDetails?id=UB72096d97d6149

分步骤代码也可以直接从这里下载:

联想Filez

这一章主要实现了贪吃蛇游戏,讲解了time模块的sleep函数、clock模块的schedule等功能,学习了列表的插入函数、break与continue语句、函数的定义与调用等知识点。读者可以尝试在本章代码基础上继续改进:

1. 实现得分越来越高,游戏速度越来越快的效果;

2. 实现蛇头、蛇身不同颜色的显示效果;

3. 为游戏添加倒计时功能;

4. 尝试双人版贪吃蛇大战,如果碰到对方蛇身则游戏失败。

《Python游戏趣味编程》 第9章 贪吃蛇相关推荐

  1. python趣味编程100_《Python游戏趣味编程》 第8章 勇闯地下一百层

    知乎视频​www.zhihu.com 图书简介可以看这里:童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将编写一个勇闯地下一百层的游戏,键盘控 ...

  2. 弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 消灭星星是一款非常容易上瘾的消除类游戏,只需 ...

  3. python循环绘制六角星_《Python游戏趣味编程》 第3章 美丽的圆圈画

    知乎视频​www.zhihu.com 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了​zhuanlan.zhihu.com 本章我们将利用Python绘制美丽的圆圈画, ...

  4. 《Python游戏趣味编程》第12章 坚持一百秒

    12 坚持一百秒 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个坚持一百秒的游戏,玩家通过鼠标控制飞机躲避飞舞的小球,效果如图12-1所示.首先学习 ...

  5. 《Python游戏趣味编程》 第10章 拼图游戏

    10 拼图游戏 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个拼图游戏,鼠标先后点击两个小拼图块,交换其坐标,直到全部达到正确位置,效果如图10-1 ...

  6. 《Python游戏趣味编程》 第7章 飞机大战

    7 飞机大战 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个飞机大战的游戏,鼠标控制飞机移动.按下鼠标发射子弹,效果如图7-1 ...

  7. 《Python游戏趣味编程》 第6章 见缝插针

    6 见缝插针 Python游戏开发 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将编写一个见缝插针的游戏.按下空格键后发射一根针到圆盘上,所有发射的针跟着圆 ...

  8. 《Python游戏趣味编程》 第4章 疯狂的小圆圈

    4 疯狂的小圆圈 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将实现一个好玩的程序,鼠标点击后,会在点击处出现一些同心圆圈,并在窗口中四处反弹,效果如图4- ...

  9. 《Python游戏趣味编程》 第3章 美丽的圆圈画

    3 美丽的圆圈画 图书简介可以看这里: 童晶:<Python游戏趣味编程>新书上架了 本章我们将利用Python绘制美丽的圆圈画,鼠标点击时圆圈的颜色会随机变化.首先在上一章的基础上,绘制 ...

最新文章

  1. 不同于NLP,数据驱动方法与机器学习无法攻克NLU,原因有三点
  2. 蓝松短视频经验分享----抠图和动画设计
  3. socket中select针对阻塞I/O复用注意的问题
  4. STL标准容器类简介
  5. tensorflow 风格迁移二
  6. linux下防火墙加白名单
  7. 显著改善分割预测,ETH开源基于情景图储存网络的视频目标分割|ECCV2020
  8. 苹果重奖库克,挽留其留任到2025年,网友:雷军又没机会了
  9. android 机顶盒 页面布局,Android机顶盒用户DIY手册.doc
  10. Web Service Software Factory
  11. 五、网络整理BAT脚本——字符串常规操作
  12. 读取文件夹下同类型文件的文件名并排序(实例)
  13. 使用bins对数据进行分段并计算每个分段的数据量
  14. 有偏估计 无偏估计
  15. CSS的三种样式——内联、内部、外部
  16. 江西有哪些互联网企业推荐(上)?
  17. elasticsearch你了解多少?
  18. 【ML】Mean-Shift 原理 + 实践(基于sklearn)
  19. 暴雪服务器遭大规模DDoS攻击 相关分析后续出台
  20. 银行计算机招聘题库,2020山西银行招聘考试题库:计算机模拟试题(五)

热门文章

  1. ~~朴素dijkstra算法
  2. Pytorch——DataLoader的学习笔记~
  3. Altium AD20大电流表层开窗,用特殊粘贴复制平面区域到其他层,阻焊开窗显示沉金LOGO
  4. Mysql和Oracle语句区别
  5. 敏捷开发般若敏捷系列之五:如何推广敏捷(中)(无寿者,回报,破我执)...
  6. sBRDF空间双向反射分布函数完全解析
  7. React Echarts 点击事件
  8. Jmeter4.X - 使用本身自带的脚本录制功能录制脚本
  9. 济南学习 Day 5 T2 am
  10. 12. 星际争霸之php设计模式--模板模式