JAVA之連連看演算法

2021-08-24 19:17:22 字數 2197 閱讀 2727

連連看連線方式的型別:

l 兩點直線法

l 三點直角折線法

l 四點方形折線法

l 四點梯形折線法

下面對上面四種型別進行細緻劃分講解:

1. 兩點直線法的連線型別包括:上,下,左,右

2. 三點直角折線法包括:上左,上右,下左,下右,左上,右上,左下,右下

3. 四點方形折線法包括:上左下,上右下,下左上,下右上,左上右,右上左,左下右,右下左

4. 四點梯形折線法包括:上左上,下左下,上右上,下左下,左上左,右上右,左下左,右下右

下面關於連連看連線方式型別的講解

1. 兩點直線法:

1. 當兩個連線物件在同一橫軸座標,不同縱軸座標,物件id要相同(影象相同)第乙個物件在第二物件的左邊,連線型別為『右』(向右查詢);

[img]

[/img]

則這一種是不可以連的

從第乙個物件的橫軸座標開始向第二個物件靠近,第乙個物件在左邊,第二物件在右邊,此時我們的第乙個物件要靠近第二個物件,就必須加上物件寬度等於現在乙個虛擬向右移一位的物件,然後將這個虛擬物件去與集合當中的物件的x,y軸座標做比較,看在這個的虛擬的物件位子上有沒有乙個實際物件,首先決定這個虛擬的物件是否於第二個物件的xy軸座標相同,如果相同就直接返回true,如果有物件就說明這兩個物件之間不可連的,則返回false.如果不與第二個物件相等,也沒有物件,就繼續向第二物件靠近,依次類推,直到找到第二個物件,或中間有阻攔物件,就結束查詢。

2. 當兩個連線物件在同一橫軸座標,不同縱軸座標,物件id要相同(影象相同)第乙個物件在第二物件的右邊,連線型別為『左』(向左查詢);

[img]/upload/attachment/140767/f1eca7d2-1ef6-3b6f-a642-72b56c1c224c.png[/img]

則這一種是不可以連的

從第乙個物件的橫軸座標開始向第二個物件靠近,第乙個物件在右邊,第二物件在左邊,此時我們的第乙個物件要靠近第二個物件,就必須減除物件寬度等於現在乙個虛擬向左移一位的物件,然後將這個虛擬物件去與集合當中的物件的x,y軸座標做比較,看在這個的虛擬的物件位子上有沒有乙個實際物件,首先決定這個虛擬的物件是否於第二個物件的xy軸座標相同,如果相同就直接返回true,如果有物件就說明這兩個物件之間不可連的,則返回false.如果不與第二個物件相等,也沒有物件,就繼續向第二物件靠近,依次類推,直到找到第二個物件,或中間有阻攔物件,就結束查詢。

3. 當兩個連線物件在同一縱軸座標,不同橫軸座標,物件id要相同(影象相同),第一物件在第二物件的上方,連線型別為:下(向下查詢)

[img]/upload/attachment/140769/17bc973e-0220-31ff-9c9a-c22074d6bf3a.png[/img]

則這一種是不可以連的

從第乙個物件的縱軸座標開始向第二個物件靠近,第乙個物件在上邊,第二物件在下邊,此時我們的第乙個物件要靠近第二個物件,就必須加上物件高度等於現在乙個虛擬向下移一位的物件,然後將這個虛擬物件去與集合當中的物件的x,y軸座標做比較,看在這個的虛擬的物件位子上有沒有乙個實際物件,首先決定這個虛擬的物件是否於第二個物件的xy軸座標相同,如果相同就直接返回true,如果有物件就說明這兩個物件之間不可連的,則返回false.如果不與第二個物件相等,也沒有物件,就繼續向第二物件靠近,依次類推,直到找到第二個物件,或中間有阻攔物件,就結束查詢。

4. 當兩個連線物件在同一縱軸座標,不同橫軸座標,物件id要相同(影象相同),第一物件在第二物件的下方,連線型別為:上(向上查詢)

[img]/upload/attachment/140771/165a62ad-532c-36cf-b046-7ca2402eb1e3.png[/img]

從第乙個物件的縱軸座標開始向第二個物件靠近,第乙個物件在下邊,第二物件在上邊,此時我們的第乙個物件要靠近第二個物件,就必須減除物件高度等於現在乙個虛擬向下移一位的物件,然後將這個虛擬物件去與集合當中的物件的x,y軸座標做比較,看在這個的虛擬的物件位子上有沒有乙個實際物件,首先決定這個虛擬的物件是否於第二個物件的xy軸座標相同,如果相同就直接返回true,如果有物件就說明這兩個物件之間不可連的,則返回false.如果不與第二個物件相等,也沒有物件,就繼續向第二物件靠近,依次類推,直到找到第二個物件,或中間有阻攔物件,就結束查詢。

下面來介紹一下我實現的乙個連連看介面表現:

遊戲開始介面和遊戲開始設定介面:

[img]/upload/attachment/140773/ab8289c0-73e2-3655-9493-45e1ff3e7810.png[/img]

連連看演算法

前幾天看了下a 演算法,發現並不能實現連連看。a 演算法是尋找最短路徑的一種高效率的演算法,而連連看的路徑並不一定是最短的。連連看的路徑最多只能轉折3次,因此判斷兩點的可延伸點是否有重複的,如果有,折為0或1 可消除,如果沒有,再判斷每個延伸點的延伸點與目標點的延伸點是否有重複的,有則表示可以消除並...

連連看演算法

分類判斷法 這裡實質上是一種遞迴的思想,要判斷a與b能否通過一條有n個轉角的路徑相連,可以轉化為判斷能否找到c,c與a能直線相連,且c與b能用一條有n 1個轉角的路徑相連。若這樣的c存在,那麼a與b就可以通過一條有n個轉角的路徑相連。根據轉角數不得超過2個的規則,我們可以分為轉角數分別為0個 1個 ...

《連連看》的演算法

連連看所要求的是 1 兩個目標是相同的 2 兩個目標之間連線線的折點不超過兩個。連線線由x軸和y軸的平行線組成 那麼分析一下連線的情況可以看到,一般分三種情況 1 直線相連 2 乙個折點 3 兩個折點 如圖 可以發現,如果有折點,每個折點必定有且至少有乙個座標 x或者y 是和其中乙個目標點是相同的,...