1. 程式人生 > >告訴大家。cocos2d 簡單消除遊戲演算法 (一)

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

  1. //case 1
  2. /////[x]//////[x]////////
  3. //[x][o][x][x][o][x]/////
  4. /////[x]//////[x]////////
  5. /////////////////////////
  6. //case 2
  7. ////////[x]//////////////
  8. /////[x][o][x]///////////
  9. ////////[x]//////////////
  10. ////////[x]//////////////
  11. /////[x][o][x]///////////
  12. ////////[x]//////////////

這裡用註釋畫了簡單的兩種情況,注意x的位置。case1 是橫著有兩個同色的情況,移動一步能消除只有6種可能,左邊3種,右邊3種。下面是豎著有兩個同色的情況,移動一步能消除也是6種情況。上面3種,下面3種。知道了這個,程式碼就容易了。記得找到一個就直接return。
  1. vector<MatchItem*> getThreeMatchItemCanRemoveByOneStep(
    const Array2D<MatchItem*> & map){  
  2.     vector<MatchItem*> result;  
  3.     int maxX = 7;  
  4.     int maxY = 7;  
  5.     for(int y = 0; y < maxY; ++y){  
  6.         for(int x = 0; x < maxX; ++x){  
  7.             if(x + 1 < maxX){  
  8.                 //case 1
  9.                 if(map.Get(x, y)->getType() == map.Get(x + 1, y)->getType()){  
  10.                     MatchItemType currentType = map.Get(x, y)->getType();  
  11.                     //check 6 item, one move one step can combine three same item
  12.                     if(x - 2 >= 0){  
  13.                         if(map.Get(x - 2, y)->getType() == currentType){  
  14.                             //find one
  15.                             result.push_back(map.Get(x, y));  
  16.                             result.push_back(map.Get(x + 1, y));  
  17.                             result.push_back(map.Get(x - 2, y));  
  18.                             return result;  
  19.                         }  
  20.                     }  
  21.                     if(x - 1 >= 0 && y - 1 >= 0){  
  22.                         if(map.Get(x - 1, y - 1)->getType() == currentType){  
  23.                             //find one
  24.                             result.push_back(map.Get(x, y));  
  25.                             result.push_back(map.Get(x + 1, y));  
  26.                             result.push_back(map.Get(x - 1, y - 1));  
  27.                             return result;  
  28.                         }  
  29.                     }  
  30.                     if(x + 2 < maxX && y - 1 >= 0){  
  31.                         if(map.Get(x + 2, y - 1)->getType() == currentType){  
  32.                             //find one
  33.                             result.push_back(map.Get(x, y));  
  34.                             result.push_back(map.Get(x + 1, y));  
  35.                             result.push_back(map.Get(x + 2, y - 1));  
  36.                             return result;  
  37.                         }  
  38.                     }  
  39.                     if(x + 3 < maxX){  
  40.                         if(map.Get(x + 3, y)->getType() == currentType){  
  41.                             //find one
  42.                             result.push_back(map.Get(x, y));  
  43.                             result.push_back(map.Get(x + 1, y));  
  44.                             result.push_back(map.Get(x + 3, y));  
  45.                             return result;  
  46.                         }  
  47.                     }  
  48.                     if(x + 2 < maxX && y + 1 < maxY){  
  49.                         if(map.Get(x + 2, y + 1)->getType() == currentType){  
  50.                             //find one
  51.                             result.push_back(map.Get(x, y));  
  52.                             result.push_back(map.Get(x + 1, y));  
  53.                             result.push_back(map.Get(x + 2, y + 1));  
  54.                             return result;  
  55.                         }  
  56.                     }  
  57.                     if(x - 1 >= 0 && y + 1 < maxY){  
  58.                         if(map.Get(x - 1, y + 1)->getType() == currentType){  
  59.                             //find one
  60.                             result.push_back(map.Get(x, y));  
  61.                             result.push_back(map.Get(x + 1, y));  
  62.                             result.push_back(map.Get(x - 1, y + 1));  
  63.                             return result;  
  64.                         }  
  65.                     }  
  66.                 }  
  67.             }  
  68.             if(y + 1 < maxY){  
  69.                 MatchItemType currentType = map.Get(x, y)->getType();  
  70.                 //case 2
  71.                 if(map.Get(x, y)->getType() == map.Get(x, y + 1)->getType()){  
  72.                     if(y - 2 >= 0){  
  73.                         if(map.Get(x, y - 2)->getType() == currentType){  
  74.                             //find one
  75.                             result.push_back(map.Get(x, y));  
  76.                             result.push_back(map.Get(x, y + 1));  
  77.                             result.push_back(map.Get(x, y - 2));  
  78.                             return result;  
  79.                         }  
  80.                     }  
  81.                     if(x + 1 < maxX && y - 1 >= 0){  
  82.                         if(map.Get(x + 1, y - 1)->getType() == currentType){  
  83.                             //find one
  84.                             result.push_back(map.Get(x, y));  
  85.                             result.push_back(map.Get(x, y + 1));  
  86.                             result.push_back(map.Get(x + 1, y - 1));  
  87.                             return result;  
  88.                         }  
  89.                     }  
  90.                     if(x + 1 < maxX && y + 2 < maxY){  
  91.                         if(map.Get(x + 1, y + 2)->getType() == currentType){  
  92.                             //find one
  93.                             result.push_back(map.Get(x, y));  
  94.                             result.push_back(map.Get(x, y + 1));  
  95.                             result.push_back(map.Get(x + 1, y + 2));  
  96.                             return result;  
  97.                         }  
  98.                     }  
  99.                     if(y + 3 < GameGlobal::xMapCount){  
  100.                         if(map.Get(x, y + 3)->getType() == currentType){  
  101.                             //find one
  102.                             result.push_back(map.Get(x, y));  
  103.                             result.push_back(map.Get(x, y + 1));  
  104.                             result.push_back(map.Get(x, y + 3));  
  105.                             return result;  
  106.                         }  
  107.                     }  
  108.                     if(x - 1 >= 0 && y + 2 < maxY){  
  109. 相關推薦

    告訴大家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("

    排序演算法氣泡排序,簡單選擇排序,直接插入排序,希爾排序

    氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交

    簡單氣泡排序演算法Java

    PS:這是個人學習中的一些記錄,貼出來和大家一起交流,不妥之處,請多指教,共同進步! public class Arithmetic { public static void main(String[] args) { int[] arr = { 12, 25, 22, 3

    WCF學習——構建一個簡單的WCF應用

    frame port app 位置 協定 enc splay msdn ons 本文的WCF服務應用功能很簡單,卻涵蓋了一個完整WCF應用的基本結構。希望本文能對那些準備開始學習WCF的初學者提供一些幫助。 在這個例子中,我們將實現一個簡單的計算器和傳統的分布式通信框架一樣

    內核調試神器SystemTap — 簡單介紹與使用

    kprobe utils its preview response art sym about output a linux trace/probe tool. 官網:https://sourceware.org/systemtap/ 簡單介紹 S

    java Socket實現簡單在線聊天

    結合線程 java.awt exc iss order 新建 exception connect border 出處:http://blog.csdn.net/tuzongxun 最近的項目有一個在線網頁交流的需求,由於很久以前做過的demo已經忘記的差不多了,因此便重新學

    socket實現的簡單的ftp服務

    socket 中文 add blog style log 實現簡單 port 數據 用 socket實現簡單的ftp服務ex:服務端 1 import socket,os 2 server=socket.socket() 3 server.bind(("localh

    【微信小遊戲遊戲開發調試--關於找不到app.json入口文件

    com png info alt 微信開發者 遊戲 進入 http 找不到 經了解發現 小程序必須要有app.json 小遊戲必須的文件只有2個 game.js  小遊戲入口文件 game.json  小遊戲配置文件 所以不是工程文件缺失,解決方案如下: 進入微信開發者工具

    python知識簡單總結 - 語言基礎

    python基礎語言基礎 基礎知識 pycharm快捷鍵 快速復制 光標定位到某行或者選中很多行 crtl/command + d 註釋 光標定位到某行或者選中很多行 crtl/command + / 刪除(剪切) 光標定位到某行或者選中很多行 crtl/command + d pychar

    python之pandas簡單介紹及使用

    dad all 就會 能夠 簡單的 兩種 first 模型 自己 python之pandas簡單介紹及使用(一) 一、  Pandas簡介1、Python Data Analysis Library 或 pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任

    圖解HTTP之——簡單的HTTP協議

    本章將針對 HTTP 協議結構進行講解,主要使用HTTP/1.1版本。學完 這章,想必大家就能理解 HTTP 協議的基礎了。 1.1 HTTP 協議用於客戶端和伺服器端之間 的通訊  HTTP 協議和 TCP/IP 協議族內的其他眾多的協議相同,用於客戶端和 伺服器之間的通訊

    吳恩達老師機器學習筆記K-means聚類演算法

    今天接著學習聚類演算法 以後堅決要八點之前起床學習!不要浪費每一個早晨。 K-means聚類演算法聚類過程如下: 原理基本就是先從樣本中隨機選擇聚類中心,計算樣本到聚類中心的距離,選擇樣本最近的中心作為該樣本的類別。最後某一類樣本的座標平均值作為新聚類中心的座標,如此往復。 原

    Java-經典排序演算法

    前言: 排序演算法有很多種,如選擇排序、插入排序、氣泡排序、桶排序、快速排序等等。這裡介紹的是簡化版桶排序、氣泡排序和插入排序。 推薦一本演算法入門書——《啊哈!演算法》 1. 桶排序[簡化版]: 原理:新建一個book陣列用來標記原陣列每一個數字出現的個數。

    「知識學習&日常訓練」莫隊演算法Codeforce Round #340 Div.2 E

    題意 已知一個長度為\(n\)的整數數列\(a[1],a[2],…,a[n]\),給定查詢引數\(l,r\),問\([l,r]\)內,有多少連續子段滿足異或和等於\(k\)。 也就是說,對於所有的\(x,y (l\le x\le y\le r)\),能夠滿足\(a[x]\oplus a[x+1]\oplus

    Java資料結構和演算法:簡介

      本系列部落格我們將學習資料結構和演算法,為什麼要學習資料結構和演算法,這裡我舉個簡單的例子。   程式設計好比是一輛汽車,而資料結構和演算法是汽車內部的變速箱。一個開車的人不懂變速箱的原理也是能開車的,同理一個不懂資料結構和演算法的人也能程式設計。但是如果一個開車的人懂變速箱的原理,比如降低速

    Logistic迴歸之梯度上升優化演算法

    Logistic迴歸之梯度上升優化演算法 一、Logistic迴歸 首先我們需要了解什麼是Logistic迴歸。Logistic迴歸是一種分類演算法,一般用於二分類問題,例如預測明天是否下雨,當然也可以用於多分類問題。本文主要是討論二分類問題。二分類問題即輸出結果一般只有兩個情況,我們可以理

    Java簡單部落格系統基於實體聯絡模型設計資料庫

      基本概念 簡單屬性:不能劃分為更小的部分(其他屬性)。 單值屬性:一個特定實體有隻有單獨的一個值。 派生屬性:可以從別的相關屬性或實體派生出來。 最簡單的部落格系統 (一)實體集:使用者,部落格,評論,實體及其屬性列出如下: (二)聯絡集: 以上設計的實體集,聯絡集表示如

    文搞懂k近鄰k-NN演算法

    分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

    從零開始學演算法氣泡排序

    從零開始學演算法(一)氣泡排序 氣泡排序 演算法介紹 演算法原理 演算法簡單記憶說明 演算法複雜度和穩定性 程式碼實現 氣泡排序 因為在學前端,程式碼是Javascript語言寫的 演算法