IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Cocos Creator 案例源码分享二(黑白迭代) -> 正文阅读

[游戏开发]Cocos Creator 案例源码分享二(黑白迭代)

最近闲来无聊,想学习Cocos Creator游戏编程,并把自己在学习过程中的一些案例分享出来,后面会陆续推出一些小游戏的,由于本人第一次接触Cocos Creator 和JavaScript,代码多有疏漏欢迎留言指正。

?

游戏画面展示:

游戏源码共享:

https://download.csdn.net/download/hucailai/20166220

游戏引擎版本:2.3.3

// 学习交流:QQ群:624554876
cc.Class({
    extends: cc.Component,

    properties: {
        RootNode: {
            type: cc.Node,
            default:null,
        },

        smallNode: {
            type: cc.Node,
            default:null,
        },

        Success: {
            type: cc.Label,
            default:null,
        },
    },



    onLoad () {
        this.cellWidth = 50;
        this.cellHeight = this.cellWidth;
        this.lineWidth = 2;
        this.cellCnt = 9;  //9*9格子
        this.frameWidth = 20;
        this.baseX = -(this.cellCnt * this.cellWidth +  (this.cellCnt + 1) * this.lineWidth )/2;
        this.baseY = -(this.cellCnt * this.cellHeight +  (this.cellCnt + 1) * this.lineWidth )/2;

        this.sCellWidth = 25;
        this.sCellHeight = this.sCellWidth;
        this.sLineWidth = 1;
        this.sCellCnt = 9;  //9*9格子
        this.sFrameWidth = 10;
        this.sBaseX = -(this.sCellCnt * this.sCellWidth +  (this.sCellCnt + 1) * this.sLineWidth )/2;
        this.sBaseY = -(this.sCellCnt * this.sCellHeight +  (this.sCellCnt + 1) * this.sLineWidth )/2;

        this.node.on(cc.Node.EventType.MOUSE_DOWN, this.onMouseDown, this);
        this.array= new Array()
        this.desArray = new Array()
        this.heap = new Array()

        this.level = 1  // 游戏难度
    },

    initArray(){
        for (i = 0; i < this.cellHeight; i++){
            this.array[i] = new Array()
            for (j = 0; j < this.cellWidth; j++){
                this.array[i][j] = false
            }
        }
    },

    initDestArray(){
        for (i = 0; i < this.cellHeight; i++){
            this.desArray[i] = new Array()
            for (j = 0; j < this.cellWidth; j++){
                this.desArray[i][j] = false
            }
        }

        for (i = 0; i < 2+this.level*4; i++){
            x = this.random(0, this.cellCnt)
            y = this.random(0, this.cellCnt)
            cc.log("i=" + x + " j=" + y)
            this.onClickArray(this.desArray, true, x, y)
        }

        cc.log("desArray:" + this.desArray)
    },

    onDestroy: function () {
        this.node.off(cc.Node.EventType.MOUSE_DOWN, this.onMouseDown, this);
    },

    onMouseDown: function (event) {
        let mouseType = event.getButton();
        if (mouseType === cc.Event.EventMouse.BUTTON_LEFT) {
            // 鼠标左键按下
            let mousePoint = event.getLocation();
            let localPoint = this.RootNode.convertToNodeSpace(mousePoint);

            let j = Math.floor((localPoint.x - this.baseX - this.lineWidth) / (this.cellWidth + this.lineWidth))
            let i = Math.floor((localPoint.y - this.baseY - this.lineWidth) / (this.cellHeight + this.lineWidth))

            if (!(i < 0 || j < 0 || i >= this.cellCnt || j >= this.cellCnt)){
                this.onClick(i, j)
            }
        } 
    },

    onClickArray(array, small, i, j){
        array[i][j] = !array[i][j]
        this.fillCell(i, j, small, array[i][j])

        if ((j+1) < this.cellCnt){
            array[i][j+1] = !array[i][j+1]
            this.fillCell(i, j+1, small, array[i][j+1])
        }

        if ((j-1) >= 0){
            array[i][j-1] = !array[i][j-1]
            this.fillCell(i, j-1, small, array[i][j-1])
        }

        if ((i+1) < this.cellCnt){
            array[i+1][j] = !array[i+1][j]
            this.fillCell(i+1, j, small, array[i+1][j])
        }

        if ((i-1) >= 0){
            array[i-1][j] = !array[i-1][j]
            this.fillCell(i-1, j, small, array[i-1][j])
        }
    },

    onClick(i, j){ // 单击了i行,j列
        this.Success.node.active = false
        this.onClickArray(this.array, false, i, j)

        // 放到堆栈中以便回退
        pos=[i,j]
        this.heap.push(pos)

        // 检测是否完成,并重新开始
        if(this.checkFinished()){
            this.Success.node.active = true
            this.restart()
        }
    },

    onBack(){
        // 回退算法就是重复点击上次的位置
        if (this.heap.length > 0){
            var pos = this.heap.pop(pos)
            this.onClickArray(this.array, false, pos[0], pos[1])
        }
    },  
    
    onLevel(sender, level){
        cc.log("Level:" + level)
        if (level == this.level){
            return
        }
        this.level = level

        this.restart()
    },

    drawBackCells(graphics, cellWidth,cellHeight, cellCnt, 
                    lineWidth, frameWidth, baseX, baseY){
        graphics.fillColor = cc.color(255, 255, 255, 255);

        nodeWidth = cellCnt * cellWidth + 
                    (cellCnt + 1) * lineWidth + 
                    2 * frameWidth;
        graphics.fillRect(-nodeWidth/2,-nodeWidth/2,nodeWidth,nodeWidth)

        // 绘制9*9的格子
        graphics.fillColor = cc.color(0, 0, 0, 255);
        for (i =0; i <= cellCnt; i++){
            graphics.fillRect(baseX, baseY + (cellHeight+lineWidth) * i, 
                              cellCnt * cellWidth +  (cellCnt + 1) * lineWidth, 
                              lineWidth)
            graphics.fillRect(baseX + (cellWidth+lineWidth) * i, baseY , 
                              lineWidth,
                              cellCnt * cellHeight +  (cellCnt + 1) * lineWidth)                        
        }
     },

    fillCell(i, j, bSmall, bBlack) {
        graphics = this.graphics
        cellWidth = this.cellWidth
        cellHeight = this.cellHeight
        x = this.baseX + this.lineWidth + j * (this.cellWidth + this.lineWidth)
        y = this.baseY + this.lineWidth + i * (this.cellHeight + this.lineWidth)
        if (bSmall) {
            graphics = this.smallgraphics
            cellWidth = this.sCellWidth
            cellHeight = this.sCellHeight
            x = this.sBaseX + this.sLineWidth + j * (this.sCellWidth + this.sLineWidth)
            y = this.sBaseY + this.sLineWidth + i * (this.sCellHeight + this.sLineWidth)
        }

        graphics.fillColor = cc.color(255, 255, 255, 255);
        if (bBlack){
            graphics.fillColor = cc.color(0, 0, 0, 255);
        }
        
        graphics.fillRect(x, y, cellWidth, cellHeight) 
    },

    checkFinished(){
        for (i = 0; i < this.cellHeight; i++){
            for (j = 0; j < this.cellWidth; j++){
                if (this.array[i][j] != this.desArray[i][j])
                    return false
            }
        }
        cc.log("Finished")
        return true
    },

    restart(){
        this.drawBackCells(this.graphics, this.cellWidth, this.cellHeight, this.cellCnt, 
            this.lineWidth, this.frameWidth, this.baseX, this.baseY);
        this.drawBackCells(this.smallgraphics,  this.sCellWidth, this.sCellHeight, this.sCellCnt, 
                this.sLineWidth, this.sFrameWidth, this.sBaseX, this.sBaseY);
        this.initArray()
        this.initDestArray()
        this.heap.length = 0
    },

    start () {
        this.Success.node.active = false
        this.graphics = this.RootNode.addComponent(cc.Graphics);
        this.drawBackCells(this.graphics, this.cellWidth, this.cellHeight, this.cellCnt, 
                      this.lineWidth, this.frameWidth, this.baseX, this.baseY);
        
        this.smallgraphics = this.smallNode.addComponent(cc.Graphics);
        this.drawBackCells(this.smallgraphics,  this.sCellWidth, this.sCellHeight, this.sCellCnt, 
                        this.sLineWidth, this.sFrameWidth, this.sBaseX, this.sBaseY);

        this.initArray()
        this.initDestArray()
    },

    random : function (lower, upper) {
        return Math.floor(Math.random() * (upper - lower)) + lower; 
    },
});

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-07-13 17:49:43  更:2021-07-13 17:50:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 17:28:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码