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

news2024/11/25 20:21:18

 [导读]:超平老师的《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.coloradmin.cn/o/616327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果iOS证书制作教程

众所周知,如果你需要上架苹果APP就必须要苹果iOS证书进行APP签名,否则苹果手机将无法安装你开发的APP,废话不多说,直接上教程。 第一步,注册账号 准备appleid必须开通双重认证,如果注册个人开发者直接下载d…

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

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

leetcode98. 验证二叉搜索树(java)

验证二叉搜索树 leetcode98. 验证二叉搜索树题目描述 递归法解题思路代码演示 中序遍历解法解题思路代码演示 二叉树专题 leetcode98. 验证二叉搜索树 leetcode 98.验证二叉搜索树 来源:力扣(LeetCode) 链接:https://leetcode.cn/…

Linux开发中的辅助工具

文章目录 前言一、add2line二、strip三、ar四、nm五、objdump六、size七、strings总结 前言 本篇文章我们来介绍一些Linux开发中的辅助工具,有了这些辅助工具将会让我们的开发变的更加轻松。 一、add2line addr2line是一个GNU调试工具,用于将程序计数…

priority_queue的模拟实现和仿函数

priority_queue模拟 首先查看源代码,源代码就在queue剩下的部分中 push_heap是STL库中的堆算法,STL库中包装有支持堆的算法,在algorithm.h中: 只要不断用堆的形式插入数据,就会形成堆。 priority_queue模拟——初版 pr…

自定义组件中,使用onLoad,onShow生命周期失效问题

的解决方法 自定义组件中,使用onLoad,onShow生命周期失效问题 自定义组件中,使用onLoad,onShow生命周期失效问题 官方文档可查阅到: 页面生命周期仅在page中的vue页面有效,而单独封装的组件中【页面周期无效】,但是Vu…

Pytorch入门(四)使用VGG16网络训练CIFAR10数据集

本文使用PytorchVGG16官方CIFAR10数据集完成图像分类。识别效果如下: 文章目录 一、VGG16 神经网络结构二、VGG16 模型训练三、预测CIFAR10中的是个类别 一、VGG16 神经网络结构 VGG,又叫VGG-16,顾名思义就是有16层,包括13个卷…

地震勘探基础(十)之地震速度关系

地震速度 地震勘探中引入了多种速度的概念,如下图所示。 层速度、平均速度和均方根速度之间的关系 层速度指的是某一套地层垂向上,由于地质条件相对稳定,地层顶底厚度比上地震波的传播时间为层速度,用 v n v_n vn​ 表示。 如下…

一文看懂软件架构4+1视图

目录 一、概述 二、各视图详解 1. 场景视图 2. 逻辑视图 3. 开发视图 4. 处理视图 5. 物理视图 葵花宝典:一看就懂的理解方式 一、概述 41视图包括: 场景视图(也叫用例视图):黑盒视图。从外部视角&#xff…

chatgpt赋能python:Python如何分段数据的平均数

Python如何分段数据的平均数 Python是一门极其流行的编程语言,广泛应用于数据分析与科学计算领域。在数据分析中,计算各个数据段的平均数是一项常见的任务。本文将介绍如何使用Python分段计算数据的平均数,以及如何优化这一过程以使速度更快…

Linux中的lrzsz

一、介绍 lrzsz是一款在Linux里可代替ftp上传和下载的程序,也就是一款软件。它是开发者常用的一款工具,这个工具用于windows机器和远端的Linux机器通过XShell传输文件。 二、lrzsz的安装 在安装之前,我们可以使用下述命令先查看yum仓库中是否存在我们要安装的软件: yum…

CentOS7使用Docker快速安装Davinci

环境信息 操作系统:CentOS7Docker : 23.0.6 (已配置阿里云镜像加速) 安装步骤 安装docker-compose-plugin 官方的例子使用的是docker-compose,但是由于yum能够安装的最新斑斑是1.x,而且官方的docker-compose要求最低版本为2.2以…

首个区块链技术领域国家标准出台 ,中创助力打造区块链技术和应用创新高地

区块链作为数字中国的重要技术底座,正在深刻改变着我国社会生产方式。何谓区块链,对大众来说,也许尚陌生,殊不知,这一产业已稳稳起跑在我国高质量发展的“赛道”上。 近日,《区块链和分布式记账技术参考架…

【JavaScript】超全基础万字大总结

目录 一、初识 JavaScript 1.1 JavaScript 是什么? 1.2 发展历史 1.3 JavaScript 和 HTML 和 CSS 之间的关系 1.4 JavaScript 运行过程 1.5 JavaScript 的组成 二、前置知识 2.1 第一个程序 2.2 JavaScript 的书写形式 2.3 输入输出 三、语法概览 3.1 变…

Linux(CentOS 7) 安装 Mysql8 、Java 以及 mycat2 详细流程

目录 一、Mysql8 安装 1.下载mysql8 2. 解压Mysql 压缩包 3.重名命mysql 文件 4.创建data文件夹 储存文件 5.创建用户组以及用户 6.授权用户 将mysql文件夹的所有者和所有组都改为mysql 7.mysql初始化进入bin目录执行mysqld文件进行初始化 8.编辑my.cnf 9.添加mysqld…

有哪些虚拟化和容器化工具推荐? - 易智编译EaseEditing

以下是几个常用的虚拟化和容器化工具推荐: VMware vSphere: VMware vSphere 是一套完整的虚拟化平台,包括虚拟化服务器、虚拟化存储和虚拟化网络。 它提供了高性能的虚拟机管理和资源调度功能,适用于企业级的虚拟化部署。 Docke…

IT知识百科:什么是跨站脚本(XSS)攻击?

跨站脚本(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用该漏洞在受害者的网页中插入恶意脚本,从而能够获取用户的敏感信息、劫持会话或进行其他恶意活动。本文将详细介绍跨站脚本攻击的原理、类型、常…

vue props传值层级多,子级孙子级怎么修改传参

vue props传值层级多了,子级孙子级怎么修改传参 1.出现背景2.怎么在孙组件里改变传过来的值呢2.1这样改是不行的2.2可行的方法2.2.1 引用对象只改变单属性2.2.2 provide和inject 1.出现背景 本来自己写页面的话是直接全部写在一个vue文件里,一个vue文件…

【solidworks】此文档 templates\gba0.drwdot 使用字体长仿宋体,而该字体不可用

一、问题背景 在SolidWorks中绘制工程图纸时,新建一个图纸,打开后就弹出字体错误 此文档 templates\gba0.drwdot 使用字体长仿宋体,而该字体不可用。 二、解决办法 点击选择新的字体,拖到最下面选择汉仪长仿宋体。 上面之所…

41 管理虚拟机可维护性-虚拟机NMI Watchdog

文章目录 41 管理虚拟机可维护性-虚拟机NMI Watchdog41.1 概述41.2 注意事项41.3 操作步骤 41 管理虚拟机可维护性-虚拟机NMI Watchdog 41.1 概述 NMI Watchdog是一种用来检测Linux出现hardlockup(硬死锁)的机制。通过产生NMI不可屏蔽中断,…