python笔记—>贪吃蛇游戏制作

1、安装需要的库pygame

Python Pygame 是一款专门为开发和设计 2D 电子游戏而生的软件包,它支 Windows、Linux、Mac OS 等操作系统,具有良好的跨平台性。Pygame 由  Pete Shinners 于 2000 年开发而成,是一款免费、开源的的软件包,因此您可以放心地使用它来开发游戏,不用担心有任何费用产生。

终端安装执行命令为        pip install pygame

本人采用的是pycharm编译器, 在pycharm中可以在设置中的python解释器中安装pygame包。

2、创建文件夹

用于保存代码及其所需要的字体和图片

 1、其中字体用到的文件为s.ttf,可在网站中下载喜欢的字体,将字体另存为s.ttf放在fonts文件夹中。

2、images中的图片文件为cookie.jpg        snake1.jpg

3、创建python文件为 snake.py

3、游戏代码解析

1、导入需要的库

import pgzrun  # 导入游戏库
import random # 导入随机库

 2、界面大小及蛇大小

TILE_SIZE = 20  # 小蛇方块的大小,20*20
WIDTH = 40*TILE_SIZE  # 设置窗口的宽度 800
HEIGHT = 30*TILE_SIZE  # 设置窗口的高度 600

3、导入蛇头及食物

snkaeHead = 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)  # 把蛇头加入到列表中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)   # 把蛇身加入到列表中

  4、 初始运动方向、分数及成败

direction = 'up'  # 控制小蛇运动方向
isLoose = False # 游戏是否失败
score = 0 # 游戏得分

5、绘图

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')

6、键盘操作运动方向

def update():  # 更新模块,每帧重复操作global directionif keyboard.left:  # 如果按下键盘左键direction = 'left'  # 小蛇要向左移if keyboard.right:  # 如果按下键盘右键direction = 'right'  # 小蛇要向右移if keyboard.up:  # 如果按下键盘上键direction = 'up'  # 小蛇要向上移if keyboard.down:  # 如果按下键盘下键direction = 'down'  # 小蛇要向下移

7、蛇运动及碰撞效果

def moveSnake(): # 和蛇相关的一些操作global direction, isLoose, scoreif isLoose:returnnewSnakeHead = 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秒调用

8、调用函数及执行游戏

moveSnake()  # 调用移动蛇的函数
pgzrun.go()  # 开始执行游戏

4、游戏完整代码

import pgzrun  # 导入游戏库
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)  # 把蛇头加入到列表中
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)   # 把蛇身加入到列表中direction = 'up'  # 控制小蛇运动方向
isLoose = False # 游戏是否失败
score = 0 # 游戏得分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, scoreif isLoose:returnnewSnakeHead = 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()  # 开始执行游戏

5、游戏效果

QQ录屏20221002232005

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37016.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

贪吃蛇游戏是有史以来最受欢迎的街机游戏之一。在这个游戏中&#xff0c;玩家的主要目标是在不撞墙或不撞墙的情况下抓住最大数量的水果。在学习 Python 或 Pygame 时&#xff0c;可以将创建蛇游戏视为一项挑战。这是每个新手程序员都应该接受的最好的初学者友好项目之一。学习…

使用pygame制作贪吃蛇小游戏

使用pygame制作贪吃蛇小游戏 开发基本思路效果展示 具体实施步骤制作窗口&#xff0c;插入音频与图片绘制蛇与果实按键控制生成食物死亡设置其他设置 整体代码 开发基本思路 1、制作窗口&#xff0c;插入音频与图片 2、绘制蛇与果实 3、按键控制 4、生成食物 5、结束判断 效果…

应对新的挑战!ChatGPT将如何改变多域作战?

​公众号博主推送内容&#xff0c;未经许可&#xff0c;不得转载或者引用。 原文&#xff1a;Exploring the Possibilities of ChatGPT in Rugged Military AI Applications 《ChatGPT&#xff1a;利用最先进的技术支撑多域作战》 ChatGPT是一款基于GPT-3大型自然语言模型的…

Unity 接入巨量引擎今日头条广告投放SDK

巨量引擎 头条上报SDK接入 1.进入巨量引擎平台 ① 下载头条上报SDK SDK接入文档 我用的是5.3.0的官网上是3.3.12 SDK下载完了之后。 ②将unity工程导出android 工程。然后将下载的aar包导入UnityLibrary/libs文件夹下&#xff08;如图文件夹&#xff09; 并在改build.gradle文…

字节跳动 AI Lab 火山翻译在 WMT2022 非洲语向任务夺得桂冠

动手点关注 干货不迷路 1. 非洲语言的现状 非洲是世界上面积第二大的大洲&#xff0c;也是世界上第二个人口大洲&#xff0c;其大陆上存在 2146 种语言——约占世界语言总数的三分之一。广袤的面积、繁多的种族&#xff0c;还有宗教传播和殖民统治的影响&#xff0c;使其成为世…

Java开发经典面试题

重写与重载的区别重写与重载的区别_重写和重载_carrie呀carrie的博客-CSDN博客。。。。。。。。。。。https://blog.csdn.net/luoro/article/details/118307852?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167875749216800211587145%2522%252C%2522scm%2522%253…

2023前端面试时遇到的面试题

