五子棋人机对弈.docxVIP

  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文档。上传文档
查看更多
【概述】五子棋是一种大众喜爱的游戏,其规则简单,变化多端,非常富有趣味性何消遣性。这里设计了一个简单的五子棋程序,采用对空格点进行评分排序的算法。近来随着计算机的快速发展,各种棋类游戏被纷纷请进了电脑,使得那些喜爱下棋,又常常苦于没有对手的棋迷们能随时过足棋瘾。而且这类软件个个水平颇高,大有与人脑分庭抗礼之势。其中战胜过国际象棋世界冠军-卡斯帕罗夫的“深蓝”便是最具说服力的代表;其它像围棋的“手淡”、象棋的“将族”等也以其优秀的人工智能深受棋迷喜爱;而我也做了一个“无比”简单的五子棋算法。  总的来说(我们假定您熟悉五子棋的基本规则),要让电脑知道该在哪一点下子,就要根据盘面的形势,为每一可能落子的点计算其重要程度,也就是当这子落下后会形成什么棋型(如:“冲四”、“活三”等),然后通览全盘选出最重要的一点,这便是最基本的算法。主程序模块包括:数据结构,评分规则,胜负判断,搜索最优空格的算法过程。【关键字】人工智能,博弈树,五子棋,无禁手,评分,搜索,C,随机。【环境】XP/TC3.0【算法及解析】(无禁手)一.?? 数据结构:本程序中只使用了一个19×19的二元结构数组如下定义:Typedef Struct{int player; int value[8][5]; longint score; }map[19][19];其中map[i][j]保存i行j列棋子信息,player为下棋方,value数组记录八个方向的连续5个棋子的信息,为以后评分服务。Score为空格评分。以及数据结构可以满足初级人机对弈程序的功用。对比其他程序结构:王小春五子棋源码:该程序采用链表节点结构,保存下子信息,该结构主要为悔棋提供方便(虽该源码为开发悔棋功能)?Typedefstruct Step ??{ ???int?m; ???int?n; ???char side; ??};为链表clist节点,m,n表示两个坐标值,side表示下子方相对于我的程序中的player.另外该程序还使用一个二维数组map[][],来保存棋盘信息。二.预定义单元#define blank 0#define black 1#define white 2#define NUM_HIGH 19#define NUM_LINE 19#define man 1#define bot 2其中blank表示空白点,black该点放黑子(即man),white该点放白子(即robot)NUM_HIGH,NUM_LINE分别定义棋盘的高度与宽度。Turn 为轮流下子方。三.评分机制判断是否能成活四或者是双死四或者是死四活三,如果是机器方的话给予10,000,000; 判断是否已成冲四,如果是机器方的话给予6,000,000;判断是否成死3活3,如果是机器方的话给予1,500,000;; 判断是否已成双活2,如果是机器方的话给予100,00; 判断是否能成活2,如果是机器方的话给予70,000; 判断是否能成死2,如果是机器方的话给予30,000。四.函数定义及其功能。1.Void init() 初始化棋盘bgi图形与棋盘棋型。 将棋盘标记map[][].player都置为blank(空白),各点8方向的连续五个棋子信息也初始为0,各点评分数也置为0。void init(){inti, j, m, n;intgdriver=DETECT,gmode;initgraph(gdriver,gmode,..\\bgi);for(i = 0; i 19; i++)for( j = 0; j 19; j++) {map[i][j].player = blank;for( m = 0; m 8; m++)for( n = 0; n 4; n++)map[i][j].value[m][n] = blank;map[i][j].score = blank; }}2.Void paint()画棋盘函数,本五子棋程序使用的是标准围棋棋盘,规格19×19,每格25大小(象素),并且规定man棋子颜色为黑,robot为白色,黑棋优先。最后初始化光标(开始位置)位置。void paint(){inti, j;clearviewport();setbkcolor(BLUE);//设置背景色setcolor(WHITE);//设置作图色for(i = 20; i = 470; i+= 25)line( 20, i, 470, i);for(j = 20; j = 470; j+= 25)line( j, 20, j, 470);outtextxy( 525, 160, Man);

文档评论(0)

精品资源 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档