GameBuilder开发游戏应用系列之100行代码实现别踩白块

在线预览:http://osgames.duapp.com/apprun.html?appid=osgames1-961421749977376

在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-961421749977376

微信扫描:

游戏截图:

别踩白块是一款非常流行的游戏,该游戏于2014年4月16日上线App Store。并在全球40多个国家、地区免费游戏榜登顶榜首[4] ,超过一百个国家或地区排名前十 ,5月份荣登全球游戏下载总榜(iOS + Android)第一宝座,游戏上线3个月累计下载达1亿。

别踩白块的实现方法在GameBuilder种的实现方式,主要靠一个UICanvas的控件,这里的UICanvas不同于Cantk本身基于的html5 canvas,它继承自Cantk将UIElement,只是将canvas的2d context接口暴露出来,由用户来决定需要绘制的内容和方式。

UICanvas有一个绘制事件借口onPaint,大部分的逻辑在此接口里面完成。主要逻辑如下:

  1. 生成黑块列表(一行中四格种只有一个黑快)
  2. 绘制黑白块方格
  3. 判断点击事件

生成黑块列表

用一个随机数表示黑块位置,保存在行数组里面。

win.prepareBlock = function() {
    for(var raw = 0; raw < 1001; raw++) {
        var col = Math.floor(Math.random() * 4);
        win.blockList[raw] = col;
        //console.log("raw:" + raw + " col:" + col);
    }
};

绘制黑白块方格

代码写在UICanvas的onPaint事件里面。

  1. 判断当前行是否已经点击过
  2. 递增偏移量,根据偏移量,重新绘制游戏区域内的方块。这样做是为了有动画效果。

判断点击事件

  1. 根据点换算成行列值
  2. 在数组里查询当前行黑块所在列
  3. 比较二者是否一致。
win.doOnClick = function(point) {
    var x = point.x;
    var y = point.y;
    var raw = Math.floor(win.curRaw + 1 - (this.h - y) / win.bsl);
    var col = Math.floor(x / win.bsl);
    if(win.blockList[raw] === col) {
        win.blockList[raw] = -1;
        win.score += 100;
        win.find("score").setValue(win.score);
    } else if(win.blockList[raw] === -1) {
        //do nothing;
    } else {
        this.gameover = true;
        this.openWindow("win-dlg-confirm", function(ret) {
            this.score = 0;
            win.find("score").setValue(win.score);},
            false, this.score
        );
        this.score = 0;
        this.replay();
    }
};

别踩白块有很多玩法,经典/街机/禅/极速,这里只实现经典模式,其他模式只需要控制一下白块产生的方式应该可以很快实现。

时间: 2024-10-10 02:02:30

GameBuilder开发游戏应用系列之100行代码实现别踩白块的相关文章

GameBuilder开发游戏应用系列之100行代码实现贪吃蛇

在线预览:http://osgames.duapp.com/apprun.html?appid=osgames1-801422234293697 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-801422234293697 微信扫描: 运行截图: 除了重力感应游戏,GameBuilder开发传统的游戏也毫不逊色,作为一个怀旧的人,总是对这类游戏情有独钟. 贪吃蛇主要靠一个[UICanvas]来实现,前面一片博客GameB

GameBuilder开发游戏应用系列之100行代码实现微信打飞机

在线预览:http://osgames.duapp.com/apprun.html?appid=osgames1-951421981197090 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-951421981197090 微信扫描: 微信打飞机实现起来并不难,需要用到的知识点有如下几点: 碰撞检测:敌机与敌机之间不检测,子弹与敌机需要检测. 触摸跟随:我方飞机要根据触摸点的位置变化而变化. 子弹与敌机生成:子弹需要定时

GameBuilder开发游戏应用系列之70行代码实现套圆环

在线预览:http://osgames.duapp.com/apprun.html?appid=osgames1-551421721381542 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-551421721381542 微信扫描: 运行截图: 套圆环是火舞上的一款非常火爆的游戏,它是FlappyBird的变种,也是重力感应类的游戏,不同的是碰撞检测从FlappyBird的钢管,变成中间的一根绳子. 这根绳子在Game

GameBuilder开发游戏应用系列之60行代码实现FlappyBird

在线演示:http://osgames.duapp.com/apprun.html?appid=osgames1-911422256817006 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-911422256817006 微信扫描: 运行截图: FlappyBird是2014年爆红的一款游戏,属于经典的重力感应游戏,玩法非常简单同时又非常虐心,正是这样的特点让FlappyBird得以在社交网络病毒式的传播. GameB

GameBuilder开发游戏应用系列之50行代码实现微信漂流瓶

在线运行:http://osgames.duapp.com/apprun.html?appid=osgames1-871422195197258 在线编辑:http://osgames.duapp.com/gamebuilder.php?appid=osgames1-871422195197258 微信扫描: 运行截图: 这里实现微信漂流瓶不是真的完全实现,而是借机会介绍一下Cantk的UIFootprint控件. 漂流瓶中的网走的是一个曲线,在Cantk种可以用UIFootprint来实现,请

GameBuilder开发游戏应用系列

最近迷上了一个在线html游戏开发工具GameBuilder,作者是知名csdn博客专家李先静老师, 李老师在内核.驱动.GUI.MMI.软件设计方法和软件优化等方面均有建树,这一次的GameBuilder,是李老师基于html5画布构建的html5游戏应用开发平台中的一部分. 开发平台分为两部分: 在线开发工具GameBuilder,GameBuilder是一个可视化编程工具,游戏中的场景控件,只要鼠标轻轻一拖即可生成. GUI框架Cantk,一个开源的游戏引擎和APP框架,是开发HTML5游

GameBuilder开发游戏应用系列之Cantk窗口生命周期

Cantk中的窗口(UIWindow/UIScene)与Android的Activity等组件一样有完整的生命周期,假设我的Web应用有两个窗口:FirstWindow,SecondWindow,整个应用的生命应该如下图所示: Created with Rapha?l 2.1.2FirstWindowFirstWindowSecondWindowSecondWindow1.FirstWindow's onSystemInit called2.SecondWindow's onSystemInit

Cocos2d-x 3.x 开发(十八)10行代码看自动Batch,10行代码看自动剔除

1.概述 在游戏的运行过程中,图形的绘制是非常大的开销.对于良莠不齐的Android手机市场,绘制优化较好的游戏,可以在更多的手机上运行,因此也是优化的重中之重.图形方面的优化主要体现在减少GUP的绘制次数上.这里我们分别从自动优化渲染批次和绘制剔除两个方面来看新版本在绘制上的优化. 2.自动batch 在Cocos2d-x 3.x中,抛弃了先前手动编写BatchNode,采用自动管理的方式.说起BatchNode,就难免涉及到显卡底层的绘制原理.简单的说,每提交一条绘制指令到显卡都会产生消耗,

cocos2dx游戏开发——别踩白块学习笔记(二)——经典模式的实现

一.创建GameScene以及GameLayer 就是简单创建一个Scene而已,在此就不多说啦~,可以参照我的打飞机的学习笔记(2). 二.添加一个开始栏 很简单,就是调用Block中的create方法就可以啦~,只是需要传入大小和颜色等等的参数即可. void GameLayer::addStartLine() { auto block = Block::createWithArgs(Color3B::YELLOW, Size(visibleSize.width,visibleSize.he