前两天贴了一个40行的填色游戏,跟帖的人不少,看来大家对短小精悍的代码段比较感兴趣,今天就再贴一个青蛙游戏吧,玩法是一共7个格子,左边3个红青蛙,右边三个蓝青蛙,中间有个空格。点击青蛙可以向前移动一格或跳过一个青蛙,你的任务就是将这两组青蛙完全交换过来。
为了图省事,我用圆点来代表青蛙了,把下面这段代码贴到flash里面,执行即可。
//检查是否成功
function checkSuccess():Boolean {
for (var i = 0; i<arr.length; i++) {
if (arr[i] != arr2[i]) {
return false;
}
}
return true;
}
//定义两个数组,分别是初始化的位置和结束时的位置,1代表红色,2代表蓝色
function game() {
arr = [1, 1, 1, 0, 2, 2, 2];
arr2 = [2, 2, 2, 0, 1, 1, 1];
for (var i = 0; i<arr.length; i++) {
if (arr[i]) {
//如果arr[i]!=0,则进行绘点,赋值,设置响应等一系列工作
var mc:MovieClip = _root.createEmptyMovieClip("mc"+i, i);
mc._x = i*40+100;
mc._y = 100;
mc.lineStyle(40, arr[i] == 1 ? 0xFF0000 : 0xFF, 100);
mc.lineTo(0, .5);
//dir代表前进方向,只能前进,不能后退
mc.dir = arr[i] == 1 ? 1 : -1;
mc.pos = i;
mc.tag = arr[i];
mc.onRelease = function() {
//如果这只青蛙前面是空的,那么它可以前进一格
if (arr[this.pos+this.dir] == 0) {
var move_step = this.dir;
//在前面的条件不成立的情况下,如果前面的第二格是空的,那么它可以前进两格
} else if (arr[this.pos+this.dir*2] == 0) {
var move_step = this.dir*2;
}
//通过前面的判断,可以得出一个move_step,如果这个move_step确实存在,就可以前进拉,
if (move_step != undefined) {
//更新arr
arr[this.pos+move_step] = this.tag;
arr[this.pos] = 0;
//更新这只青蛙的pos值
this.pos = this.pos+move_step;
//更新它的_x坐标
this._x = this.pos*40+100;
}
//检查是否结束
if (checkSuccess()) {
trace("success");
//game();
}
};
}
}
}
game();
|
/upimg/soft/1_061226092210.fla |
加跳嘛,稍微修改一下就行了
1.添加一个jumping的布尔值,判断是否有青蛙正在跳,正跳着时不能响应鼠标
2.添加一个jume_y数组,数组的长度表示跳的时间,每个值表示跳的高度,jump_y = [-5, 30, 50, 55,50, 40, 20, 0];
3.添加一个jump函数:
function jump(mc:MovieClip, move_step:Number) {
jumping = true;
mc.jump_time = 0;
mc.onEnterFrame = function() {
this._y = 100-jump_y[this.jump_time];
this._x += move_step*40/jump_y.length;
mc.jump_time++;
if (this.jump_time == jump_y.length) {
delete this.onEnterFrame;
jumping = false;
}
};
}
4.将原来的“this._x = this.pos*40+100;”替换成jump(this, move_step);
经过以上步骤,青蛙就跳起来啦。
思考:表示一个物体的跳跃,不一定要计算重力,计算弹跳力,一个数组就能搞定,可以联想到之前很多人写slide函数,线性的,二次的,三次的,弹簧的。。。数学成绩不好的同学,肯定看了头疼,何不利用数组,想怎样slide都行。
|
/upimg/soft/1_061226092315.fla |