Scratch克隆应用编程之射击游戏

一、引言

在我的上一篇文章 https://blog.51cto.com/zhuxianzhong/2474435 《Scratch高级编程之克隆技术再研究》中,我把Scratch的克隆技术划分为非共享数据克隆体与共享数据克隆体两大类型,本文将给出非共享数据克隆体的一种应用举例——克隆子弹与弹壳。当然,这个例子属于克隆技术的一种比较基础性的应用情形。

二、快照欣赏

因为本处不方便提供视频片断,仅提供游戏过程中枪发射子弹某一时刻的静态截图如下:

三、角色功能设计

(一)小游戏中几个关键角色的关系

(二)枪角色功能模块

(三)子弹角色功能设计

(四)弹壳角色功能设计

(五)血条角色功能设计

四、变量定义

(一)隐藏型全局变量

  • gv弹药量:与血条绘制对应,最大值是36。
  • gv射击方向:在射击过程中,枪方向在随时抖动,这个变量一直跟随枪的当前方向,并根据需要当方向超过一定限度作微调。这与实际枪战中射击情形是一致的。
  • gv正在重装子弹:这是一个控制共享访问协调并发访问的互斥类型信号变量。

    (二)隐藏型局部变量

  • lv弹壳X方向加速度:定义弹壳X方向加速度
  • lv弹壳Y方向加速度:定义弹壳Y方向加速度


在以前的文章中我们强调,尽管是加速度,但是在Scratch循环中这个加速度正好对应于“速度变化量“含义,这个单位时间正好对应循环一次所用时间。这是与物理上加速度定义相符合的。

五、角色编程

(一)枪角色编程

在前面设计枪角色(两个造型)时,注意枪的中心点,因为后面子弹与弹壳的位置都以它为标准,见下面设计时截图:

枪中心点位于准星与弹夹上部交叉点

1.鼠标拖动枪的代码

上述代码非常简单,这里仅作简化设计,鼠标拖动枪只能修改位置,不能旋转。

2.射击方向跟踪与调整

与前面说明的一致,全局变量”gv射击方向“作用是时刻跟踪枪的射击方向,因为射击中的抖动效果,所以,要及时作微调。

3.按r键重装弹药代码

在这段代码(实际上是一个线程)中,有如下几点需要注意:
(1)这是一个一直跟踪判断按r键的无限循环

(2)互斥信号变量”gv正在重装子弹“的作用希望大家好好体会一下,因为在重装子弹中有些事情是不允许发生的(例如本游戏中的发射子弹)。这个变量在枪角色的另外一个线程(实际是本角色的主线程)中也使用到,这种类型变量的引入作用正在于控制避免矛盾的情形发生。下面代码再详细介绍。

(3)在重装过程中,为了体现延时效果(这样才看得清楚),使用了一个运行100次的小循环,有兴趣的朋友可以修改这个循环次数观察效果。

(4)重装结束(小循环结束),播放消息重装结束(此消息用于判断是否可发射子弹、绘制血条等地方使用)。

(5)然后,修改变量值指示总药量已满(36),并设置互斥信号变量”gv正在重装子弹“以说明重装结束,最后切换造型。

4.按空格键发射子弹代码

上面代码完成了两大任务:一个变量初始化(从全局来看,此几行代码相当于整个小游戏需要变量的初始化准备);按空格键发射子弹。

细分析循环语句内部,当有弹药且重新安装已经完成时,发射子弹:克隆子弹与弹壳;修改总弹药量、广播消息用于绘制血条、微调方向等。

(二)子弹角色编程

结合本文开始提到的,大家注意这里克隆体的用法,其实是很简单的。注意它使用了哪些数据,这些数据来自于哪里,是自身的还是全局其他地方定义的。有关代码逻辑实现,相信不用解释了,比较易于理解。

(三)弹壳角色编程

