Re: [程式] 怎麼判斷五子棋的棋型?

看板GameDesign作者 (LaPass)時間12年前 (2013/10/18 23:54), 編輯推噓5(507)
留言12則, 3人參與, 最新討論串3/3 (看更多)
程式寫出來了 因為算block算到頭昏,就動用暴力去解決了 使用的方式是..... 遞迴求解 function { int[] m=取得中島的大小(); /* 像下面紅色這種,在中央的我方棋子,我叫她中島 XXOOO OO */ if(中島大小>5) //大於五顆 { if(允許長連) return new Ans(5, 2); //傳回連成五子的CODE else return new Ans(0, 0); //傳回被擋住 } else if(中島大小==5) //剛好五顆 { return new Ans(5, 2); //傳回連成五子 } else //四子三子二子一子通通在這邊判斷 { Ans[] a=new Ans[2]; //兩邊分邊檢查 for(左邊/右邊) { int 中島邊界=取得中島該邊的邊界; //如果該邊是空白,很好,沒被阻擋,嘗試落子。 if(中島邊界往外推一格 == 空白) { //在該空白點落子,建立下一節點 Counter next=new Counter(落子後新的節點); //遞迴並記錄答案 a[左邊/右邊]=next.遞迴呼叫同一方法; } else //被阻擋,傳回block { a[左邊/右邊]=new Ans(0, 0); } } //排序,a[0] 要比 a[1] 大,如果一樣大就比氣的數目 if(a[1].land>a[0].land||(a[0].land==a[1].land&&a[1].lift>a[0].lift)) { Ans tp=a[0]; a[0]=a[1]; a[1]=tp; } //兩邊都被擋,沒棋 if(a[0].land==0) return new Ans(0, 0); //兩邊下下去都形成五子的局面,就是活四 if(a[0].land==5&&a[1].land==5)return new Ans(4, 2); //只有一邊下下去五子,就是死四 if(a[0].land==5&&a[1].land!=5)return new Ans(4, 1); //其他狀況,把棋型-1後傳回 return new Ans(a[0].land-1,a[0].lift); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.41.98.199

10/19 00:16, , 1F
XD
10/19 00:16, 1F
貼一下運算結果: o 我方 x 敵方或是牆壁 這是落子點 ↓ :o:oo [3:2] [3:2] o o :o: o o [3:2] [3:2] oo o :o: o oo [3:2] [3:1] oo :o: oo [3:1] [3:1] ooo :o: ooo [3:1] [0:0] oo :o: oo [3:2] [3:1] x o:o:o x [3:1] [3:1] x o:o:o [3:2] [3:2] oo o:o:o [4:1] [3:1] ooo :o: oooo [4:2] [4:1] ooo :o: oooo [4:2] [4:1] ooo o:o:o ooo [4:2] [0:0] ※ 編輯: LaPass 來自: 114.41.98.199 (10/19 00:42)

10/19 02:04, , 2F
0 1 2就是沒棋、死(活一邊)、活對吧
10/19 02:04, 2F

10/19 12:28, , 3F
沒錯~
10/19 12:28, 3F

10/20 02:02, , 4F
把例子對棋盤跑K&R會比recurive快嗎?似乎可試試
10/20 02:02, 4F

10/20 03:56, , 5F
請問K&R是什麼?
10/20 03:56, 5F

10/20 05:26, , 6F
抱歉我寫錯了。字串比對KMR Algorithm。
10/20 05:26, 6F

10/20 05:27, , 7F
意思是如果把每個例子當成pattern去跑棋盤的字串比對
10/20 05:27, 7F

10/20 05:30, , 8F
不過五子棋可以斜角延伸,比對上可能會較麻煩。
10/20 05:30, 8F

10/20 12:02, , 9F
也還好,因為迴圈可以這樣跑 for(int i=0,j=0;略;i++,j++)
10/20 12:02, 9F

10/20 16:23, , 10F
不不,連j都不用啊,你有i就好,因為你斜角加或減的值一樣
10/20 16:23, 10F

10/20 16:24, , 11F
所以座標用(x+i, y+i), (x+i, y-i)等等的去套就好XD
10/20 16:24, 11F

10/20 18:59, , 12F
寫好了,正在做WEB的UI~
10/20 18:59, 12F
文章代碼(AID): #1IOLcWEW (GameDesign)
文章代碼(AID): #1IOLcWEW (GameDesign)