• 大小: 12.08MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-10
  • 语言: 其他
  • 标签: 人机对弈  

资源简介

采用多种搜索算法,实现了人机对弈,有较好的用户界面

资源截图

代码片段和文件信息


#include “stdafx.h“
#include “AlphaBetaSearch.h“

int const MAXVALUE = 20000;//最大值
CAlphaBetaSearch::CAlphaBetaSearch(void)
{
}

CAlphaBetaSearch::~CAlphaBetaSearch(void)
{
}


//////////////////////////////////////////////////////////////////////////
//函数名称:SearchAGoodMove
//函数介绍:找出最好的走法 
//输入参数: byPosition 棋盘数组        
//输出参数:无       
//返回值  : 无
//  
//郑华山
//////////////////////////////////////////////////////////////////////////
void CAlphaBetaSearch::SearchAGoodMove(BYTE byPosition[10][9])
{
//拷贝棋盘数组到备份数组
memcpy(m_BackupChessBoard byPosition 90);
//设置当前搜索深度为最大深度
m_CurrentSearchDepth = m_MaxSearchDepth;
AlphaBeta(m_MaxSearchDepth -MAXVALUE MAXVALUE); //AlphaBeta搜索
m_BestMove.ChessFromID = m_BackupChessBoard[m_BestMove.From.y][m_BestMove.From.x]; 
m_BestMove.ChessToID = m_BackupChessBoard[m_BestMove.To.y][m_BestMove.To.x];
MakeMove(m_BestMove);//走一步棋

memcpy(byPosition m_BackupChessBoard 90); //更新棋盘;

}
//////////////////////////////////////////////////////////////////////////
//函数名称:AlphaBeta
//函数介绍:AlphaBeta搜索算法  随着程序的执行 [] 区间的范围将会不断缩小
//输入参数: iDepth 搜索深度 Alpha 表示本方最优,Beta表示对少最坏值     
//输出参数:最佳走法  
//返回值  : 返回最佳估值
//  
//郑华山
//////////////////////////////////////////////////////////////////////////
int CAlphaBetaSearch::AlphaBeta(int iDepth int Alpha int Beta)
{

BYTE CurrentChessID; //被吃的的棋子ID
int iValue = 0;
int iNum = 0; //走法的个数
int iGameOver = IsGameOver(iDepth); //是否结束
if (iGameOver != 0)
return iGameOver;

if (iDepth <= 0) //叶子节点估值
{
return m_pEveluation->Eveluate(m_BackupChessBoard (m_MaxSearchDepth-iDepth + m_Side) %2); //局面评估


}

iNum = m_pMoveGenerator->GenAllMove(m_BackupChessBoardiDepth (m_MaxSearchDepth-iDepth + m_Side) %2); //产生所有走法

//遍历所有走法
for ( int i = 0; i < iNum; ++i)
{
CurrentChessID = MakeMove(m_pMoveGenerator->m_MoveList[iDepth][i]);  //走一步
iValue = - AlphaBeta(iDepth - 1 -Beta -Alpha);//递归调用Alpha Beta分别取负,并交换位置
UnMakeMove(m_pMoveGenerator->m_MoveList[iDepth][i] CurrentChessID);//撤销上一步
if ( iValue > Alpha) 
{
Alpha = iValue; //保留极大值
if ( iDepth == m_MaxSearchDepth) //到树根找到最好的走法
{
m_BestMove = m_pMoveGenerator->m_MoveList[iDepth][i]; //保存最好的走法
}
}

if ( Alpha >= Beta)//剪枝条件
break;   //剪枝,放弃剩下的节点



}


return Alpha;//返回局面评估值
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    1034752  2012-02-10 15:16  ChinaChess\bin\ChinaChess.exe

     文件       1259  2012-02-03 09:45  ChinaChess\bin\ChinaChess.exe.CodeAnalysisLog.xml

     文件          0  2012-02-03 09:45  ChinaChess\bin\ChinaChess.exe.lastcodeanalysissucceeded

     文件    9300992  2012-02-10 15:16  ChinaChess\bin\ChinaChess.pdb

     文件       2690  2012-02-02 19:30  ChinaChess\ChinaChess\AlphaBetaSearch.cpp

     文件        630  2012-02-03 15:47  ChinaChess\ChinaChess\AlphaBetaSearch.h

     文件       3293  2012-02-07 16:57  ChinaChess\ChinaChess\AlphaBeta_HH.cpp

     文件        437  2012-02-03 15:49  ChinaChess\ChinaChess\AlphaBeta_HH.h

     文件     586404  2012-02-08 10:02  ChinaChess\ChinaChess\ChinaChess.aps

     文件       3349  2012-02-02 12:59  ChinaChess\ChinaChess\ChinaChess.cpp

     文件        498  2012-01-05 19:02  ChinaChess\ChinaChess\ChinaChess.h

     文件      14743  2012-02-08 10:02  ChinaChess\ChinaChess\ChinaChess.rc

     文件       9367  2012-02-07 16:50  ChinaChess\ChinaChess\ChinaChess.vcproj

     文件        257  2012-01-21 18:06  ChinaChess\ChinaChess\ChinaChess.vcproj.vspscc

     文件       1421  2012-02-17 20:24  ChinaChess\ChinaChess\ChinaChess.vcproj.ZHENGHUASHAN.Administrator.user

     文件       1092  2012-01-05 19:02  ChinaChess\ChinaChess\ChinaChessDoc.cpp

     文件        572  2012-01-05 19:02  ChinaChess\ChinaChess\ChinaChessDoc.h

     文件      36114  2012-02-10 11:08  ChinaChess\ChinaChess\ChinaChessView.cpp

     文件       3896  2012-02-03 15:57  ChinaChess\ChinaChess\ChinaChessView.h

     文件      14313  2012-01-28 19:54  ChinaChess\ChinaChess\CWaterRoutine.cpp

     文件       1572  2001-01-19 18:23  ChinaChess\ChinaChess\CWaterRoutine.h

     文件       3837  2012-02-15 22:12  ChinaChess\ChinaChess\Define.h

     文件      35574  2012-01-31 16:44  ChinaChess\ChinaChess\DIBSectionLite.cpp

     文件       6955  2012-01-31 16:44  ChinaChess\ChinaChess\DIBSectionLite.h

     文件      35483  2012-02-10 15:16  ChinaChess\ChinaChess\Eveluation.cpp

     文件       3932  2012-02-17 20:24  ChinaChess\ChinaChess\Eveluation.h

     文件       4544  2012-01-25 19:32  ChinaChess\ChinaChess\GradientProgressCtrl.cpp

     文件       2221  2004-08-17 14:29  ChinaChess\ChinaChess\GradientProgressCtrl.h

     文件       4810  2012-02-07 15:28  ChinaChess\ChinaChess\HistoryHeuristic.cpp

     文件       1153  2012-02-04 12:41  ChinaChess\ChinaChess\HistoryHeuristic.h

............此处省略95个文件信息

评论

共有 条评论