Scratch

状课网-少儿编程网课专业平台

Scratch 跟我学scratch编程:台球(高级版)

发布时间:2021-11-29 11:37:30 浏览 0

  这个游戏CC哥参照了国外一个scratch爱好者的编程方法,比国内很多教Scratch的做的台球游戏要好得多,所以就备注了个高级版,大家来一起看看高级在哪里了。

  先看看视频,大家感觉出来有什么不一样的吗?看着好像不奇怪,不就是一个球的角色在弹来弹去吗?

  如果是这样CC哥就不说是高级版了。一般我们做这个游戏会这么构想,做一个小球的角色,然后去检测小球跟颜色的碰撞。这是个基本逻辑。如果这样,CC哥也就不会来分享这个游戏了。

  这个游戏的亮点,就是全是画的。包括球台,球弹来弹去,瞄准的特效,都是画的。有没有感觉有点腻害呢?

  要画一个游戏,包括所有的细节,那就需要细致和要知道在哪里画,画的步骤是如何的。

  我们在这次编程的时候,就不能象以前一样思考了,以前每次编程的过程中用的大多是对象的思维,每个角色都是一个编程对象,把每个角色的代码做好,再处理好角色之间的协调关系。

  而这次这么编程就不行了,而是要用一种新的思考方式:把整个游戏想象成由一帧一帧的画面组成。所以你编程的时候,每一步,都要去把整个画面画一遍。就象动画片一样,是由一连串的图片连续播放下来,就变成了动画了。所以整个程序就只有一个循环,而不是象你编写的其他程序一样,有无数个循环过程。在这个程序里,就象放动画片一样,整个程序就只有一个循环操作。在每一次的循环操作里面,你都需要把整个画面画一遍。

  逻辑理解透彻没?逻辑懂了,再看这段代码就难度不大了。

 

  看,好多代码吧,看不清吧,没关系。这个图就是让你看看,别看这么简单个程序,但是代码还是写了不少的。

跟我学scratch编程:台球(高级版)

  先介绍一些这个游戏里面几个关键点的做法:

  1:瞄准。

跟我学scratch编程:台球(高级版)

  这个瞄准是不是很有特色,这个可以放大缩小的圆圈来表示开球的力度。箭头表示开球的方向。箭头指向的方向永远是跟鼠标指针所在的位置相反。比如鼠标指针在小球下面,箭头就指向上面。另外圆圈的大小是跟指针和小球的距离决定的,当指针离小球越近的时候,圆圈就相应变小。而鼠标离的远到一定程度,圆圈就不会再扩大了。表示开球的力度是有上限的。

  这个部分的难点是,这个特效完全是随着鼠标指针在光滑的运动的。一会儿给大家过代码。

  2:反弹怎么做?

跟我学scratch编程:台球(高级版)

跟我学scratch编程:台球(高级版)

  之前大家学的反弹都是通过碰撞检测来做的,无非是碰到颜色,还是碰到角色。但是这里面就不行了。因为CC哥讲过了,这个程序都是画出来的,所以你所有的角色就是一支画笔。那么你就不能通过碰撞检测的命令来做了。想到什么方法没?

  位置检测就能很好的解决这个问题,考虑好小球在什么位置是会反弹,然后决定下一帧图画该怎么画。用这个思路就能处理好碰撞的问题。

主程序介绍:

  最关键的是主框架的设计,也就是游戏大循环的设计,刚才讲了,这个循环大家要想象成动画的每一帧。也就是在每次循环里面,所有的元素都需要画一遍,然后全部擦除掉,下一个循环里面再重新画。

  这种程序为了不出错误,往往会用到大量的自定义变量和自制积木。变量主要是来记录状态和位置信息。自制积木主要是出于编程简便和程序管理的目的。

跟我学scratch编程:台球(高级版)

跟我学scratch编程:台球(高级版)

  1:先把球台尺寸定义好,x,y的值。

  2:球洞的位置初始化好。就是在球台的区域内找个随机位置。

跟我学scratch编程:台球(高级版)

  3:开球的位置初始化好。也是在球台里面找个随机位置。为了不让两个位置重叠了,我一个放在上面一个放在了下面。

跟我学scratch编程:台球(高级版)

  4:把shot状态设定成1,表示现在是瞄准的状态,不是球开出的状态。

  5:进入循环操作,也就是进入正式的画图操作。

  6:画图前的第一件事就是把整个屏幕上画的东西都先擦掉。(Scratch只提供了一条全部擦除的命令,所以我们每次不可能只擦出屏幕上的一部分内容,如果要擦就只能全部擦掉。所以大家不要考虑用什么办法只擦其中一部分内容。如果大家学习了计算机原理就知道,其实这种全部擦除重新画是执行效率最高的办法。)

  7:刚才说过了,既然要重新画,所以就要把球台重新画一遍,虽然它是在整个程序中唯一不变化的东西,但是每一帧动画还是要重新画一遍。

  8:球洞也要重新画。

  9:下面就要判断该画什么了,如果是准备开球的状态,那么就画准备开球的图,如果是球开出的状态,那么就要画球移动的图。

  10:在球移动的每一步,我们要区分两种情况,一种是球没进洞,然后慢慢停了,另一种是球进洞了。这两种情况都会改变当前的状态。如果是球没进洞而停了下来,那么下一轮直接回到开球状态就好,如果是进洞了,那么就重新设置洞的位置和球的位置重新开始。

  整个画画的逻辑清楚了吧,因为CC哥基本全部用了自治积木,所以这个主程序大家只要逻辑清晰,那么很容易看懂的。

  我们下面来介绍一下这些自制积木:

