前不久,一位朋友向我推薦了一款名為《quixel》(中文名《快速畫素》)的遊戲,遊戲介面如圖:
遊戲規則如下:
1.用手指點按方格,遊戲認為該方格被塗黑;
2.每行/列中的數字,為該行/列中連續塗黑的格仔的數量(比如出現3,則為該行/列中有3個連續塗黑的格仔;如果出現22,則為先有兩個連續的格仔,然後中間空出至少1個格仔後,再有兩個連續塗黑的格仔,3個數字的以此類推);
3.當塗黑的格仔滿足所有行列的數字要求時,則認為是勝利,遊戲則顯示出塗黑格仔所組成的圖案,下圖為上一張圖過關的結果:
當然,這種5*5的格仔是很簡單的,可是我的朋友給我分享這個遊戲的時候,已經玩到400多關了,是乙個10*10的大棋盤,難度更高。我對這種解迷類遊戲還是比較感興趣的,於是研究了一會,得出乙個結論:如果我能把所有的格仔從全白到全部塗黑都過一遍,那一定有乙個結果的。然後便突然想到:咦?這不就是列舉嘛!所以我就想,是不是我可以寫乙個程式,遍歷出所有結果,然後用電腦去計算出乙個正確的結果呢?
說幹就幹,那首先要做的,就是提煉遊戲的規則,然後根據規則,去進行程式設計,於是規則提煉如下:
1.格仔有兩種狀態,塗黑與不塗黑,這裡我對應為數字1和0;
2.被塗黑的格仔要同時滿足行列上的要求。
規則提煉好以後,接下來就是做了,當然最簡單也是最笨的方法,就是從格仔全部為0迴圈到全部為1,然後嘛,總有一款適合你~言歸正傳,上面那種方法消耗的時間過大,所以不予考慮,於是經過一番思考,我想出了乙個比較容易實現的演算法:
1.將棋盤視為二維陣列,陣列中每個元素只有0和1兩種狀態;
2.先計算出每一行中符合要求的一維陣列,分別放入乙個小容器中,然後將小容器放到乙個大容器中,這樣,小容器存放的是每行符合要求的一維陣列,而大容器,則可以理解為是整個棋盤,放的是所有行的可能;
3.依次從小容器中取出一條記錄,然後進行排列組合,按列取,去校驗是否符合列上的數字,如果每一列都驗證通過,則停止排列組合,輸出該二維陣列。
寫到這裡,相信很多人已經有思路了,只要去按照上面的規則去完成就好,那麼這裡我在做的時候還遇到乙個小問題,那就是,如果我的棋盤只是5*5,或僅僅是10*10,我只要有多少行,就去寫多少個for迴圈的巢狀就好,但實際情況是,隨著關數的增加,棋盤也會越來越大,所以在如何動態進行for迴圈的巢狀,我給出的方案是——遞迴。
public class mainlogic ;
//豎列數
private static int yarray = ;
private static int current_count = 0;
private static boolean is_find_result = false;
private static ******dateformat dateformat = new ******dateformat("yyyy-mm-dd hh:mm:ss.sss");
public static void main(string args)
public static int getsumnum(list> alllist)
else
return;
}for (int i=0; i> i & 1) + '0');
}return new string(chars);
}/**
* 該方法用於校驗陣列是否符合規定
* 比如標準數為32,則規則為,有三個連續的1,在若干個位置後,還有兩個連續的1,最後是若干個0
* 比如 0001110110 符合規則, 01110110100不符合規則
* @param binarystring 01字串
* @param standrdnum 標準數
* @return
*/public static boolean check(string binarystring, int standrdnum){
liststandrdlist = new arraylist();
string standrdstring = string.valueof(standrdnum);
for (int i=0; i貼一下輸出結果:
其實從結果不難看出,對於10*10的陣列,計算量還是很大的,所以目前來說,只能算是乙個半成品,優化的空間一定存在,如果有哪位朋友有更好的想法,歡迎提出~
畫素鳥遊戲開發(二)
一 場景布置。1 在vs2010裡新建乙個winfrom的程式程式命名為flybird。然後vs會新建乙個windwos的應用程式,該程式擁有乙個預設的窗體form1。2 設定form1的相關屬性。1 設定form1的text屬性為遊戲的標題flybird。為了實現選單欄顯示的遊戲標題 2 設定fo...
快速畫素混合插值
用python實現的乙個象素插值demo程式,象素混合累積差插值,和qq上乙個朋友聊影象拼接時,寫的演示程式。確切地說,並未用到影象學的知名演算法,實際效果還行,理論效果有待驗證。主要原理是圖形學中累積快取差 計算機網路中的二元指數退避。coding gbk import math import i...
遊戲架構快速指南
基本遊戲類包括表示玩家 盟友 敵人的功能以及使用玩家輸入或ai邏輯控制這些角色的功能。還有一些類用於為玩家建立 抬頭顯示資訊及相機。最後,像gamemode gamestate及playerstate這樣的類用於設定遊戲規則,並且跟蹤遊戲及玩家的進展情況。這些類都會建立某種型別的actor,這些ac...