- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
五子棋ai-c语言编程
五子棋游戏的算法:
本算法只处理玩家先行(即执黑子)的情形。
开局部分采用开局数据库的方式实现。
中后期采用规则核心算法:
规则如下:
白方核心规则(Rules Only For White):
优先级 名称 规则数据结构 0 白五连 ○○○○※ R51 ○○○※○ R52 ○○※○○ R53 1 黑五连 ●●●●※ -R51 ●●●※● -R52 ●●※●● -R53 2 白活四 □○○○※□ R41 □○○※○□ R42 3 白四四 R44 4 白四三 R43 5 白VCF RVCF 6 白四 □○○○## □○○#○# □○#○○# 7 黑活四 □?●●●?□ -R41 ?●●?●? -R42 8 黑四三 -R43 9 黑VCF -RVCF 11 白三三 R33 10 黑 ○?●●●?○ -R40 ●表示该位置为先手方已落的棋子
○表示该位置为后手方已落的棋子
□表示该位置无落子
※该位置无落子,一旦出现此种情形,表示已无继续有哪些信誉好的足球投注网站之必要,应立即中断在该位置落子
#该位置无落子,表示在该位置落子也不一定致胜
?该位置无落子,表示在这种情形的应当在多个位置中选择一个
Ver0.1 空核心
struct Pos AI(char board[][N], struct Pos p) {
struct Pos res;
/*board是当前棋盘:0是空、1是黑子、2是白子*/
/*cur是黑方当前一步的落子位置*/
/*res是返回白方的落子位置*/
/*需要注意的是:board是坐标范围是从0到N - 1,而cur和res的坐标比他大一个,是1到N,所以要减1*/
return res;
}
Ver1.0 完全随机核心(测试用)
struct Pos AI(char board[][N], struct Pos p) {
struct Pos res;
do
{
res.x = rand() % N + 1;
res.y = rand() % N + 1;
}
while(!(res.x 0res.y 0res.x = Nres.y = N
!board[res.y - 1][res.x - 1]));
return res;
}
完全的随机核心,随机的把棋子落在棋盘的任何位置,仅仅用作测试。
Ver1.2 随机核心·改
struct Pos AI(char board[][N], struct Pos p) {
struct Pos res;
static int R = 0, L = 0;
int n = 0, f = 1;
if (!R||(p.x + R * p.y + L) % 5 == 0) {
randomize();
R = rand() % 2 + 2, L = rand() % 5;
}
while(1) {
n++;
res.x = p.x - f + rand() % (2 * f + 1);
res.y = p.y - f + rand() % (2 * f + 1);
if (n == 32||n == 100) f++;
if (rand() % 10000 == 0) R = rand() % 2 + 2;
if (((res.x + R * res.y + L) % 5 == 0||f == 3)
res.x 0res.y 0res.x = Nres.y = N
!board[res.y - 1][res.x - 1])
return res;
}
}
这个核心只是将棋子落在你上一步所走的四周,并做出一些看似格挡的棋步,其实并没有任何的思考能力。
Ver2.0 米字展开式-分值加权算法雏形
#define B(n) (board[y + (n) * dy[z]][x + (n) * dx[z]] == ATK)
#define C(n) (!board[y + (n) * dy[z]][x + (n) * dx[z]])
#define D(n) (board[y + (n) * dy[z]][x + (n) * dx[z]] == DEF)
#define E(n) (x + (n) * dx[z] = 0x + (n) * dx[z] Ny + (n) * dy[z] = 0y + (n) * dy[z] N)
#define ATK_A 1023 /* P ● ● ● ● *
文档评论(0)