1. 程式人生 > >消除遊戲的核心演算法

消除遊戲的核心演算法

1.通過自定義事件從點選的物件類裡面丟擲當前點選的物件的座標
cc.eventManager.dispatchCustomEvent(USER_CLICK_SHRED_EVERT, that.arrayIndex);
2.然後獲取到座標後進行處理
cc.eventManager.addCustomListener(USER_CLICK_SHRED_EVERT,this._checkArr.bind(this));
_checkArr:function(event){
    var touchIndex = event.getUserData();
    this.all_arr.push(touchIndex);                      //用一個數組去存取當前點選的物件
    var arr = this._checkNeighbor(touchIndex);          //獲取當前點選物件的四周                            
    for(var i = 0 ; i<GAME_CONIG.SHRED_NUM_W;i++){
        this.all_arr = arr.slice();                     
        for(var index in arr){                          //遍歷四周的塊去重複檢測它們的四周塊
            var po = arr[index];
            this.all_arr = this.all_arr.concat(this._checkNeighbor(po))
        }
        arr = this.all_arr;                            //然後讓下一次檢測的塊給檢測陣列
    }
    this._updateCellByArr(this.all_arr);               //消除符合情況的塊
    this.all_arr = [];                      
},
3.核心:檢測四周的塊
_checkNeighbor:function(arr){
    var returnArr = [];
    //var dataType = this.shred_arr[data.x][data.y].type;
    var checkArr = [cc.p(-1,0),cc.p(1,0),cc.p(0,-1),cc.p(0,1)];
    for(var index in checkArr){
        var arrIndex = checkArr[index];
        var add = cc.pAdd(arr,arrIndex);                //獲取到當前點選物件四周的塊
        if(this._checkColor(add,arr)){                  //然後進行檢測如果滿足要求就把這些塊的座標都存入一個數組裡面
            //cc.log("same color",arrIndex.x,arrIndex.y);
            returnArr.push(add);
        }
    }
    return returnArr
},
4.檢測是否滿足要求
_checkColor:function(arr,targetArr){
    if(arr.x<0||arr.x>GAME_CONIG.SHRED_NUM_H-1||arr.y<0||arr.y>GAME_CONIG.SHRED_NUM_W-1){
        return false;                                   //檢查是否越界
    }
    for(var index in this.all_arr){
        var sameArr = this.all_arr[index];               
        if(sameArr.x == arr.x&&sameArr.y == arr.y ) return false         //檢查陣列中有沒有重複的塊
     }
    if(this.shred_arr[arr.x][arr.y] == null ||this.shred_arr[targetArr.x][targetArr.y] == null) return false;     
     //檢查有沒有塊是消除下落後不存在的        這裡是個坑,如果不寫會出現bug
    if(this.shred_arr[arr.x][arr.y].type == this.shred_arr[targetArr.x][targetArr.y].type) return true
},   //檢查當前塊與周圍塊顏色是否一致
5.塊消除後掉落
_checkDown:function(){
    for(var i = 0; i<GAME_CONIG.SHRED_NUM_W; i++) {
        for (var j = GAME_CONIG.SHRED_NUM_H - 1; j >= 0; j--) {
            var downNum = 0;
            if (this.shred_arr[i][j] != null) {
                for (var k = j; k < GAME_CONIG.SHRED_NUM_H; k++) {
                    if (this.shred_arr[i][k] == null) downNum++
                }
                if (downNum != 0) {
                    this.shred_arr[i][j].fallDown(downNum);                   
                    var moveEndIndex = this.shred_arr[i][j].arrayIndex;   //獲取更新後的值
                    this.shred_arr[moveEndIndex.x][moveEndIndex.y] = this.shred_arr[i][j];
                    this.shred_arr[i][j] = null
                    /* this.shred_arr[i][j+downNum]=this.shred_arr[i][j];
                    this.shred_arr[i][j]=null;*/
                }
            }
        }
    }
}


