通过左右键控制大球与小球的距离(二者接近时上升,分离时下降),巧妙地躲避岩石、陨石与黑洞,点亮所有星座,取得最后的胜利。
- 假设背景总高度为1m,划分为100份,每份1cm,每次到达一个新的高度奖励1分(此前到达过的不算,故最多奖励100分)。
- 若球撞到岩石和陨石,分别惩罚不同数值的分数。
- 若球撞到黑洞,则游戏直接结束。
- 若球点亮星座,可以得到奖励分。
- 当到达背景最高处且点亮所有星座时,游戏胜利,进入下一关;当总分小于等于0或者撞到黑洞时,游戏失败。
1、上述分数可根据实际的游戏体验进行调整。
2、在单人模式下,小球不会撞到黑洞和障碍物,只需要引导大球躲开障碍物与黑洞。
- 支持单人和双人模式。
- 大球支持亮暗两种状态(放弃实现)。
- 支持好友的排名(单人(必做)和双人(可选))(放弃实现)。
- 有四种界面的切换。
- 有游戏设置按钮(结束按钮、静音按钮、暂停按钮)。
- 不同的难度选择。
分配:江俊广
文件夹:base
包括大球
和小球
。
球的运动建模。主要受力包括:重力、由于双子互相靠近产生的升力、与障碍物相撞时的冲力、垂直方向上双子互相的引力(防止双子离得太远)、随机的干扰力等。
能够根据外部受力和时间变化进行状态的改变(加速度、速度、位置、(旋转角度)、亮暗)。
分配:程嘉梁
文件夹:base
公有属性:位置、大小、碰撞检测。
均需要随机生成位置,碰撞后的回调函数不同。
包括子类岩石类Stone
、黑洞类BlackHole
、星座类Zodiac
(俊广实现)。
分配:江俊广
,程嘉梁
文件夹:base
,items
Arrow
:实现操作箭头(江俊广)MusicManager
:音乐管理(江俊广)ScoreIndiator
:得分显示(江俊广)Timer
:游戏时间管理(江俊广)BarriersManagement
:障碍物管理(程嘉梁)
分配:江俊广
,程嘉梁
文件夹:view
游戏入口函数类GameMain
。
1、游戏开始界面类StartView
:开始界面背景、游戏模式选择、排行榜查看。
2、游戏正式界面类GameView
:管理全局的数据对象(帧动画、黑洞、障碍物、小球)。新的黑洞与障碍物的生成、全局各种力与碰撞的检测、根据得分判断游戏状态、游戏设置。
3、游戏结束界面类EndView
:展示结束界面(分数)、可选择进入排行榜以及回到开始界面。
4、游戏帮助界面类HelpView
:显示游戏内容说明。
这些都是通过Layabox
的UI界面自动生成的类上进行扩展。
分配:动态调整
文件夹:未定
排行榜类Rank
rank.js
(排行榜类):存储服务器排行榜信息(存储为一个排行榜对象,其中成员为ID:score
)、显示排行榜界面、可返回开始界面。
注:游戏策略类似于跳一跳,因此不再对游戏进度进行存档。
图片:旋转体(同一张图片不同比例的缩放得到大球和小球,绘制发光滤镜得到亮暗两种状态)、背景、岩石、陨石、黑洞、星座各种item。
音乐:类似于游戏中的音乐(舒缓音乐+游戏过关时较为激动的音乐+撞击时的音效)。
- 一般变量名称:变量名一律小写,单词下划线连接(私有类成员变量前加_,最好不使用全局变量)。
- 类名称:每个单词首字母大写,不含下划线,以名词形式。
- 接口名称:每个单词首字母大写,不含下划线,以名词形式。
- 常量名称:加前缀k,每个单词首字母大写,无下划线。
- 文件名称:TypeScript文件与类名相同。
- 函数名称:驼峰命名。
- 所有在UI视图中定义的变量名以View作为后缀,从而与自定义的变量名相区别。
public property
item
:该物体对应的动画或图像。
public method
constructor(backgroundImage:Laya.Image,width:number,height:number,name:string)
:构造函数。randomGenerate(backgroundImage:Laya.Image)
:障碍物随机生成在背景某处。drawItem()
:将障碍物的动画或图像绘制到背景上。(abstract)detectCollisions(ball:Ball)
:检测item与球类的碰撞。(abstract)update()
:更新item位置。getInnerBounds(itemRec:Laya.Rectangle, xScale:number, yScale:number)
:获取图片区域有效区域。
public property
x,y
:获取球的位置vx,vy
:获取球的速度radius
:获取球的半径animation
:获取球的动画
public method
setForce(Fx: number, Fy: number, name: string)
:对小球增加受力,Fx/Fy分别为水平和数值方向的分量,name为该力的种类removeForce(name:string)
:移除小球名字为name的力collide(xRatio:number, yRatio:number)
:碰撞会改变小球的速度分量,使原先的<Vx,Vy>变成<Vx * xRatio, Vy * yRatio>update()
:对小球的位置和速度进行更新pause()
:使小球静止restart()
:使小球重新开始运动drawNormalBall()
:绘制小球普通状态的动画
public property
data
:获取当前的分数 public methodupdateHeight(height:number)
:根据高度的变化�记录奖励clearHeight()
:清空此前记录的高度gerReward(reward: number)
:接受奖励getPenalty(penalty: number)
:接受惩罚
public property
data
:获取当前的分数
public method
onPlaySound(url:string)
:播放特殊音效,url可取值见包括Game.BlackHoleCollisionSound(和黑洞撞击),Game.StoneCollisionSound(和岩石撞击的声音)turnOff():void
:关闭声音turnOn():void
:重新打开声音
public property
blackHoles
:存黑洞的数组stones
:存陨石的数组zodiacs
:存星座的数组
public method
regenerateBarrier(backgroundImage:Laya.Image)
:重新生成屏幕上所有障碍物drawBarriers()
:绘制各障碍物的动画或图像updateBarriers()
:刷新各障碍物的动画或图像
public method
gamePause
:暂停游戏gameRestart
:恢复此前暂停的游戏
public method
init()
:结束界面还原初始化设置showEnd()
:显示结束的缓动动画
public method
init()
:帮助界面还原初始化设置,开始接受鼠标事件。
public method
createEvents()
:创建各种响应时间toOnePlayerGameView()
:到单人游戏界面toTwoPlayersGameView()
:到双人游戏界面toEndView()
:到结束界面toStartView
:到开始界面toHelpView
:到帮助界面outHelpView
:退出帮助界面
- 在结束界面按了开始后,游戏就自动开始了。
- 玩几局以后,当我选择按钮时,出来的显示播放按钮(而不是暂停按钮),点一下播放以后,才会出现暂停按钮。