連連看是個不錯的遊戲,好玩 規則又不復襍。每每玩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,這就是我們要處理的數學模型了。