連連看遊戲,2點是否可消除演算法分析

2021-06-23 01:09:57 字數 3273 閱讀 1533

現在在看鬱金香的vc外掛程式教程,其中對於連連看外掛程式

在此感謝這位兄弟

(x1,y1),p2(x2,y2)的座標,那麼px1,px2,py1,py2座標是什麼呢?

只要有幾何的初步知識就可以知道px1(x1,0),px2(x2,0),py1(0,y1),py2(0,y2)

那麼分析上面的一大堆對於我們有什麼用呢?

答案是肯定有用!~

看圖6:

圖中連通的路徑由3條線段,有4個點組成,只要判斷線段1,2,3,是否都連通,就可以判斷2點是否可以連通了!~

實際上分析,每個人都可以分析的頭頭是道,程式設計最難的就是怎麼樣把分析好的數學模型通過程式設計來實現,分析是不需要考慮很多的細節問題的,而程式設計實現需要考慮很多的細節問題

!~那這樣的話,就需要先寫乙個判斷2點是否可以連通的函式了!~

好了我們下面來實現這個函式:

注:我用的是vc6.0

**:

bool lineifconnect(point point1, point point2, byte chessdata[10][18])

else if (point1.y > point2.y)    // point1 在 point2 下方

}else if ((point1.x != point2.x) && (point1.y == point2.y))    // 橫座標不同,縱座標相同

else if (point1.x > point2.x)    // // point1 在 point2 右邊

}else if ((point1.x == point2.x) && (point1.y == point2.y))  // 2點為同一點的情況

return true;

else

return false;

return true;

}

有了上面這個函式,我們就可以真正編寫qq連連看中2點是否可以消除了的函式了,**如下:

**:

bool decidechessifremove(point point1, point point2, byte chessdata[10][18])

}p1.x = x1;

p2.x = x2;

for (j = 0; j <=10; j++)    // 縱座標在變 , 線段px1,px2 在平移

}chessdata[point1.y][point1.x] = point1;

chessdata[point2.y][point2.x] = point2;

return false;   // 沒有找到連通的路徑

}

有了前面的一大堆分析,**中也有注釋,

好了函式的編寫告一段落,實際

上寫程式最為艱難就是除錯階段

了來寫乙個程式測試一下:

**:

#include // mfc core and standard components

#include // mfc extensions

#include // mfc automation classes

#include // mfc support for internet explorer 4 common controls

#include // mfc support for windows common controls

#include #include #include "function.h"

int main()

printf("\r\n");

}point p1;  // p1的位置

p1.x = 13;

p1.y = 5;

point p2; // p2的位置

p2.x = 14;

p2.y = 0;

if (decidechessifremove(p1, p2, chessdata))

printf("2點相連\n\n");

else

printf("2點不相連!~\n\n");

for (j = 0; j <= 10; j++)

printf("\r\n");

}return 0;

}

程式輸出的,圖7:

上面是可以聯通的情況,那找乙個不可以聯通的情況試驗一下:

**:

#include // mfc core and standard components

#include // mfc extensions

#include // mfc automation classes

#include // mfc support for internet explorer 4 common controls

#include // mfc support for windows common controls

#include #include #include "function.h"

int main()

printf("\r\n");

}point p1;  // 這裡改了

p1.x = 7;

p1.y = 7;

point p2;  // 這裡改了

p2.x = 10;

p2.y = 6;

if (decidechessifremove(p1, p2, chessdata))

printf("2點相連\n\n");

else

printf("2點不相連!~\n\n");

for (j = 0; j <= 10; j++)

printf("\r\n");

}return 0;

}

程式輸出,圖8:

好了大功告成,說明我們的函式還是有些用的

最後感謝大家能看我一篇文章

最後請看圖9:

誰能給我分析一下,為什麼2個圖示紅線處不一樣呢?

我沒有深入的進行除錯,對不起了大家,如果用我的**寫外掛程式,有什麼bug,我有免責申明啊

連連看演算法一點通

1 兩個精靈都在同一橫軸或是縱軸 2 另外就是有乙個轉角的,兩種情況箭頭向左或向右 3 最複雜,其實掌握下面的情況可以包含上面的所有的情況 重點分析 3.1 在縱軸方向有乙個共同的沒有精靈 障礙 的塊 黃色 判斷公共i col到精靈箭頭段有沒有精靈即可 判斷當前列m col沒有障礙 param fi...

基於cocos2d x的連連看遊戲

基於cocos2d x的簡單連連看遊戲demo。作者說 源自 基於cocos2d的連連看遊戲 這份基於 cocos2d iphone 的版本。感謝原作者 煥德 說明 這次移植是基於了解 cocos2d 系列而作的動手系列。音訊處理還不完善,背景 還得深入了解。這份cocos2d x 是 for io...

MFC實現連連看遊戲之消子演算法

兩個位置的能否消除,有三種情況 1.一條直線連線,這種也是最簡單的一種消除方法 bool linkinline cpoint p1,cpoint p2 else if p1.x p2.x 在同一列 else 不在同一直線 return b 2.兩條直線消除,即經過乙個拐點。兩個頂點經過兩條直線連線有...