logo资料库

六子棋人机对战源代码.pdf

第1页 / 共59页
第2页 / 共59页
第3页 / 共59页
第4页 / 共59页
第5页 / 共59页
第6页 / 共59页
第7页 / 共59页
第8页 / 共59页
资料共59页,剩余部分请下载后查看
//头文件//接口类SearchEngine.h:interfacefortheCSearchEngineclass.#include"MoveGenerator.h"#include"Eveluation.h"classCSearchEngine{public:CSearchEngine();virtual~CSearchEngine();virtualSTONEMOVESearchAGoodMove(BYTEposition[][GRID_NUM],intType)=0;//得到最优走法(核心),type为棋子颜色virtualvoidSetEveluator(CEveluation*pEval){m_pEval=pEval;};//设置评估对象virtualvoidSetSearchDepth(intnDepth){m_nSearchDepth=nDepth;};virtualvoidSetMoveGenerator(CMoveGenerator*pMG){m_pMG=pMG;};//设置走法生成器BOOLGameOver(){returnm_bGameOver;};//返回游戏结束标记值voidBeginGame(){m_bGameOver=FALSE;};//设置游戏结束标记值为FALSEprotected:virtualvoidMakeMove(STONEMOVEmove,inttype);//计算机走最佳路,type为棋子颜色virtualvoidUnMakeMove(STONEMOVEmove);BYTECurPosition[GRID_NUM][GRID_NUM];//棋盘CMoveGenerator*m_pMG;//声明生成走法器已被定义CEveluation*m_pEval;//声明评估对象已被定义BOOLm_bGameOver;//游戏结束布尔型标记值STONEMOVEm_cmBestMove;intm_nMaxDepth;intm_nSearchDepth;};#endif----------------------------------------------------------------------------------------------------------------------//走法生成器类MoveGenerator.h:interfacefortheCMoveGeneratorclass.#include"Eveluation.h"#include"HistoryHeuristic.h"#include"NegaScout_TT_HH.h"#include"TranspositionTable.h"classCMoveGenerator{
public:CMoveGenerator();virtual~CMoveGenerator();intSort_CreatePossibleMove(BYTEposition[GRID_NUM][GRID_NUM],intnPly,intType);intCreatePossibleMove(BYTEposition[GRID_NUM][GRID_NUM],intnPly,intType);//此函数完成走法链,获得走法和相应//走法的价值,所有走法的价值经过从大到小的排序,显然m_MoveList[2][0]是最优走法BOOLIsValidPosition(BYTEposition[GRID_NUM][GRID_NUM],inti,intj);voidsort(intdepth,intn,intcount);STONEMOVEm_MoveList[7][40000];//三层走法链,在这里只进行第一层即一位数组m_MoveList[2]//很显然,对当前局面最多只有64980路走法protected:intm_nMoveCount;//获得搜索当前局面的走法总数CHistoryHeuristic*HistoryHeuristic;CEveluation*m_pEvel;//评估指针对象};#endif----------------------------------------------------------------------------------------------------------------------//置换表类TranspositionTable.h:interfacefortheCTranspositionTableclass.enumENTRY_TYPE{exact,lower_bound,upper_bound};typedefstructHASHITEM{LONGLONGchecksum;//orlonglongmightbeevenbetterENTRY_TYPEentry_type;shortdepth;inteval;}HashItem;classCTranspositionTable{public:CTranspositionTable();virtual~CTranspositionTable();voidCalculateInitHashKey(BYTECurPosition[GRID_NUM][GRID_NUM]);voidHash_MakeMove(STONEMOVEmove,inttype);voidHash_UnMakeMove(STONEMOVEmove,inttype);intLookUpHashTable(intalpha,intbeta,intdepth,intTableNo);voidEnterHashTable(ENTRY_TYPEentry_type,inteval,shortdepth,intTableNo);
UINTm_nHashKey32[2][GRID_NUM][GRID_NUM];//32位随机数组ULONGLONGm_ulHashKey64[2][GRID_NUM][GRID_NUM];//64位随机数组HashItem*m_pTT[2];voidInitializeHashKey();UINTm_HashKey32;LONGLONGm_HashKey64;};#endif----------------------------------------------------------------------------------------------------------------------//估值核心类Eveluation.h:interfacefortheCEveluationclass.externintScoreOfRoad[7];classCEveluation{public:CEveluation();virtual~CEveluation();intEveluate(BYTEposition[][GRID_NUM],intType,STONEMOVEm_cmLeafMove);//评估函数intNumberOfMyRoad[7];intNumberOfEnemyRoad[7];protected:BOOLIs_win(BYTEposition[][GRID_NUM],inti,intj,intType);BOOLAnalysisHorizon(BYTEposition[][GRID_NUM],intType);//水平方向价值BOOLAnalysisVertical(BYTEposition[][GRID_NUM],intType);//垂直方向价值BOOLAnalysisLeft(BYTEposition[][GRID_NUM],intType);//左斜方向价值BOOLAnalysisRight(BYTEposition[][GRID_NUM],intType);//右斜方向价值};#endif----------------------------------------------------------------------------------------------------------------------//NegamaxEngine.h:interfacefortheCNegamaxEngineclass.classCNegamaxEngine{public:CNegamaxEngine();virtual~CNegamaxEngine();};
#endif----------------------------------------------------------------------------------------------------------------------//Connect6Dlg.h:headerfile#include"define.h"#include"SearchEngine.h"#include"NegaScout_TT_HH.h"#include"stack"usingnamespacestd;classCConnect6Dlg:publicCDialog{public:CConnect6Dlg(CWnd*pParent=NULL);//standardconstructor//DialogData//{{AFX_DATA(CConnect6Dlg)enum{IDD=IDD_CONNECT6_DIALOG};CStaticm_OutputInfo;//}}AFX_DATA//ClassWizardgeneratedvirtualfunctionoverrides//{{AFX_VIRTUAL(CConnect6Dlg)protected:virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDVsupport//}}AFX_VIRTUAL//Implementationprotected:HICONm_hIcon;CToolBarm_toolBar;voidInvertRenjuBroad();//颠倒棋盘//Generatedmessagemapfunctions//{{AFX_MSG(CConnect6Dlg)virtualBOOLOnInitDialog();afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);afx_msgvoidOnPaint();afx_msgHCURSOROnQueryDragIcon();afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);afx_msgvoidOnNewStar();afx_msgvoidOnTakeBack();afx_msgvoidOnServiceFirst();afx_msgvoidOnClientLast();afx_msgvoidOnUnTackBack();afx_msgvoidOnExit();//}}AFX_MSG
DECLARE_MESSAGE_MAP();private:CBitmapm_BoardBmp;CBitmap*pOldBmp;//位图实例对象intcnt;BYTEm_RenjuBoard[GRID_NUM][GRID_NUM];//棋盘intm_nUserStoneColor;//使用者棋子颜色CSearchEngine*m_pSE;//搜索引擎指针对象STONEMOVEMovePoint;stackTakeBack;//悔棋用的栈stackUnTakeBack;STONEPOSJustMove;};//{{AFX_INSERT_LOCATION}}//MicrosoftVisualC++willinsertadditionaldeclarationsimmediatelybeforethepreviousline.#endif----------------------------------------------------------------------------------------------------------------------//宏定义文件define.h//datastructureandmacros#ifndefdefine_h_#definedefine_h_#defineBOARD_POS_X60//控制棋盘位置#defineBOARD_POS_Y60//控制棋盘位置#defineBOARD_WIDTH25//棋盘的宽#defineGRID_NUM19//棋盘的行数#defineGRID_COUNT361//棋盘总的格子数#defineBLACK7//黑棋#defineWHITE1//白棋#defineNOSTONE0//没有棋子#defineIsValidPos(x,y)((x>=0&&x=0&&y
#endif//define_h_----------------------------------------------------------------------------------------------------------------------#defineIDM_ABOUTBOX0x0010#defineIDD_ABOUTBOX100#defineIDS_ABOUTBOX101#defineIDD_CONNECT6_DIALOG102#defineIDD_NEWGAME103#defineIDR_MAINFRAME128#defineIDB_1129#defineIDR_MENU1130#defineIDB_BITMAP1131#defineIDR_newbar136#defineIDI_ICON1138#defineIDC_BLACKSTONE1000#defineIDC_WHITESTONE1001#defineIDC_EDIT11002#defineIDC_SPIN11003#defineIDC_TimeOut1004#defineID_NewStar32771#defineID_Exit32772#defineID_Star32773#defineID_HuiShuo32774#defineID_TakeBack32774#defineID_Stop32775#defineID_MENUITEM3277632776#defineID_ServiceFirst32777#defineID_ClientLast32778#defineID_UnTackBack32779//Nextdefaultvaluesfornewobjects#ifdefAPSTUDIO_INVOKED#ifndefAPSTUDIO_READONLY_SYMBOLS#define_APS_NEXT_RESOURCE_VALUE139#define_APS_NEXT_COMMAND_VALUE32796#define_APS_NEXT_CONTROL_VALUE1005#define_APS_NEXT_SYMED_VALUE104#endif----------------------------------------------------------------------------------------------------------------------//搜索引擎类NegaScout_TT_HH.h:interfacefortheCNegaScout_TT_HHclass.#include"SearchEngine.h"#include"TranspositionTable.h"#include"HistoryHeuristic.h"
classCNegaScout_TT_HH://继承以下类用于搜索publicCTranspositionTable,//换位表类publicCHistoryHeuristic,//历史启发式类publicCSearchEngine//搜索引擎类{public:CNegaScout_TT_HH();virtual~CNegaScout_TT_HH();virtualSTONEMOVESearchAGoodMove(BYTEposition[][GRID_NUM],intType);protected:intNegaScout(intdepth,intType,intalpha,intbeta);STONEMOVEm_cmLeafMove;};#endif----------------------------------------------------------------------------------------------------------------------//NewGame.h:headerfileclassCNewGame:publicCDialog{public:BOOLOnInitDialog();CNewGame(CWnd*pParent=NULL);//standardconstructorintGetSelectedPly(){returnm_nSelectedPly;};intGetStoneColor(){returnm_nStoneColor;};enum{IDD=IDD_NEWGAME};CSpinButtonCtrlm_SetPly;protected:intm_nSelectedPly;intm_nStoneColor;virtualvoidOnOK();afx_msgvoidOnBlackstone();afx_msgvoidOnWhitestone();DECLARE_MESSAGE_MAP()};#endif----------------------------------------------------------------------------------------------------------------------//历史启发类HistoryHeuristic.h:interfacefortheCHistoryHeuristicclass.classCHistoryHeuristic{public:CHistoryHeuristic();
virtual~CHistoryHeuristic();voidMergeSort(STONEMOVE*source,intn,booldirection);protected:voidMerge(STONEMOVE*source,STONEMOVE*target,intl,intm,intr);voidMergePass(STONEMOVE*source,STONEMOVE*target,constints,constintn,constbooldirection);voidMerge_A(STONEMOVE*source,STONEMOVE*target,intl,intm,intr);STONEMOVEm_TargetBuff[40000];};#endif----------------------------------------------------------------------------------------------------------------------//Connect6.h:mainheaderfilefortheCONNECT6application#include"resource.h"//mainsymbols#include"define.h"----------------------------------------------------------------------------------------------------------------------//CConnect6App:classCConnect6App:publicCWinApp{public:CConnect6App();virtualBOOLInitInstance();DECLARE_MESSAGE_MAP()};#endif----------------------------------------------------------------------------------------------------------------------//stdafx.h:includefileforstandardsystemincludefiles,#include//MFCcoreandstandardcomponents#include//MFCextensions#include//MFCAutomationclasses#include//MFCsupportforInternetExplorer4CommonControls#ifndef_AFX_NO_AFXCMN_SUPPORT#include//MFCsupportforWindowsCommonControls#endif//_AFX_NO_AFXCMN_SUPPORT#endif//实现文件//Connect6Dlg.cpp:implementationfile
分享到:
收藏