五子棋ai-c语言编程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
五子棋游戏的算法: 本算法只处理玩家先行(即执黑子)的情形。 开局部分采用开局数据库的方式实现。 中后期采用规则核心算法: 规则如下: 白方核心规则(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 ● ● ● ● */ #define ATK_B 120 /* P ● ● ● __ __ */ #define ATK_C 110 /* P ● ● __ ● __ */ #define

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档