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

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

pangzilva + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档