结合上面的模块功能介绍,相信朋友们也不难理解这里的逻辑。这个克隆体,虽然看起来比子弹克隆体代码复杂,但是,它使用的数据全部是它自身的!因此,这个克隆体实现更为简单,只是由于它涉及到物理学中部分知识而显得略微复杂一点。

大家把握如下几点,便不难理解上面代码了:

(1)为了模拟子弹发射后子弹壳崩出的效果,有两个方向的加速度(X方向与Y方向)。但是,在Scratch内部,每次循环相应于过了一个单位时间,所以这个加速度正好对应于两个方向的速度的变化量。这一点希望一定理解;否则,再开发稍微复杂的物理游戏就更麻烦了。(题外一句:希望青少年朋友认真钻研物理,从小打好基本功!)。

(2)随着循环的不断执行,不断地修改两个方向的速度(经验值在此很重要,有兴趣的朋友可以作相似数据修改,观察效果)。

(3)克隆体在不需要时尽量删除,从而提高系统的整体运行性能。

(四)血条角色编程

炮弹剩余量表示我们统一用流行的游戏中的”血条“这个名称来称呼。血条的绘制并不太难理解。

绘制前首先需要初始准备。

因为当血条角色接收到消息”发射“与”重装完毕“时都会使用相同逻辑绘制血条,所以我们定义了一个自定义积木”绘制剩余血量“。

(1)代码一

上面的绘制逻辑是通过修改X坐标值来实现的。注意:游戏中最大子弹量为36,随着不断发射子弹,这个数在不断减少。

(2)重新装满子弹时绘制代码

装满子弹的逻辑较上面绘制剩余血量更简单,要绘制整个完整血条,在此不再解释。

六、小结

本文中,我们通过一个形象有趣的小游戏来介绍了克隆编程在Scratch编程中的一种典型应用。当然,这个例子中的克隆应用算是相当基础性的,属于我们前面归纳的”非共享数据克隆体“中的比较简单的一种类型——尽管使用了两个克隆体。在以后的例子中,我还会介绍更复杂的克隆体编程的应用情形,欢迎朋友们关注并共同探讨。

原文地址:https://blog.51cto.com/zhuxianzhong/2475038

时间: 2025-02-01 06:51:33

Scratch克隆应用编程之射击游戏的相关文章

少儿编程Scratch第四讲:射击游戏的制作,克隆的奥秘

上周的宇宙大战射击游戏中,我们只完成了宇宙飞船发射子弹的部分.还未制作敌对方.这周制作了敌方-飞龙,飞龙随机在屏幕上方出现,如果被子弹打中,则得分,飞龙和子弹都消失. 敌方:飞龙:计分. 目的 目的:制作射击游戏的敌方-吐火的飞龙.当子弹碰到飞龙时,飞龙被消灭,同时增加分数. 实现方式 克隆依然是重要的操作. 每一只飞龙出现时,都需要先克隆一份,然后设定一定的随机方向,从屏幕上方往下移动.为了让飞龙有飞的感觉,我们切换飞龙的造型.飞龙在普通造型和吐火的造型中来回切换. 如果碰到子弹(闪电),则删

Scratch克隆技术、多线程编程及通讯技术初探

一.引言 Scratch,作为世界流行的青少年编程语言,其对青少年智力的开发及计算思维的培养根本毋庸置疑.既然定位在青少年,那就不能复杂,但是,又要遵循"低门槛,高上限"两个基本特征.让青少年尽快入门的同时,又可以让部分能够深入钻研的同学深刻体会到编程的创造性.复杂性及内在乐趣.而后者,在全国青少年编程竞赛与等级考试中肯定要体现出来--自然也是体现参加者作品创意与难度的所在. Scratch开发者恰当地把握了上述要求与特征:最基础最重要的计算机编程语言特征必须具备,同时又尽可能巧妙地&

Scratch高阶编程之克隆技术再研究

