同色消除小游戏关卡和切换小球类型逻辑

第一步:

// 游戏相关变量
var validBallCount;// 可用小球数量,随着关卡上升而增加,有最大限制
var clearTimeoutId;// 定时器标记
var levelBallsArr;// 用于存放关卡小球的数组
var score;// 当前游戏得分
var level;// 当前游戏关卡
var levelTime;// 关卡游戏可用时间,随着关卡上升而减少,有最小限制
var gamePlaying;// 游戏状态,标记游戏是否正在进行

第二步:

/**
 * 创建关卡
 * 逻辑说明:根据指定的关卡创建关卡内容
 * 遗留问题:创建一个关卡的时候,有一定的机率出现在创建的时候所有小球的颜色就已经是完全一致了,怎样解决?
 * @param lev 关卡
 */
function createLevel(lev) {
    level = lev;

    // 如果创建的是第一关,说明是从头开始游戏,需要将游戏得分设置为0
    if (level === 1) {
        score = 0;
    }

    // 关卡游戏可用时间, 每上升一级,减少1000毫秒,也就是1秒,最大30秒,最小值5秒
    levelTime = Math.max(5000, 30000 - (level - 1) * 1000);

    // 用于存放关卡小球的数组,每次创建关卡时都要重建,并把创建的小球存放到数组中以供后面游戏逻辑调用
    levelBallsArr = [];

    // 可用小球数量,每上升3关增加一个,最小值为2个,最大值为6个。具体就是,1-3关2个,4-6关3个……。2个时,在实际操作中,就是点击一个小球2次,可回到原来的颜色,3个就是点击3次回到原来的颜色。
    validBallCount = Math.min(6, parseInt(level / 3) + 2);

    // 小球行数,随着关卡上升而增加,最小值为2,最大值为7
    var row = Math.min(7, 2 + parseInt(level / 2));

    // 小球列数,随着关卡上升而增加,最小值为2,最大值为4
    var col = Math.min(4, 2 + parseInt(level / 2));

    // 根据行列数和小球尺寸来设置游戏容器的大小
    gameContainer.style.width = 73 * col + 'px';
    gameContainer.style.height = 73 * row + 'px';

    //使用一个嵌套循环来创建小球
    for (var i = 0; i < row; i++) {
        for (var k = 0; k < col; k++) {
            var img = new Image();// 创建小球图片Dom元素
            img.style.verticalAlign = 'bottom';// 设置小球垂直对齐方式,这是为了解决小球下边距的问题
            var ballType = parseInt(Math.random() * validBallCount + 1);// 计算小球随机类型
            img.ballType = ballType;// 记录小球类型
            img.src = 'images/' + ballType + '.png';// 加载小球类型对应的小球图片
            gameContainer.appendChild(img);// 把小球添加到显示列表
            levelBallsArr.push(img);// 把小球存放到关卡小球数组中
        }
    }

    gamePlaying = true;// 设置游戏状态为true

    var logsArr = [
        '创建关卡:' + level,
        '行数:' + row,
        '列数:' + col,
        '可用小球数:' + validBallCount,
        '限时:' + levelTime / 1000 + '秒'
    ];
    console.log(logsArr.join(' '));
}

第三步:

/**
 * 点击游戏界面时调用的方法
 * @param event
 */
function onGameClick(event) {
    // 获取被点击的Dom元素
    var clickDom = event.target;
    // 如果被点击的Dom元素是有ballType属性,说明点击的是一个小球,进入切换小球颜色逻辑
    if (clickDom.ballType) {
        toNextBallType(clickDom);
    }
}

第四步:

/**
 * 切换到下一个小球类型
 * @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';
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,743评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,296评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,285评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,485评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,581评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,821评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,960评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,719评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,186评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,516评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,650评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,936评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,757评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,991评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,370评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,527评论 2 349

推荐阅读更多精彩内容

  • 陈氏太极拳老架一路讲义 前言 写给喜爱太极拳的武术朋友们 中华武术,源远流长,今虽门派繁多,实一脉相承。太极拳以它...
    阿德乐阅读 5,598评论 0 12
  • 《播种幸福》麦克格西 并不是最勤奋的人就最富有。 并不是博士更有机会成为亿万富翁。 有时候,似乎选择比勤奋更重要。...
    黄玉新阅读 4,169评论 1 11
  • 有时候打开工程发现原有的真机和模拟器编译不见了,有可能是你换了台电脑拷了个新工程. 解决方案如下: 1、首先关闭你...
    那个女孩_T阅读 745评论 0 2
  • 怎么样才能拥有强大的气场,只有从各方面提升自己才行吧,每天需要自己完成的事情: 1、每天按时吃饭、睡觉。这个是基础...
    仙仙的妈阅读 505评论 0 51
  • 晚上,我静静地躺在床上睡着了,梦精灵把我带进了一个奇妙的世界里。 我睁开眼,发现,我在一间豪华的别墅...
    诺凌风阅读 189评论 1 4