為什麼這篇黑白棋程式鄉民發文收入到精華區:因為在黑白棋程式這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者DreamYeh (天使)看板GameDesign標題Re: [程式] 黑白棋時間Sun May...
※ 引述《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