看板 GameDesign 關於我們 聯絡資訊
※ 引述《jack58 (還是晚了點~)》之銘言: : 我想寫黑白棋這個遊戲的程式.. : 我現在也想寫ㄧ個黑白棋的遊戲..但是說真的還沒什麼頭緒> <".. : 有高手能告訴我黑白棋會用到的相關程式嗎?? : 或著他會用到的數學公式..方程式等... : 還有就是~~黑白棋有什麼歷史的淵源嗎??他是怎麼誕生的阿?? 歷史淵源....這個Google一下,資料應該跟山一樣多@@... 網路上也找得到黑白棋範例程式....所以,多上網找吧XD (逃) 好吧爲避免有賺P幣之嫌,回答一下好了:) 首先,要用什麼程式語言寫....其實真的沒有拘泥,高興的話 Basic,C++,Java都一定寫的出來~~ 那要用到DirectX,OpenGL嗎? 我想除非你想在黑白棋中加入絢麗的動畫(比方說會一下子就 真的有個人出手下子的動畫),否則真的不需要~ 那大概要怎麼寫呢? 我大概給個方向好了,首先你要訂定一個10x10的矩陣,分別代表 棋盤上的點。 內容可能有0,1,2三種變化,定義可能為: 0==沒下棋的點 1==白子 2==黑子 範例:  {0,1,0 0,2,0 0,1,1} 可能代表著如下的局勢: ╒○╕ ╟●╢ ╘○○ 下棋時後,分成圖層輸出、和底層處理,當你在某點下子時候 一方面會改變圖形的顯示,另一方面會改變那個矩陣內容。 比方說我現在持白子,下在剛剛棋盤上左上角那個點,那你就 要讓矩陣變成  {1,1,0 0,2,0 0,1,1} 接著還沒到對方輸入回合(或電腦思考回合),就要開始進行 判斷了。黑白棋基本規則是,只要你能在一條線上把對方完全 圍起來,就可以把棋子翻過來-也就是讓對方的子變成你的子 。(不清楚的話先把遊戲規則看清楚喔) 因此我們接著就是要讓程式作判斷,看哪些子有被圍起來。 判斷方法透過兩個if和for就好,我舉例如下: //X,Y定義為你剛剛下棋子的落點X,Y for(i=X+1;i<width;i++) //width在標準規則裡面就是10 //這裡只查在你下子右邊的局勢,總共要查八個方向 { if(matrix(i,Y)==matrix(X,Y)) //如果查到直線上有個跟你一樣的子 { bool is_all_dif; //定義為是否完全跟你不同色   for(j=X+1;j<i-1;j++) //查詢在那中間的子 { if(matrix(j,Y)==matrix(X,Y)) //如果有個跟你一樣顏色的,那就不算    { is_all_dif==false; break; } } if(is_all_dif){ChangeALLColor(X,Y,i,Y);} //如果都不同色,改變她們顏色 } } ChangeALLColor(X,Y,i,Y)子函式定義為改變兩個座標之間所有子力 這大概就是個雛形了!接著只要針對八個方向去做偵測就完成了~ 簡單吧:)?? 當然這個結構還不完整,你接著還要思考的是,怎麼做介面? 比方說要怎麼輸入?是否能選擇聲音或棋子顏色? 這些有趣的選單 如果想做成可以跟電腦對戰的,那難度會立即上升到一個你無 法相信的境界。初學程式我還是會建議你先從能做雙人對打的遊 戲開始。 回到原點,以上我用的都是結構化程式語言的概念,你看短短三 四行判斷,我已經用到迴圈決策副函式XD 重點是這些東西,都是不限定任何程式語言的。所以,在初學時 後,不應該被那些東西綁住。尤其如果有人跟你說黑白棋非學個 什麼什麼才能寫出,那你就用最基礎的GWBasic寫給他看吧XDDD 以上希望能回答你的問題:) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.185.111