前幾天在任務中國上接了乙個任務,主要完成乙個n維井字棋的設計。n維井字棋的概念是從二維井字棋開始的,二維井字棋為3×3的棋盤,而三維的就為3×3×3,四維,五維以此類推,不過四維,五維有點難以想象,呵呵。
其中主要有兩個實現,第乙個就是統計一種符號(代表乙個玩家)有3個棋子在一條直線上的出現次數。第二個就是讓電腦實現ai。
第乙個任務其實想法比較簡單,就是從乙個點開始,沿著直線走2步,如果這兩步都在棋盤內,並且也是這種符號,則為合法,需要統計。那現在的問題是就如果列舉出所有的直線,也就是方向。這裡在請教乙個網友後得到一種簡單的列舉辦法。其實乙個方向就是乙個-1,0,1的三進製加法。例如:(-1,-1),(-1,0),(-1,1),(0,-1),(0,1)...也就是說當某一位數加到2後他必須向前進一位,自己再變成-1。這樣就能列舉所有的方向了。另外還有一種類似的思路就是從某一點向兩邊各走一步,也就是說選定乙個方向走一步,再言著反方向走一步。比如方向(x,y),那反方向就是(-x,-y),同樣可以用上面三進製的思想。
第二個任務是實現乙個ai。這個任務裡有詳細的描述,還是比較簡單的,實現簡單的a*演算法,只需要最多向前3層。我在程式裡使用的是dfs(深度優先搜尋)的方法,具體也就沒啥好說了。不過由於時間的關係沒有好好的組織**的結構,遺憾啊。
寫程式中發現的一些問題,需要鞏固:
1.int a[5] = ,這裡a的5個元素都會被初始化為0
int a[5] = ,但是這裡只有a[0]會賦值為-1
編譯器的行為:會把第乙個元素值賦給陣列的第乙個元素,然後用0賦給剩下的元素。【c++程式設計思想,第四章】
2.深拷貝,如果類裡有需要動態申請的成員時,這時需要自己過載拷貝建構函式,否則預設的只會拷貝指標本身
3.myclass a1;
myclass a1 = a2 ; 在這裡呼叫的是拷貝建構函式
a1 = a2; 在這裡呼叫的是過載=(預設也有)
4.vector中,向vector中加入乙個類例項時,需要考慮前面2的情況。
tic tac toe遊戲勝方判別(井字棋)(一)
題目說明 需要讀入乙個3x3矩陣,矩陣中1表示x,0表示o,如果有三個連在一起的相同符號,則該方獲勝,如果沒有,則沒有獲勝方。解決方法 為了解決這個問題,需要做的是對整個矩陣進行遍歷,看是否存在上述情況。為了達到目的,需要從行 列和對角線三個維度進行遍歷。程式實現 include include i...
Unity3d 遊戲設計(一)井字棋
宣告變數 public texture2d o public texture2d x guistyle mystyle private int turn 1 記錄誰的回合 turn 1為 turn 2為 int board new int 3 reset 函式 用於重新開始遊戲 重新開局 void ...
C語言,二維陣列模擬井字棋遊戲開發
includeint main void 以下為二維陣列的初始化 int b 5 得出結論。一,行數可以不寫,可以由編譯器來數,但是列數一定要標出來 二,如果有沒被定義值的陣列自動賦值為零 三,每行乙個 逗號分隔 小知識 陣列的名字加下標等於變數 以下是模擬井字棋的遊戲開發思路 讀入矩陣 const...