- 在线时间
- 5024 小时
- 最后登录
- 2022-11-28
- 注册时间
- 2009-4-8
- 听众数
- 738
- 收听数
- 1
- 能力
- 23 分
- 体力
- 77273 点
- 威望
- 96 点
- 阅读权限
- 255
- 积分
- 27108
- 相册
- 1
- 日志
- 14
- 记录
- 36
- 帖子
- 4293
- 主题
- 1341
- 精华
- 15
- 分享
- 16
- 好友
- 1975

数学中国总编辑
TA的每日心情 | 衰 2016-11-18 10:46 |
|---|
签到天数: 206 天 [LV.7]常住居民III 超级版主
 群组: 2011年第一期数学建模 群组: 第一期sas基础实训课堂 群组: 第二届数模基础实训 群组: 2012第二期MCM/ICM优秀 群组: MCM优秀论文解析专题 |
五子棋算法& _3 A- U7 C4 C% ~" U5 g
7 ]& M# @. G. @- ^/ m$ Y Y) a& i1 i' y
任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描
- t" S* }+ z/ L" a. M整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三! J Q8 }1 o1 s( u# C( j# S
个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:8 n, \. f; a# ~6 O9 s7 C/ r* F
gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3
# D! }2 Q; }9 c; agstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4' j: ]: K$ Z3 m# H% D- _
在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:; o3 y! t, e+ y. b' m$ {
Const DIR_UP = 1
2 d$ G' G; e$ p- a4 m! w3 E; ]* ]Const DIR_UPRIGHT = 2
, ], d7 ]( X) Z6 V( y6 l+ aConst DIR_RIGHT = 3
8 ]5 j Y$ R: k- v% iConst DIR_RIGHTDOWN = 4$ u- q$ K2 v# z3 M4 R u; P( `
Const DIR_DOWN = 5& r+ J8 B. ]: R% \. K+ Y
Const DIR_DOWNLEFT = 6
w0 _$ O& k. t ?Const DIR_LEFT = 7
, w* Q# x; M$ v# xConst DIR_LEFTUP = 80 L+ V# [1 g% U0 R' S" z0 Z% E
这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:9 f( }# U) K& k9 R' l
---------
- ~( B- e+ G1 `---------6 o+ v, h* n& ]: M" `/ r( K. f
---oo----
3 x. Q/ q' _% J; j& ^5 Z5 x6 Q-ox*xx---1 B/ @; q- z+ N/ Z4 A7 F/ A
---------) U& g$ _% q, L" ~' t, C
---------
+ H9 k% P0 L& n! Y, n* d图中的*点从标为(4,4),(打*的位置是空位),则:
6 E8 q8 k9 J# p1 i; V. @6 U, ~gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1( d2 |0 N, r& ?; V( G4 j
gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2
$ ~- y9 _; f* B% Y* s6 lgStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2( `2 \, s! T) r+ R- c& \! \7 S
gStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
' H2 ]. O* o5 f" V# ]4 o' x6 X, K: J6 x- F8 l4 P
|
zan
|