1:

跟我学scratch编程:台球(高级版)

跟我学scratch编程:台球(高级版)

  Scratch的画图时,大家最好养成一笔画的习惯,因为画图有一个抬笔和落笔的过程,在落笔后,任何的移动都会画出痕迹,所以如果用一笔画的方式,你就剩了中间的抬笔和落笔的过程。

2:

跟我学scratch编程:台球(高级版)

  这个过程主要是把瞄准的效果做出来。

  程序太长了,截了两张图。

跟我学scratch编程:台球(高级版)

 

  这部分程序,我讲细点。

  第一步首先要画个球才行。那么就用图章来做。因为CC哥把画笔这个角色的造型设定成了台球的造型。

跟我学scratch编程:台球(高级版)

  这一段程序是画那个大小会变的圈,每一帧瞄准的画面里都要画这个一个圈。圈的大小由此时此刻,鼠标和球的距离决定。

  画圈的方法有很多种,在这里CC哥用的是自己比较习惯的一种,就是通过中心点和半径的大小,来计算圆周上每一点的位置(x, y)来画。这里面会用到sin和cos的函数来计算。

跟我学scratch编程:台球(高级版)

  这段程序是来画那个击球方向的箭头效果的。dist代表了鼠标和球心的距离,也表示击球的力度大小,最大值设定到了35。那么指针的长度就是dist。箭头的颜色做了个特效。

跟我学scratch编程:台球(高级版)

  关于arrow这个自制积木其实是画箭头的头部尖尖的部分。这段程序大家就自己看了,这就是一笔画的小技巧。

跟我学scratch编程:台球(高级版)

  最后这部分就是如果按下了鼠标,就代表击球了。一旦击球,状态就发射了变化,首先把shot设定成零,那么下一次画图的时候就要画球移动的图了。另外保存一下球被击出后的前进方向。direction。

跟我学scratch编程:台球(高级版)

跟我学scratch编程:台球(高级版)

  球移动第一步就是要先确认球这一步的方向。所以要先做方向检测。

跟我学scratch编程:台球(高级版)

  这个方向判断就是判断球碰到了上下左右四个边的情况,下一步会往哪个方向走。另外我们之前在做碰撞检测的时候,当检测到碰到某种颜色或角色的时候,检测完都要回退一步。在这里也是需要做回退处理的,否则很有可能你的球就会永远沾在球台边出不来。这一点大家可以自己试试,想想为什么,之前的讲座里,CC哥也有详细讲过。

  移动的过程是一个由快变慢直到静止的过程,所以我们用dist这个变量代表球的速度,一开始每一步移动的快,然后就逐步减小。你可以用每次减小dist的一个固定值的办法,让球每一步移动的距离逐渐变小,也可以用dist乘以一个小于1的系数来让球每次移动的距离变小。这两种效果大家可以自己体验一下。

  另外当dist小于一定值的时候,就代表球移动结束了,那么就需要重新设定状态,将状态恢复到重新击球的状态。将shot的值改为1。

5:

跟我学scratch编程:台球(高级版)

  这个得分检测主要看两个情况,第一是球的中心和洞的中心足够近,第二就是球的速度不能太快,打过台球的人都知道,如果太快了,球不会进洞的。距离可以用x距离的平方加上y距离的平方获得,速度就是dist,那么我把两个值加起来小于一个固定值。这样就解决了距离和速度平衡的问题。如果足够准,速度快点也能进洞,如果速度慢,即使不足够准,球也能进洞。

  如果检测到球进洞了,那么就要把score这个状态变量改变一下,然后重新设置程序的状态。

跟我学scratch编程:台球(高级版)

  这个程序整体的情况就是这样,另外需要注意的是,如果你在画图过程中,在一帧画面中,有些动作你是希望一瞬间完成的,比如画球台,画瞄准的效果这种。这样视觉效果就会非常连贯。也就是每一步都一瞬间画出一帧图来。那么你要注意一个细节。就是在自制积木的设定时,选中运行时不刷新屏幕。这个选项很重要,否则你的游戏效果就出不来了。

跟我学scratch编程:台球(高级版)

  今天的程序是不是很有意思,大家可以好好学一下,这是一种新的编程思路。虽然编程会复杂,但是会做出效果逼真的小游戏来。大家不妨试验一下。

  文章来源:跟我学scratch编程

本文链接:https://www.ascratch.com/news/17660.html

上一篇:跟我学scratch编程:微信跳一跳(二) 下一篇:返回列表