推箱子-第14届蓝桥杯国赛Scratch真题初中级组第3题

news/2024/5/20 4:45:20/文章来源:https://blog.csdn.net/diamondwang2012/article/details/131070589

 [导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第145讲。

推箱子,本题是2023年5月28日上午举行的第14届蓝桥杯国赛Scratch图形化编程初中级组真题第3题,题目要求编程实现推箱子游戏 。玩家通过按下方向键来推动箱子前进,当三只箱子分别被男孩推到三个黑色方框上,程序结束。

先来看看题目的要求吧。

一.题目说明

编程实现:

推箱子。

具体要求:

1). 点击绿旗,角色、背景如图所示;

2). 按下一次键盘上的方向键,如果男孩面向方向与按下方向键的方向一致,则男孩向此方向前进一个格子的距离(男孩碰到墙壁就不能再次继续移动);

3). 按下一次键盘上的方向键,如果男孩面向方向与按下方向键的方向不一致,则男孩需转向所按下方向键的方向;

4). 男孩碰到箱子后,男孩推动箱子同向移动,当箱子碰到墙壁或其他箱子时不能再继续移动;

5). 当三只箱子分别被男孩推到三个黑色方框上,程序结束。

评判标准:

  • 3分:满足"具体要求"中的1);

  • 10分:满足"具体要求"中的2);

  • 10分:满足"具体要求"中的3)。

  • 17分:满足"具体要求"中的4);

  • 10分:满足"具体要求"中的5)。

二.思路分析

本题包含3个角色,分别是箱子、黑色方框和男孩,如图所示:

本题效果看起来简单,但是要实现起来还是挺有难度的,我们使用计算思维将作品功能进行拆分,大致可以分成如下几个模块:

  • 初始化地图;

  • 控制男孩移动;

  • 推动箱子前进;

  • 判断游戏成功;

第一个模块,初始化地图,主要是指3个箱子和3个黑色方框的显示,黑色方框表示箱子的目标位置。我们可以使用克隆来生成箱子和黑色方框,注意调整好位置。

第二个模块,控制男孩移动,玩家是通过方向键来控制男孩上下左右移动的,需要注意三点:

1). 每次移动之前需要确保男孩的方向和按键一致,否则就是转向操作;

2). 碰到墙壁时,不能向前移动,可以使用后退指令来实现;

3). 推动箱子前进时,如果碰到前面有墙壁和箱子,不能向前移动,也可以使用后退指令来实现;

第三个模块,推动箱子前进,当箱子碰到男孩时,就说明箱子要前进了,但是要注意前方如果有箱子或墙壁,就不能前进。

第四个模块,当3个箱子分别推到3个黑色方框内,游戏结束,我们可以使用一个变量来记录已经放好的箱子数量。但是需要注意一点,就是箱子推到黑色方块位置后,还可以推出来,此时要同步更新变量的值。

接下来,我们进入具体的编程实现环节。

三.编程实现

根据题目描述和思路分析,我们分4步来编写程序:

  • 初始化地图

  • 控制男孩移动

  • 推动箱子前进

  • 判断游戏成功

1. 初始化地图

先从男孩开始吧,这个比较简单,只需要设置好坐标和方向即可,代码如下:

其次是箱子,按照题目要求,调整好箱子的位置,在3个不同的位置分别克隆即可,切换到箱子角色,编写代码如下:

最后是黑色方框,和箱子一样,调整好位置,克隆3个方框,切换到黑色方框角色,编写代码如下:

运行程序,效果如下:

这样一来,初始化地图效果就已经做好了。

2. 控制男孩移动

在作品中,是通过按下方向键来控制男孩移动的,关于按键编程,通常有两种写法:

  • 直接使用”当按下xx键“指令;

  • 在绿旗代码块中,使用循环结合“按下xx键”指令 ;

到底应该使用哪一种呢,从写代码的角度来讲,前者更为简单,但是它有一个缺点,就是不受绿旗控制,也就无法做到完全停止游戏,只要你按键,代码还会继续执行。

本题明确要求了游戏结束,所以应该使用后者。在使用第二种方式的时候,可以根据实际情况做灵活处理。

比如,本作品中要对上下左右4个方向分别进行判断,代码有点长,我们可以分成4个代码块,每个代码块处理一个方向。

如果只是对一个方向进行判断,我们还可以使用“等待条件”指令替代“如果...那么” + “按下xx键”。

我们以向上移动为例,在男孩角色中编写代码如下:

简单说明三点:

1). 这里增加了一个“等待按下↑键不成立”,确保按下再松开算一次按键;

2). 如果方向向上,则向上移动50步,否则就面向0方向;

3). 如果碰到红色的墙壁,则退50步,后退最简单的写法就是移动-50步;

其它3个方向的代码和这个基本一样,就不再列出了。

