告訴大家。cocos2d 簡單消除遊戲演算法 (一)
- //case 1
- /////[x]//////[x]////////
- //[x][o][x][x][o][x]/////
- /////[x]//////[x]////////
- /////////////////////////
- //case 2
- ////////[x]//////////////
- /////[x][o][x]///////////
- ////////[x]//////////////
- ////////[x]//////////////
- /////[x][o][x]///////////
- ////////[x]//////////////
這裡用註釋畫了簡單的兩種情況,注意x的位置。case1 是橫著有兩個同色的情況,移動一步能消除只有6種可能,左邊3種,右邊3種。下面是豎著有兩個同色的情況,移動一步能消除也是6種情況。上面3種,下面3種。知道了這個,程式碼就容易了。記得找到一個就直接return。
-
vector<MatchItem*> getThreeMatchItemCanRemoveByOneStep(
- vector<MatchItem*> result;
- int maxX = 7;
- int maxY = 7;
- for(int y = 0; y < maxY; ++y){
- for(int x = 0; x < maxX; ++x){
- if(x + 1 < maxX){
- //case 1
-
if(map.Get(x, y)->getType() == map.Get(x + 1, y)->getType()){
- MatchItemType currentType = map.Get(x, y)->getType();
- //check 6 item, one move one step can combine three same item
- if(x - 2 >= 0){
- if(map.Get(x - 2, y)->getType() == currentType){
-
//find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x - 2, y));
- return result;
- }
- }
- if(x - 1 >= 0 && y - 1 >= 0){
- if(map.Get(x - 1, y - 1)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x - 1, y - 1));
- return result;
- }
- }
- if(x + 2 < maxX && y - 1 >= 0){
- if(map.Get(x + 2, y - 1)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x + 2, y - 1));
- return result;
- }
- }
- if(x + 3 < maxX){
- if(map.Get(x + 3, y)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x + 3, y));
- return result;
- }
- }
- if(x + 2 < maxX && y + 1 < maxY){
- if(map.Get(x + 2, y + 1)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x + 2, y + 1));
- return result;
- }
- }
- if(x - 1 >= 0 && y + 1 < maxY){
- if(map.Get(x - 1, y + 1)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x + 1, y));
- result.push_back(map.Get(x - 1, y + 1));
- return result;
- }
- }
- }
- }
- if(y + 1 < maxY){
- MatchItemType currentType = map.Get(x, y)->getType();
- //case 2
- if(map.Get(x, y)->getType() == map.Get(x, y + 1)->getType()){
- if(y - 2 >= 0){
- if(map.Get(x, y - 2)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x, y + 1));
- result.push_back(map.Get(x, y - 2));
- return result;
- }
- }
- if(x + 1 < maxX && y - 1 >= 0){
- if(map.Get(x + 1, y - 1)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x, y + 1));
- result.push_back(map.Get(x + 1, y - 1));
- return result;
- }
- }
- if(x + 1 < maxX && y + 2 < maxY){
- if(map.Get(x + 1, y + 2)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x, y + 1));
- result.push_back(map.Get(x + 1, y + 2));
- return result;
- }
- }
- if(y + 3 < GameGlobal::xMapCount){
- if(map.Get(x, y + 3)->getType() == currentType){
- //find one
- result.push_back(map.Get(x, y));
- result.push_back(map.Get(x, y + 1));
- result.push_back(map.Get(x, y + 3));
- return result;
- }
- }
- if(x - 1 >= 0 && y + 2 < maxY){
-
相關推薦
告訴大家。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語言寫的 演算法