一.引言 克隆技术是时下热门的Scratch少儿编程考试或者竞赛必须面对的重点与难点之一.本文试图从较高的层面探讨Scratch编程中克隆技术的本质,并进一步把克隆技术的应用划分为两大类型--共享数据克隆体和非共享数据克隆体,最后给出各自的应用举例. 对于初.高中对面向对象编程概念没有基础的小朋友,可以略过本注释的阅读转而进行第二小节的阅读.熟悉其他高级编程语言的朋友都了解面向对象编程,其三种特征(封装.继承与多态)都在Scratch中得到非常自然与形象的体现.在此暂不赘述,有兴趣的朋友可多多联

Java Swing打猎射击游戏编程代码下载

代码下载地址:http://www.zuidaima.com/share/1858069987494912.htm 原文:Java Swing打猎射击游戏编程代码下载 这是一款java swing编写的打猎射击游戏,从这款游戏的编程中,我们可以练习如何进行射击对象的消失及相关按键的监听. 该游戏的一大亮点还是对运动图片的二级缓冲功能,运行时可以感受到非常的流畅,对于想从事游戏编程的人员来说是必须要掌握的一个技能点. 游戏操作:通过鼠标点击野猪和小鸟来是实现击中功能,子弹不足时提示"装载子弹...

unity3d游戏开发之第一人称射击游戏

简介 这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS).其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧. 前提 这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念. 创建新工程 下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件. 从Unity安装目录导入Standard Assets资源包. 导入工程后,你会在Unity工程面板中的"Standard Assets"文件夹下看见这些资源内容

第一人称射击游戏总结概览

这个游戏小项目为第一人称射击游戏 大概分为几个步骤: 一:主角的制作 1.控制主角移动的实现 要点: character Controller组件的理解 rigidbody组件的理解 colider与rigidbody的理解 用代码控制主角的移动——键盘交互的实现 //操作主角移动 //定义3个值控制移动 float xm = 0, ym = 0, zm = 0; //上下左右运动 if (Input.GetKey(KeyCode.W)) { zm += m_movSpeed * Time.de

Unity3D--学习太空射击游戏制作(二)

步骤三:创建主角 游戏的主角是一艘太空飞船,我们将使用一个飞船模型作为游戏的主角,并赋予他一个脚本,控制他的运动,游戏体的组件必须依赖于脚本才能运行. 01:在Project窗口找到Player.fbx(通过3D Max制作的模型),将其拖动到Hierarchy窗口创建飞船的模型游戏体,然后在Inspector窗口将它的Y轴坐标设置为0,并旋转180度,如图: 02:在Project窗口选择Assets,右键选择Create->Folder创建一个文件夹,取名为Scripts,用于存放脚本文件,

射击游戏---栈与子弹(2)

[栈]射击游戏1 Description 小明很喜欢玩射击游戏.他刚考完了数据结构期末考试,感觉不错,于是又来到了射击娱乐场放松一下.和上次一样,先从老板那租了一把步枪和装有N发子弹的弹夹.这里,再把规则说一遍.在射击的过程中,小明每次都有两种选择:从弹夹中取出一颗子弹上膛,或者打一发子弹出去.注意:所有的子弹都从枪口上膛.小明感觉这有点像<数据结构>课程中的“栈”的特点.因此在打完了这N发子弹之后,他想验证一下这些子弹打出来的顺序是不是真的满足“栈”的特性.假设N颗子弹的编号为1,2,…,N

结对编程——黄金点游戏之旅【二】

一.黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数(不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(黄金分割常数),得到G值.提交的数字最靠近G(取绝对值)的同学得到N分,离G最远的同学得到-2分,其他同学得0分. 二.后续功能的实现功能 经过三天的努力,我们终于完成了开始游戏.取消准备.查看历史纪录.添加测试以及退出登录功能. 1.开始游戏(准备游戏)功能介绍:玩家登陆成功后直接进入游戏界面,下方的准备窗口会