3. 推动箱子前进

根据前面的思路分析,当箱子碰到男孩时,就意味着男孩在推箱子前进了。

所以,我们可以在箱子中检测是否碰到男孩了,如果碰到男孩,则沿着男孩的方向前进一格,如果箱子前面有箱子或是墙壁,则需要退回来。

切换到箱子角色,在克隆体启动时代码块中,编写代码如下:

当箱子后退时,男孩也要后退一格,所以这里发送了一个“后退”的广播消息。

相应的,男孩角色在接收到广播消息后,需要后退50步,切换到男孩角色,增加如下代码:

这样一来,推箱子的效果就已经实现了。

4. 判断游戏成功

先创建一个变量“成功数量”,用于表示已经到达目标位置的箱子。

当黑色方框碰到箱子了,将数量加1,同时还需要检测,方框是否离开箱子了,一旦离开,就需要将数量减1。

切换到黑色方框角色,编写代码如下:

当成功数量为3时,游戏结束,男孩就不再移动了,切换到男孩角色,编写代码如下:

需要注意,这里将变量的初始化放到了等待指令的前面,是确保在判断之前变量的初始值一定为0。

到这里,基本上就可以实现作品的全部功能了,但是代码并没有完全停止,因为箱子克隆体和黑色方框克隆体还有重复执行的代码呢。

我们可以使用同样的方式,来停止克隆体的代码,在箱子角色和黑色方框角色中,分别增加如下代码:

需要注意的是,对于克隆体而言,要停止其它脚本,也必须放在“当作为克隆体启动时”代码块中。

至此,我们的推箱子游戏就创作完成了,赶紧来体验一下吧,效果还是很不错的。

四.总结与思考

本题是编程部分第3题,分数为50分,积木块数量120个左右,涉及到的知识点主要包括:

  • 初始化设置;

  • 克隆编程;

  • 事件编程,包括按键处理和事件广播机制;

  • 运动编程;

  • 变量的运用;

  • 等待指令的妙用;

本题取材于经典游戏《推箱子》,要求实现其中的一个关卡效果,题目难度不小,建议完成时间10~20分钟,中级组考生10分钟,而初级组考生约为20分钟。

本题最大的难点在于如何实现男孩推着箱子前进,我们的解决方案就是碰撞检测,再结合后退机制。每次都默认可以前进,一旦发现前方有箱子或者碰到墙壁,就立刻后退,后退时巧妙了利用了负数的编程技巧,从而让代码变得超级简单。

如果仅从知识点层面来看,本题中所涉及到的都是常见知识点,并没有特别难的,关键还是在于灵活运用。

正所谓熟能生巧,只要你不断的去练习、去思考、去总结,不管是什么样的作品,你都能轻松的应对。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要素材和源码的,可以移步至“超平的编程课”gzh,或者私信本人。

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

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

相关文章

boost 搜索引擎

boost搜索引擎 01 项目演示 done 02 讲解思路 03 项目背景 公司:百度、搜狗、360搜索、头条新闻客户端 - 我们自己实现是不可能的! 站内搜索:搜索的数据更垂直,数据量其实更小 boost的官网是没有站内搜索的,需要…

深度学习基础知识-tf.keras实例: 加州房价预测

参考书籍:《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 代码有修改,已测通。 简单顺序结构 这次得数据集比之前得简单,只包含数字型特征,没有ocean…

设备指纹系列--前端篇

基础篇请看:设备指纹系列–基础篇 我们接着前文继续写关于设备指纹前端接入方面的内容。话不多说,直接步入正题。 我们会在下文展示5种前端接入的方式,包括web接入、安卓接入、ios接入、微信小程序接入以及支付宝小程序接入。 Web接入 第…

VSCode+GDB+Qemu调试ARM64 linux内核

俗话说,工欲善其事 必先利其器。linux kernel是一个非常复杂的系统,初学者会很难入门。 如果有一个方便的调试环境,学习效率至少能有5-10倍的提升。 为了学习linux内核,通常有这两个需要 可以摆脱硬件,方便的编译和…

Java基础学习+面向对象

一,基础概念介绍 1.1Java跨平台原理(一次编译,处处运行) Java 源代码经过编译,生成字节码文件,交由 Java 虚拟机来执行,不同得系统有不同得JVM,借助JVM 实现跨平台。就比如说我们在 Windows 下…

【Linux】13. 文件操作

1. 重新认识文件 经过之前的linux命令操作、进程相关概念的学习,我们对于文件也并不陌生 首先需要明确以下概念: 即使是空文件,也要在磁盘当中占据空间文件 文件内容 文件属性文件操作 对文件内容的操作 或者 对文件属性的操作 或者 二者…

ChatGPT训练一次要耗多少电?

