bestMove(int p, int*v)
{ int i;
int lastTie;
int lastMove;
int subV;
/*First, check for a tie*/
if (isTie()) {
*v=0;
return(0);
};
/*If not a tie, try each potential move*/
for (*v=-1, lastTie=lastMove=-1,i=0;i<9;i++)
{
/*If this isn't a possible, skip it*/
if (board!=0) continue;
/* Make the move. */
lastMove=i;
board=p;
/* Did it win? */
if (hasWon(p)) *v=1;
else{
/*If not, find out how good the other side can do*/
bestMove(-p,&subV);
/* If they can only lose, this is still a win.*/
if (subV==-1) *v=1;
/* Or, if it's a tie, remember it. */
else if (subV==0){
*v=0;
lastTie=i;
};
};
/* Take back the move. */
board=0;
/*If we found a win, return immediately
(can't do any better than that)*/
if (*v==1) return(i);
/*If we didn't find any wins, return a tie move.*/
if (*v==0) return(lastTie);
/*If there weren't even any ties, return a loosing move.*/
else return(lastMove);
};
国外的一些论坛曾举行过256字节的游戏设计比赛。作品非常多,其中有一件作品正巧也是井字游戏。作者用区区两百多行就写了与上述程序演算方式完全相同的作品,可见功力确实了的。另外,我也很希望类似的活动能在国内推展起来。对了,在这样的比赛条件限制下,除了汇编语言外,几乎没有其它的选择了。 .386c
code segment byte public use16
assume cs:code, ds:code
今天,我想先以一套游戏使用的技术为蓝本,导入实务设计的范畴。你听过“ZZT”这套共享游戏吗。
如果没有,别太在意,这是91年发行的文字模式角色扮演游 戏。我们不谈游戏本身,而把焦点放在游戏的开发系统当中。ZZ T虽然老,所引用的“物件导向”设计概念可是一点都不含糊。
为什么需要额外设计一套游戏专属的程序开发系统?利用现有的程序语言难到不可以吗?首先,现今常见的程序语言中,大 多半都是通用语言,当然也有不少专用语言,严格说来,没有一 套游戏设计的专用语言。(不过,早在八位电脑时代,已有一套 名为“游戏制作者”的软件,它允许使用内建的语言来开发游戏 )就目前游戏主要使用的C语言以及汇编语言来说,程序员必须 从无到有,制作出游戏的引擎系统。
如果有一套游戏开发系统,制作游戏(特别是续集)会大幅 度降低程序设计制作游戏所花费的时间与精力。让我们来看看几个实际的例子:Origin的创世纪系列(人物行程管理、对话皆有 专属系統)等。只要游戏开发系统规划得适宜,一旦制作完成, 对日后制作的游戏程序,绝对有大补益。
我不想在这里就编辑器、编译器之间的差异以及设计的详细原理做讨论。虽然这些都与设计一套游戏开发系统有密切关系, 但这些都属于“系统程序”课程的范畴,我们只需了解就行了。 将程序与游戏资料独立安排有许多好处。你不会因为仅需要修改 游戏资料,就必须重新进行“修改代码、编译、连接”等繁琐的 过程。让我们来看一段ZZT游戏中,某商店老板的“控制”程序
@Vendor
#end
:touch “事件”触发(接触该“物体”)
"Hello, you must be new to town! \
If you want to be successful 讯息显示
around here, you'll need to buy
some supplies!" /