数学建模社区-数学中国
标题:
五子棋算法
[打印本页]
作者:
厚积薄发
时间:
2010-5-31 17:42
标题:
五子棋算法
五子棋算法
* \2 L) S+ n# f( M$ @; W+ Q$ l7 j& z
3 j+ i! s- @. J- t2 m d
5 B, {' j, E; a9 X- M
任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描
; W2 b; ~3 l0 i6 L: q* w- z
整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三
. |* V; H* |8 v6 v4 P9 ~
个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:
r4 W8 K9 x% O5 g
gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3
- S3 }( v8 c" d& H
gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4
' {5 x) \+ J7 q4 b8 D$ l. y! F
在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:
% t2 r) X/ s7 H# p: H
Const DIR_UP = 1
0 y, @3 P$ J+ m7 g* |- @6 |
Const DIR_UPRIGHT = 2
) H4 z$ v) z% O1 x& K3 l" V
Const DIR_RIGHT = 3
/ D4 M* i: R; u0 ~* w8 k* B7 s
Const DIR_RIGHTDOWN = 4
. u2 R2 ?1 Y. M( {+ s% D' ]
Const DIR_DOWN = 5
- ~: n" i2 Q7 U. ?, I* E( L: ?* X
Const DIR_DOWNLEFT = 6
( B/ O& V9 [& \( @! [
Const DIR_LEFT = 7
5 Z& a$ e( Y# ~4 R" c' @6 C5 G* \
Const DIR_LEFTUP = 8
% Y' c9 l* l, l( t8 l% {4 r& g; R5 H
这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:
3 p. l- o& A+ G6 u2 h
---------
! i; |( k, w: {7 }2 n; K" }* V
---------
/ B& M. z7 Z+ f, b
---oo----
9 q7 c( m) c* K6 M7 q6 z) y# A+ _4 U
-ox*xx---
8 x7 y5 |( l( j6 ?) W" f L
---------
1 w0 r) X, h1 p7 ~8 f2 @" o8 j5 a
---------
4 X0 O# M: r5 F
图中的*点从标为(4,4),(打*的位置是空位),则:
2 x% ~ u! S1 E( ?8 x( F
gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1
: u4 ^! n! t/ Y/ G. m* d E
gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2
9 g' L. h8 S# ]
gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2
: y3 Z5 x% O4 h$ |+ l, X. N# Q3 o
gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
]0 Q' I+ k1 B, j2 G3 |
. Y8 l ?" y+ o$ [* g1 ?
作者:
相信自己
时间:
2010-6-5 21:24
很好........
作者:
shuaishuideyuji
时间:
2010-7-25 14:02
抢个板凳!
作者:
baixiaoming555
时间:
2010-7-25 14:06
拜读过了已经
作者:
loooog12
时间:
2010-7-27 18:29
先下来看下
作者:
schnee
时间:
2012-1-28 21:35
必须顶!!!
作者:
埃土
时间:
2013-5-15 22:06
看看 !
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5