作者DreamYeh (天使)
看板GameDesign
标题Re: [程式] 黑白棋
时间Sun May 14 12:23:14 2006
※ 引述《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