專題 連連看 甲 乙 概述 建模

2021-04-12 16:44:12 字數 1309 閱讀 1039

連連看是個不錯的遊戲,好玩 規則又不復襍。每每玩qq連連看時我都不可思議那些高手的敏捷,屢屢敗下陣來,於是有了寫乙個自動玩連連看程式的想法。

首先歸納一下遊戲規則:

「棋盤」可按矩形擺放m x n 張牌,發牌時任意擺放k種牌共x張,其中每種牌都為2的整數倍。這些牌中相同種類的牌(比如花色相同)可以兩輛消去,儅牌消完時遊戲結束(勝利)。

消牌規則:1、同種牌;

2、兩兩消除;

3、相鄰或者兩張牌的連線(直線段或折線段)之彎折不大於兩処;連線規則:從矩形牌的四個邊中的乙個連出且此邊不受遮擋(無相鄰牌)連至另一張牌的某一同樣不受遮擋的邊。

規則很多人都知道,我就不細說了,建議不明白的朋友玩玩遊戲「連連看」,比如qq的,因為我們以後的篇幅就是以它的連連看作研究的。

乙-建模

好了,有了定型的認識我們需要定量的來分析了,因為計算機只能處理具體的數。

為了解決這樣乙個圖形化的東西我們必須建立它的數學模型,然後據此模型用程式語言實現,再雙擊滑鼠執行

這樣乙個抽象的東西我們不妨一步一步解決:

比如我們有這樣一局棋:

紅球    藍球    炸彈   空    紅球

空        空        空      空      空

空       紅球     空     炸彈  紅球

空       藍球    紅球  藍球    空 

這是乙個5 x 4的小棋盤,我們先拿它作例子。(事後發現此牌局之紅球、藍球、炸彈牌不成對,但不影響我們分析問題,也就罷了)

很容易看出其中第一行第一列的紅球可以同第三行第二列的紅球消掉,或者第三行第二列的紅球同第四行第三列的紅球消,……等等,

首先我們可以把棋盤中的花色牌編上號,比如:紅球為1,藍球為2,炸彈為3,等等……,沒有牌的格仔就編上0,這樣棋盤就變成下面的樣子了:

1     2     3     0     1

0     0     0     0     0

0     1     0     3     1

0     2     1     2     0

很好的開局,我們把它寫成如下的樣子:

1     2     3     0     1

m = [ 0     0     0     0     0 ]

0     1     0     3     1

0     2     1     2     0

成為乙個4 x 5的矩陣m,這就是我們要處理的數學模型了。

python連連看 Python 連連看連線演算法

功能 為連連看遊戲提供連線演算法 說明 模組中包含乙個point類,該類是遊戲的基本單元 點 該類包含屬性 x,y,value。其中x,y代表了該點的座標,value代表該點的特徵 0代表沒有被填充,1 8代表被填充為遊戲圖案,9代表被填充為牆壁 模組中還包含乙個名為points的point列表,其...

python連連看 Python 連連看連線演算法

coding utf 8 連連看連線演算法 為連連看遊戲提供連線演算法 模組中包含乙個point類,該類是遊戲的基本單元 點 該類包含屬性 x,y,value。其中x,y代表了該點的座標,value代表該點的特徵 0代表沒有被填充,1 8代表被填充為遊戲圖案,9代表被填充為牆壁 模組中還包含乙個名為...

連連看演算法

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