第13届蓝桥杯青少组Scratch第1次省赛真题第3题:打棒球

背景信息:

在棒球比赛中,本垒打是指击球员将对方来球击出后(通常击出外野护栏),击球员依次跑过一、二、三垒并安全回到本垒的进攻方法,是棒球比赛中非常精彩的高潮瞬间。

【编程实现】:呈现一次精彩绝伦的本垒打。


具体要求:

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

2). 按下空格键,自舞台左侧抛出棒球,棒球向舞台右侧水平匀速移动;

3). 当棒球飞到下图的位置,击球员做出挥棒动作,刚好打到棒球;

4). 棒球被击飞,向左上角移动,且移动中棒球变大(有移动变大效果);

5). 3秒后,棒球消失,击球员按照一垒-二垒-三垒的顺序跑垒(逆时针方向,参见视频),最终回到本垒,程序结束。

【分析编码】:

本题包含两个角色,分别是击球员和棒球,如图:

本题是模拟棒球比赛中,一次本垒打的过程。根据题目的描述,我们可以将整个过程拆分为以下4个部分:

1、棒球运动(棒球向舞台右侧水平匀速移动);

2、击球(击球员做出挥棒动作);

3、棒球被击飞;

4、跑垒。

其中,棒球运动和棒球被击飞是棒球角色需要完成的功能,击球与跑垒是运动员需要完成的角色 。两者,以及流程之间的过渡,可以使用消息机制来实现。下面分角色来分析:

1、棒球角色(Baseball)

题目要求,按下空格键,自舞台左侧抛出棒球,这是等待<>指令的典型应用。可以使用:等待<按下空格键>的组合指令。

棒球向舞台右侧水平匀速移动,到达某一位置后,球员做出挥棒动作。移动指令有三种:

面向方向 + 移动指令

将x/y坐标增加*指令

在*秒内滑行到x,y指令

其中,前二条指令需要借助重复指令来完成,而第三条指令是个独占指令,即:在设定的时间内,无法干预其执行。

但是,球员做出挥棒动作,是需执行时间的,如果使用第三条指令,那么两个过程之间就会出现停顿,看起来效果不好。

这里,我们可以使用将x坐标增加*指令,并当x值大于某个位置后,即通知运动员角色开始击球,此时,通过一定的时间后,两者正好相遇。

先看一下代码:

说明:

1)、 为确保只需广播一次<击球>,我们增设了一个变量来控制;

2)、棒球需要完成的另一个动作是:向左上角移动,且移动中棒球变大。由于变大和移动是两个同时进行的过程,我们也可以分别放置在两个当接收到消息模块中执行。

3)、其中的数字,在调试时,可以适当修改,让整个程序运行起来比较流畅。


2、球员角色(Batter)

球员相对简单,当收到击球消息后,做出挥棒动作,其实就是造型的切换。

另外就是跑垒,跑垒过程就是依次跑过一、二、三垒并安全回到本垒,其实就是3次滑行动作,只需要确定好每一次滑行的坐标即可,最后,切换到击球员角色。

代码如下:

原文链接:,转发请注明来源!