- 在线时间
- 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优秀论文解析专题 |
五子棋算法
# C4 |3 N5 ?. }$ q. [" T! p; d' @
; y! L* m! x' q9 G# ^0 X5 V5 ?& f- w: v' O2 Y
任何一种棋类游戏其关键是对当前棋局是否有正确的评分,评分越准确则电脑的AI越高。五子棋游戏也是如此,但在打分之前,我们先扫描
8 c: r5 H1 M6 |& L6 _: _整个棋盘,把每个空位从八个方向上的棋型填入数组gStyle(2, 15, 15, 8, 2),其中第一个下标为1时表示黑棋,为2时表示白棋,第二和第三
/ a+ ^: O3 }, P4 V5 i5 H. |个下标表示(x,y),第四个下标表示8个方向,最后一个下标为1时表示棋子数,为2时表示空格数,如:6 w2 J( {3 j$ q! Z* [4 _
gStyle(1,2,2,1,1)=3表示与坐标(2,2)在第1个方向上相邻的黑棋棋子数为3, x W6 t& M r3 o9 s" n g* ~& ?
gstyle(1,2,2,1,2)=4表示与坐标(2,2)在第1个方向上的最近的空格数为4
& j$ P( M% R6 J在定义方向时,也应该注意一定的技巧,表示两个相反的方向的数应该差4,在程序中我是这样定义的:, [. a" d: |* ~' a* a; {
Const DIR_UP = 1
- F8 L1 z( L$ _/ rConst DIR_UPRIGHT = 2
: T) ]' Z) X7 a7 qConst DIR_RIGHT = 35 m% |9 i! P2 ?8 [$ Q0 H) R
Const DIR_RIGHTDOWN = 4! Y) p/ I; i! o4 w$ k" L7 o$ ? X g
Const DIR_DOWN = 5
$ f5 q+ E+ ?3 p7 W0 i: pConst DIR_DOWNLEFT = 6# G. z V; h4 F0 ^* J8 D0 f% Z, |
Const DIR_LEFT = 7
5 X5 g8 N! q9 r3 q0 t7 s( J$ WConst DIR_LEFTUP = 8# ~. m, R3 C- U3 k
这样我们前四个方向可以通过加四得到另一个方向的值。如果你还是不太明白,请看下面的图:
9 u3 W; g: a" u; A& r, W---------( ]: E. A; {2 c8 T
---------* n5 h3 Q4 f1 U8 n9 j
---oo----
& X$ b' D, E! {% C& M% d, Q-ox*xx---
5 {% X m* p# x2 O2 y% c---------& W8 b. f5 ?/ l
---------6 i: b) F' M8 q8 \7 J: R" y) a+ F _
图中的*点从标为(4,4),(打*的位置是空位),则:+ E3 r' E. {2 E1 [8 i. [4 H
gStyle(2,4,4,1,1)=1在(4,4)点相邻的上方白棋数为1
! [, Z h3 M; }. P7 ?gStyle(2,4,4,1,2)=2在(4,4)点的上方距上方白棋最近的空格数为2- e& N6 {* I0 @ o* d' a; s# @
gStyle(1,4,4,3,1)=2在(4,4)点相邻的右方黑棋数为2
1 l5 z, M: F- e( AgStyle(1,4,4,3,2)=1在(4,4)点的右方距右方黑棋最近的空格数为3
6 Y2 S8 e% a9 @/ ^$ j+ s( a1 y
4 o) V1 u2 u1 C6 x9 t |
zan
|