下面是我刚学C语言时写的一个人机对战五子棋的算法,写它之前未参考任何书籍,写之后也未分析过别人的同类代码,纯属自娱。我称该算法为最优点搜索法(下棋嘛,当然要找最优点罗:p)。    具体方法如下:对于一个15*15的棋盘,可以简单地用一个二维数组表示,假设值为0时表示空,1为落黑子,2为落白子。基本思想是对每一个可落子点进行搜索,求得其“优先数”(暂时这样称呼了),取优先数最大的点落子,如果多点相同,随机取一点。对每一个要计算的点,可以确定四个搜索方向:横向,纵向,正斜向,反斜向,首先选出两个最佳方向(在半径为四个单位的搜索范围内,与将要落下的子同色的棋子数越多的方向为越佳,两个紧靠的棋子间的距离为一个单位),如果只有一个方向有同色的子,另一个方向的子可以0计算,然后以这两个方向为基础进行“优先数”计算。算法如下:    基本算法:设A=(构成两个方向的棋子总数)+3*(棋子较多的方向的棋子数)。其中涉及到的棋子数均指在搜索半径内可见的!!(切记),对一个确定的点,设搜索半径从1到3,分别计算这3次的A,然后相加就可得到优先数。例如:OOO*            
   O
   O对这样的形状,其中“*”代表将要落子的点(即搜索点),“O”代表已有的同色棋,其优先数=(3+3*2)  +  (5+3*3)  +  (6+3*4)=  41
        半径为1时      半径为2时    半径为3时又如果是这样的形状:
OO+*
   +
   O其中“+”表示该点为空,其优先数=(1+3*1)  +  (3+3*2)  +  (4+3*3)=  26
        半径为1时      半径为2时    半径为3时好了,算法就这样,个别特殊情况可能要做一些调整,这样棋盘上每个点的优先数都可以确定下来,让电脑下棋时,只需分别找出己方和对方优先数最大的点,选出其中较大的落子就可以了。Ah~好累!    大家有好的方法也发言啊!!