当前位置:  编程技术>c/c++/嵌入式

VC实现五子棋游戏的一个算法示例

    来源: 互联网  发布时间:2014-10-27

    本文导语:  本文讲述了VC实现五子棋游戏的一个算法示例,该算法采用极大极小剪枝博弈算法,感兴趣的读者可以对程序中不完善的部分进行修改与完善。 该设计主要包括:数据结构、估值函数、胜负判断、搜索算法 程序运行界面如下:...

本文讲述了VC实现五子棋游戏的一个算法示例,该算法采用极大极小剪枝博弈算法,感兴趣的读者可以对程序中不完善的部分进行修改与完善。

该设计主要包括:数据结构、估值函数、胜负判断、搜索算法

程序运行界面如下:

具体实现步骤如下:

1、数据结构

//记录每步棋,可以建立链表用来进行悔棋、后退(本程序没有实现)
struct Step
{
 int x,y; //棋子坐标
 int ball; //表示下子方{BLACK,WHITE}
};
//记录棋盘情况,用于搜索过程
class CBoardSituation
{
 public:
 int nArrBoard[15][15]; //棋盘情况
 struct Step machineStep; //AI所下的那一步
 long value; //盘面所打的分数
};
//当前棋盘,用于棋盘显示
int nArrBoard[15][15];

2、估值函数

分析当前棋盘上黑白双方棋型:五连、活四、冲四、双活三、单活三、眠三、活二、眠二,然后根据五子棋规则给棋盘打分,
具体分值可以根据经验自己确定。本程序中:五连=9999(极值),活四=9990,冲四=9980,双活三=9970,多活三加2000,
单活三加200,每个眠三加10,每个活二加4,每个眠二加1。其中打分时还要根据当前下棋方情况进行打分。

3、胜负判断

这个比较简单,根据最后落子情况从水平、垂直、左斜、右斜四个方向检查是否存在五个连续棋子即可。

4、搜索算法

算法采用极大极小值博弈算法,它的主要思想为:预测后N步下棋情况,对预测的后N个棋盘进行打分。轮到自己下棋时选分值最大的,轮到对方下时选分值最小的。选出我们认为最优的作为下一步走法。本程序算法基本思想如下(算法语言表示):

void DFAI()
{
 long value=-MAXINT; //对初始根节点的value赋值
 CBoardSituation currentBoard;
 //获取当前机器新棋面情况
 for(int i=0;ivalue=Search(pBoard,BLACK,value,0);
 value=Select(value,pBoard->value,WHITE); //找出最大的分值
 }
 //回到链表头
 pos=CountList.GetHeadPosition();
 for(i=0;i {
 pBoard= &(CountList.GetNext(pos));
 if (value==pBoard->value) //找出得到最高分的盘面
 {
  value=pBoard->value;
  gnRow=pBoard->machineStep.x;
  gnColumn=pBoard->machineStep.y;
  bPlayerDo=TRUE; //当前下子方改为人
  break;
 }
 }
 //其他处理
}
其中Search()函数如下:
//算法搜索函数
long Search(CBoardSituation *board,int mode,long &oldvalue, int depth)
{
 CList m_DeepList;
 long value;
 if(depthnArrBoard,mode))nArrBoard,mode);//棋面打分
 }
 return 0;
} 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 基于DIV+ul+li实现的表格(多示例)
  • python实现绘制树枝简单示例
  • c语言实现MD5算法完整代码示例
  • ThinkPHP实现事务回滚示例代码
  • 使用libpcap实现抓包程序的步骤及代码示例
  • 修改.htaccess实现301域名重定向示例分享
  • c++实现MD5算法代码示例
  • php实现数组筛选奇数和偶数示例
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例 iis7站长之家
  • python实现倒计时的示例
  • 数据结构:图(有向图,无向图),在Python中的表示和实现代码示例
  • python使用循环实现批量创建文件夹示例
  • android实现来电静音示例(监听来电)
  • strcpy函数实现简示例命分享
  • strcat函数实现简单示例
  • java实现jframe透明窗体示例
  • Thinkphp实现MySQL读写分离操作示例
  • C++实现顺序排序算法简单示例代码
  • c#实现md5加密示例
  • java实现网页解析示例
  • python实现图片批量剪切示例
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • php实现socket实现客户端和服务端数据通信源代码
  • 网站重定向用C语言实现iptables,ACL实现


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3