如果开个玩笑:问ChatGPT最大的贡献是什么? “我觉得它对全球变暖是有一定贡献的。”知名自然语言处理专家、计算机科学家吴军在4月接受某媒体采访时如是说。 随着ChatGPT引爆AIGC,国内外巨头纷纷推出自己的AI大模型,大家为人工智…

跨境电商独立站搭建-跨境电商源码网站开发部署,独立站技术

跨境电商独立站是指在国际互联网上建立并拥有自己独立的电商网站,在该网站上进行跨境电商业务,包括产品展示、交易处理、支付结算、物流配送等全流程。相较于在第三方平台上开店,跨境电商独立站具有更高的自主权和品牌形象,能够更…

Redis 高级数据结构 HyperLogLog

介绍 HyperLogLog(Hyper[ˈhaɪpə(r)])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过HyperLogLog可以 利用极小的内存空间完成独立总数的统计,数据集可以是IP、Email、ID等。如果你负责开发维护一个大型的网站,有一天…

Java实现Mqtt收发消息

Java实现Mqtt收发消息 文章目录 Java实现Mqtt收发消息windows mqtt 平台服务搭建mqtt 客户端工具:mqttbox整体代码结构mqtt基础参数配置类mqtt客户端连接mqtt接收的消息处理类对应的MqttService注解和MqttTopic注解 MqttGateway 发送消息指定topic接收处理方法 java…

Servlet Cookie基本概念和使用方法

目录 Cookie 介绍 Cookie 主要有两种类型:会话 Cookie 和持久 Cookie。 Cookie使用步骤 使用Servlet和Cookie实现客户端存储的登录功能示例: LoginServlet类 index.jsp 删除Cookie 浏览器中查看Cookie的方法 Cookie 介绍 Cookie 是一种在网站和…

测试老鸟总结,自动化测试难点挑战应对方法,我的进阶之路...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

不定积分练习

不定积分练习 在看视频的时候遇到了一道比较有趣的题,在这里给大家分享一下。 题目 计算 ∫ ( 1 x − 1 x ) e x 1 x d x \int(1x-\dfrac 1x)e^{x\frac 1x}dx ∫(1x−x1​)exx1​dx 解: \qquad 原式 ∫ e x 1 x d x ∫ x ( 1 − 1 x 2 ) e x 1…

Promise-用法

目录 1.处理异步的几种方案 2.理解 3.promise状态:初始化 4.执行异步任务 5.执行异步任务成功 6.执行异步任务失败 7.执行异步任务成功-返回 8.执行异步任务失败-返回 1.处理异步的几种方案 纯粹callback,会剥夺函数return的能力promise&#xf…

【Java基础学习打卡01】计算机概述

目录 引言一、计算机是什么?1.计算机vs计算器2.计算机定义 二、计算机发展简史三、计算机分类四、计算机基本工作原理1.冯诺依曼2.冯诺依曼原理 总结 引言 其实我们在学习Java编程之前应该要对计算机有所了解,这里的了解不是说我们日常接触电脑就算是了…

postgres篇---docker安装postgres,python连接postgres数据库

postgres篇---docker安装postgres,python连接postgres数据库 一、docker安装postgres1.1 安装Docker:1.2 从Docker Hub获取PostgreSQL镜像1.3 创建PostgreSQL容器1.4 访问PostgreSQL 二. python连接postgres数据库2.1 connect连接2.2 cursor2.3 excute执…

docker-compose 搭建 zipkin 服务端

目录 基于docker-compose搭建服务端 数据库 服务器 docker-compose.yaml 问题 测试 基于docker-compose搭建服务端 数据库 我这边存储选择了Mysql存储,新建了 zipkin库,数据库脚本如下 -- -- Copyright 2015-2019 The OpenZipkin Authors -- -- Li…

Springboot3 + SpringSecurity + JWT + OpenApi3 实现认证授权

Springboot3 SpringSecurity JWT OpenApi3 实现双token 目前全网最新的 Spring Security JWT 实现双 Token 的案例!收藏就对了,欢迎各位看友学习参考。此项目由作者个人创作,可以供大家学习和项目实战使用,创作不易&#xff…

linux 部署mysql

本文介绍下Centos7中mysql的安装(Centos7以下版本中有些命令和centos7中有些不同,安时需注意下自己的linux版本) 事先准备 1、查看系统中是否自带安装mysql yum list installed | grep mysql ![在这里插入图片描述](https://img-blog.csdnimg.cn/e322b2f4036c4d9…

电力能耗监测系统是如何运作的

电力能耗监测系统数据的采集主要通过多功能仪表、通讯管理机、通讯协议实现能耗数据的采集,能耗数据上传后经大数据计算实现能耗数据的展示,满足用户对能耗监测的需求。下面对电力能耗监测系统的是怎么采集数据的展开介绍: 1.多功能仪表 对高…