相關推薦

消除遊戲核心演算法

如今消除類遊戲很多,比如:消滅壽司,消滅星星等。這篇文章我就共享下我這方面的理解,希望對大家有幫助,如有不好的地方也希望大家指出。                         這是我用到資源。同種顏色的2個或者2個以上的就可以消除,消除的越多分越高。 首先,我們來定義一

消除遊戲核心演算法

1.通過自定義事件從點選的物件類裡面丟擲當前點選的物件的座標 cc.eventManager.dispatchCustomEvent(USER_CLICK_SHRED_EVERT, that.arrayIndex); 2.然後獲取到座標後進行處理 cc.eventManage

告訴大家。cocos2d 簡單消除遊戲演算法 (一)

//case 1 /////[x]//////[x]//////// //[x][o][x][x][o][x]///// /////[x]//////[x]//////// ///////////////////////// //case 2 ////////[x]////

cocos2d-lua消除遊戲實戰(二)水果生成演算法消除演算法

效果是這樣的: 程式碼如下: FruitItem = import("app.scenes.FruitItem") local PlayScene = class("PlayScene", function() return display.newScene("

掃雷小遊戲(前端)原始碼及核心演算法講解

感想:寫掃雷遊戲的主要原因是因為這段時間剛好迷上了掃雷,便有了寫出這個遊戲的想法。    寫程式碼的過程中,我覺得比較重要的演算法有兩部分:1、初始化遊戲時,若該格子不是雷,那麼格子中的數字怎麼計算得來        2、遊戲時,點到空白的格子,怎麼將空白格子所在的空白區

通過遊戲學python 3.6 第一季 第三章 實例項目 猜數字遊戲--核心代碼--猜測次數--隨機函數和屏蔽錯誤代碼--優化代碼及註釋 可復制直接使用 娛樂 可封裝 函數

nbsp 退出 而不是 判斷 and 封裝 except 次數 img 1 #猜數字--核心代碼--猜測次數--隨機函數和屏蔽錯誤代碼---優化代碼及註釋 2 3 import random 4 number = random.randint(1,

通過遊戲學python 3.6 第一季 第九章 實例項目 猜數字遊戲--核心代碼--猜測次數--隨機函數和屏蔽錯誤代碼--優化代碼及註釋--簡單賬號密碼登陸--賬號的註冊查詢和密碼的找回修改--鎖定賬號--鎖定次數--菜單功能'menufile

lock isp 無限循環 lis true 條件判斷 elif bre format 通過遊戲學python 3.6 第一季 第九章 實例項目 猜數字遊戲--核心代碼--猜測次數--隨機函數和屏蔽錯誤代碼--優化代碼及註釋--簡單賬號密碼登陸--賬號的註冊查詢和密碼的

分享《Python機器學習—預測分析核心演算法》高清中文版PDF+高清英文版PDF+原始碼

下載:https://pan.baidu.com/s/1sfaOZmuRj14FWNumGQ5ahw 更多資料分享:http://blog.51cto.com/3215120 《Python機器學習—預測分析核心演算法》高清中文版PDF+高清英文版PDF+原始碼高清中文版,338頁,帶目錄和書籤,文字能夠

Python機器學習——預測分析核心演算法 pdf 下載

機器學習關注於預測,其核心是一種基於數學和演算法的技術,要掌握該技術,需要對數學及統計概念有深入理解,能夠熟練使用R 語言或者其他程式語言。    本書通過集中介紹兩類可以進行有效預測的機器學習演算法,展示瞭如何使用Python 程式語言完成機器學習任務,從而降低機器學習難度,使機器

WF曲速未來:區塊鏈核心演算法之Paxos演算法

Paxos演算法解決的問題是在一個可能發生訊息可能會延遲、丟失、重複的分散式系統中如何就某個值達成一致,保證不論發生以上任何異常,都不會破壞決議的一致性。 先帶你會看一下libpaxos3的程式碼: 第一步獲取和編譯LibPaxos3所需的基本步驟: 執行示例  

KMP演算法模板 - 構建next最長字首陣列 與 kmp核心演算法

#include <iostream> #include <string> using namespace std; //構建next最長字首陣列 int* getNextArray(const string &sub) { if(sub.length() ==

LeetCode 55.跳躍遊戲 貪心演算法

給定一個非負整數陣列,你最初位於陣列的第一個位置。 陣列中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最後一個位置。 示例 1: 輸入: [2,3,1,1,4] 輸出: true 解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。

390.消除遊戲

給定一個從1 到 n 排序的整數列表。 首先,從左到右,從第一個數字開始,每隔一個數字進行刪除,直到列表的末尾。 第二步,在剩下的數字中,從右到左,從倒數第一個數字開始,每隔一個數字進行刪除,直到列表開頭。 我們不斷重複這兩步,從左到右和從右到左交替進行,直到只剩下一個數字。 返回長度為 n 的列表

Raft演算法(zookeeper核心演算法

轉自: https://www.cnblogs.com/mindwind/p/5231986.html Leslie Lamport 在三十多年前發表的論文《拜占庭將軍問題》(參考[1])。 拜占庭位於如今的土耳其的伊斯坦布林,是東羅馬帝國的首都。由於當時拜占庭羅馬帝國

核心演算法掌握要求《演算法導論》

第一部分  基礎(Foundations) 第一章 計算中演算法的角色(The Role of Algorithms in Computing) 第二章 開始(Getting Started) 第三章 函式的增長率(Growth of Functions)

【小白學遊戲常用演算法】二、A*啟發式搜尋演算法

  在上一篇部落格中,我們一起學習了隨機迷宮演算法,在本篇部落格中,我們將一起了解一下尋路演算法中常用的A*演算法。   通常情況下,迷宮尋路演算法可以使用深度優先或者廣度優先演算法,但是由於效率的原因,不會直接使用這些演算法,在路徑搜尋演算法中最常見的就是A*尋路演算法。使用A*演算法的魅力之處在於它不僅

【小白學遊戲常用演算法】一、隨機迷宮演算法

 現在的很多遊戲中的地圖一般採用格子的方式,雖然在表面地圖上無法看到實際的格子,但是在地圖的結構中專門有一個邏輯層,這個層和地圖大小相等,劃出很多小的格子,然後在可以通過的地方使用0表示,在有障礙的且不能通過的地方用1或者其他數字表示(如圖所示)。有了這個邏輯層之後,實際上自動尋路就轉換成了如何在一個二維陣列

rsync的核心演算法

rsync是unix/linux下同步檔案的一個高效演算法,它能同步更新兩處計算機的檔案與目錄,並適當利用查詢檔案中的不同塊以減少資料傳輸。rsync中一項與其他大部分類似程式或協定中所未見的重要特性是映象是隻對有變更的部分進行傳送。rsync可拷貝/顯示目錄屬性,以及拷貝檔案,並可選擇性的壓縮以及遞迴

c語言消除遊戲(帶排行榜)

程式截圖 先來看下思路 1.初始化視窗 2.開始遊戲 利用方向鍵移動游標 對於可以消除的情況的判斷 記錄相同顏色的位置 小球下降補充新的小球 記錄分數 3.如果計時結束後顯示遊戲結束 4.釋放資源 首先我們需要graphics標頭檔案

NKOJ 2440 數字消除遊戲【迭代加深+剪枝】

問題描述 在一個n*n的方形棋盤上玩消除遊戲,棋盤上佈滿了數字。 每一步,玩家可以任選一個數字x,用它填充座標為(1,1)格子所在連通區域,該區域的數字都會變成x。(如果兩個數字相同且相鄰,我們稱這兩個數字連通。相鄰是上下左右四方向)。 當整個棋盤的數字都相同