2023前端面试时遇到的面试题 1.数组有哪些方法 push、pop、unshift、shift、join、forEach、filter、map、find… 2.filter和some返回的分别是一个什么 filter返回的是一个数组&#xff0c;some返回的是一个布尔值 3.es6新增了哪些方法 let和cconst、模板字符串&#xff…

Promise面试题

Promise面试题&#xff0c;带你搞懂同步异步执行顺序 前置知识面试题面试题一面试题二面试题三面试题四 分析面试题一分析面试题二分析面试题三分析面试题四分析 前置知识 Promise中的then方法 then&#xff1a;指定用于得到成功value的成功回调和用于得到失败reason的失败回调…

移动版OpenAI,手机的杀手还是救星?

AI登陆手机&#xff0c;难度因人而异。 原本小编还以为「2023年是属于元宇宙的一年」&#xff0c;实在没想到以ChatGPT为代表的AI技术能在这么短的时间内抢走元宇宙的风头&#xff0c;成为2023年的技术关键词。从OpenAI到搜索引擎、从绘图工具到游戏公司&#xff0c;几乎所有「…

领导讲话云山雾罩像糊弄鬼,这些职场潜规则你知道吗

上一篇&#xff1a;入职银行科技部半年&#xff0c;我已经丧失跳槽的能力了&#xff01; 混迹职场时间久了&#xff0c;就会发现领导职务越高&#xff0c;说话越有水平&#xff0c;也有高度&#xff0c;可是有时让你听的却是云山雾罩&#xff0c;不知道该如何应对。 聪明的人能…

代码的艺术(一)

目录 代码整洁的必要性 为什么要有代码 为什么要写得整洁 整洁的艺术 混乱的代价 整洁的定义 规整端正&#xff0c;符合规范 简洁精炼&#xff0c;便于阅读 什么是整洁的代码 怎样写出整洁的代码 不断改进 不要糊弄 具体做法 有意义的命名 使用函数 注释 勤加…

〖程序员的自我修养 - 优质简历篇①〗- 知己知彼,面试官是如何分析一份简历的

人之所以会觉得迷茫&#xff0c;本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考能力与认知能力。 说明&#xff1a;该文属于 程序员的自我修养 专栏&#xff0c;购买任意白宝书体系化专栏可加入易编程社区&#xff0c;早鸟价订阅模式除外。福利&#xff1a…

chatgpt赋能python:Python抠图教程:用代码实现高效抠图

Python 抠图教程&#xff1a;用代码实现高效抠图 什么是抠图&#xff1f; 在设计、美术、广告等领域中&#xff0c;经常需要把一张图片中的某个物体或人物单独提取出来&#xff0c;以便于进行后续的处理、叠加、合成等操作。这个过程就叫做抠图。 传统的抠图方式需要用到PS、…

ChatGPT大升级?它去考研能考上物理所吗?

3月15日本应是小编勤勤恳恳搬砖的平凡一天&#xff0c;但小编刚睡醒就发现朋友圈被ChatGPT刷屏了&#xff1a; 新版GPT-4震撼发布&#xff01; 大升级&#xff01;强到爆炸&#xff01; 这些字眼引起了我的兴趣&#xff0c;于是小编迅速入(ke)手(jin)了gpt-4&#xff0c;经过简…

快速构建一个简单的对话+问答AI (上)

文章目录 前言part0 资源准备基本功能语料停用词问答闲聊语料 获取 part01句的表达表达one-hot编码 词嵌入大致原理实现简单版复杂版如何训练 转换后的形状 part02 循环神经网络RNNRNN投影图RNN是三维立体的 LSTM&GRU part03意图识别分词FastText分类FastText网络结构优化点…

Postman请求具有拦截器(登录限制)接口

Postman请求具有拦截器&#xff08;登录限制&#xff09;接口 方法一&#xff1a;注释掉拦截器。 方法二&#xff1a;使用cookie信息 1.登录登陆页获取cookie信息 2.正式调用接口

postman访问提示限制

postman访问http://10.10.171.204:9090/platform/honda/addRtmVehicleTbox提示限制的原因&#xff1a; 被拦截 Websense 类别“Private IP Addresses”已筛选。解决办法&#xff1a; 关掉postman代理设置

PostMan如何模拟get请求

PostMan为调试接口提供了方便的操作&#xff0c;可以配置各种参数&#xff0c;那么使用postman如何模拟get请求&#xff0c;本文对此问题进行简要讲述。 工具/原料 Postman 方法/步骤 1 打开postman&#xff0c;创建一个新的请求。这两有两种方式创建&#xff0c;第一种&…

产研团队任务管理工具:盘点国内外9款知名任务管理系统软件

以下是10款国内外最知名的任务管理系统&#xff1a;1.研发项目任务管理-PingCode&#xff1b;2.通用项目任务管理-Worktile&#xff1b;3.免费开源研发任务工具-Redmine&#xff1b;4.海外著名项目任务管理工具-Asana&#xff1b;5.免费任务管理软件-Trello&#xff1b;6.个人任…

AI绘画的技巧与实践

1.三个不错的AI绘画平台 最近&#xff0c;AI绘画非常流行&#xff0c;只要输入一些关键词&#xff08;prompt脚本&#xff09;&#xff0c;就可以AI帮你绘画出精美的图画&#xff0c;真的很有意思。 在百度上随便搜一下&#xff0c;就能搜出各种乱七八糟的AI绘画平台&#xf…