同色消除小游戏完整项目

第一步:

/**
 * 切换到下一个小球类型
 * @param ballImg 要切换类型的小球Dom元素
 */
function toNextBallType(ballImg) {
    // 先改变ballType属性:当前ballType小于小于可用数时,加1,否则直接指定为1
    if (ballImg.ballType < validBallCount) {
        ballImg.ballType = ballImg.ballType + 1;
    } else {
        ballImg.ballType = 1;
    }

    // 根据ballType,加载对应的小球图片
    ballImg.src = 'images/' + ballImg.ballType + '.png';

    // 清除上一次定时器
    clearTimeout(clearTimeoutId);

    // 设定一个定时器,300毫秒后执行关卡完成逻辑检测。为什么要300毫秒后检测?因为如果切换后马上检测并清理,计算机将会非常快执行,玩家还没有来得及看清小球变化就已经被清理掉了,体验不好。
    clearTimeoutId = setTimeout(checkIfLevelUp, 300);

    console.log('已切换到下一个小球类型:' + ballImg.ballType);
}

第二步:

/**
 * 检查是否已完成关卡
 */
function checkIfLevelUp() {
    if (!gamePlaying) {
        return;
    }

    console.log('检查是否已完成关卡');

    // 获取本关第一个小球,并判断所有小球的ballType是否与第一个小球相等,如果全相等,说明关卡完成
    var firstBall = levelBallsArr[0];
    var ballsCount = levelBallsArr.length;
    var levelComplete = true;
    for (var i = 0; i < ballsCount; i++) {
        if (levelBallsArr[i].ballType !== firstBall.ballType) {
            levelComplete = false;
            break
        }
    }

    if (!levelComplete) {
        console.log('所有小球颜色不完全一致,关卡未完成,请继续。');
        return;
    }

    // 如果关卡完成,计算本关得分,清除所有小球,并进入下一关。
    console.log('关卡' + level + '已完成,将结算本关,并进入下一关');
    score += Math.max(1, parseInt(levelTime / 1000));
    clearBalls(levelBallsArr);
    createLevel(level + 1);
}

第三步:

/**
 * 根据指定数据,清除所有小球
 * @param ballsArr 需要清除的小球数组
 */
function clearBalls(ballsArr) {
    if (ballsArr) {
        console.log('清除所有小球');
        var length = ballsArr.length;
        for (var i = 0; i < length; i++) {
            ballsArr[i] && ballsArr[i].remove();
        }
    }
}

第四步:

/**
 * 根据指定数据,清除所有小球
 * @param ballsArr 需要清除的小球数组
 */
function clearBalls(ballsArr) {
    if (ballsArr) {
        console.log('清除所有小球');
        var length = ballsArr.length;
        for (var i = 0; i < length; i++) {
            ballsArr[i] && ballsArr[i].remove();
        }
    }
}

第五步:

/**
 * 循环执行的定时器,40的意思是40毫秒执行一次,相当于每秒执行25次。主要是为了循环检测倒计时是否结束,及刷新信息栏的显示。
 */
setInterval(onInterval, 40);

function onInterval() {
    // 如果是非游戏状态,是不需要执行此方法的
    if (gamePlaying) {
        levelTime -= 25;
        if (levelTime <= 0) {
            console.log('时间到,游戏结束!');
            gameOver();
        }
        updateInfoView();// 刷新信息栏的显示
    }
}

第六步:

/**
 * 游戏结束,设置游戏状态为false,弹出游戏结束界面,隐藏其它界面,并显示最终得分
 */
function gameOver() {
    console.log('显示游戏结束界面!');
    gamePlaying = false;
    overContainer.innerText = '游戏结束\n\n得分:' + score + '\n\n\n重新开始';
    setVisible(overContainer, true);
    setVisible(gameContainer, false);
    setVisible(infoContainer, false);
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容