• 大小: 4.03MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-28
  • 语言: C/C++
  • 标签:

资源简介

基于MFC的五子棋程序,里面有人人和人机对弈模式,AI水平还不错,可以下载参考啦,里面是一个完整的工程,代码后面有足够详细的注释

资源截图

代码片段和文件信息

#include “StdAfx.h“
#include “FiveChess.h“

CFiveChess::CFiveChess()
{
m_nCount=0;
}
void CFiveChess::InitArr()
{
for(int i=0;i {
for(int j=0;j {
m_cArr[i][j]=SPACE; //初始化为空格
}
}
m_nCount=0;
}
void CFiveChess::SetArr(int rowint colchar cChess)
{
m_cArr[row][col]=cChess;
}
char CFiveChess::GetArr(int rowint col)
{
return m_cArr[row][col];
}
void CFiveChess::SetCurrentPoint(int rowint col)
{
m_nCurrentX=row;
m_nCurrentY=col;
}
/*
返回:
棋子符号(CHESS_BLACK)‘B‘ 表示黑方胜,
棋子符号(CHESS_WHITE)‘W‘ 表示白方胜,
等于(PEACE)‘=‘ 表示和棋
空格(SPACE)‘ ‘ 表示尚未分出胜负。
*/

//胜负判断实际上是据当前最后一个落子的情况来判断胜负的这也是为什么添加m_nCurrentXm_nCurrentY的原因
//实际上需要从四个位置判断,以该子为出发点的水平,竖直和两条分别为 45度角和135度角的线,
//目的是看在这四个方向是否最后落子的一方构成连续五个的棋子,如果是的话,就表示该盘棋局已经分出胜负。
//所以没必要进行全盘搜索

char CFiveChess::JudegeWin(char cChessFlag) 
{
int nRownCol;
int num1num2;
//判断横向
num1=0;num2=0;
for(nCol=m_nCurrentY-1;nCol>=0 && nCol>=m_nCurrentY-4;nCol--) //左边
if(m_cArr[m_nCurrentX][nCol]==cChessFlag)
num1++;
else
break;
for(nCol=m_nCurrentY+1;nCol if(m_cArr[m_nCurrentX][nCol]==cChessFlag)
num2++;
else 
break;
if(num1+num2>=4)//左右两边相加大于等于4就说明满5了下同
return cChessFlag;
//判断纵向
num1=0;num2=0;
for(nRow=m_nCurrentX-1;nRow>=0 && nRow>=m_nCurrentX-4;nRow--)//上
if(m_cArr[nRow][m_nCurrentY]==cChessFlag)
num1++;
else
break;
for(nRow=m_nCurrentX+1;nRow if(m_cArr[nRow][m_nCurrentY]==cChessFlag)
num2++;
else
break;
if(num1+num2>=4)
return cChessFlag;
//判断‘\‘方向
num1=0;num2=0;
for(nRow=m_nCurrentX-1nCol=m_nCurrentY-1;nRow>=0 && nRow>=m_nCurrentX-4 && nCol>=0 && nCol>=m_nCurrentY-4;nRow--nCol--)//左上
if(m_cArr[nRow][nCol]==cChessFlag)
num1++;
else
break;
for(nRow=m_nCurrentX+1nCol=m_nCurrentY+1;nRow if(m_cArr[nRow][nCol]==cChessFlag)
num2++;
else
break;
if(num1+num2>=4)
return cChessFlag;
//判断‘/‘方向
num1=0;num2=0;
for(nRow=m_nCurrentX-1nCol=m_nCurrentY+1;nRow>=0 && nRow>=m_nCurrentX-4 && nCol if(m_cArr[nRow][nCol]==cChessFlag)
num1++;
else
break;
for(nRow=m_nCurrentX+1nCol=m_nCurrentY-1;nRow=0 && nCol>=m_nCurrentY-4;nRow++nCol--)//左下
if(m_cArr[nRow][nCol]==cChessFlag)
num2++;
else
break;
if(num1+num2>=4)
return cChessFlag;

if(m_nCount return SPACE;
return CHESS_PEACE; //在判断了其他情况后还未返回就是和棋了
}

//以下是人机对战函数
void CFiveChess::ComputerPlay(char cComputerchar cPeople)
{
int maxComputer=0maxPeople=0;//计算机和人的状态矩阵的最大值
//(即maxComputer是计算机最有价值点的值,maxPeople是人最有价值点的值初始化为0
int nRownCol;
int cxcypxpy;
for(nRow=0;nRow for(nCol=0;nCol  computer[nRow][nCol]=people[nRow

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

     文件     614400  2012-02-03 19:20  五子棋.exe

     文件      28415  2012-02-03 19:23  五子棋\Debug\FiveChess.obj

     文件      13280  2012-02-03 19:23  五子棋\Debug\FiveChess.sbr

     文件       3806  2012-02-03 19:23  五子棋\Debug\FivePos.obj

     文件        562  2012-02-03 19:23  五子棋\Debug\FivePos.sbr

     文件      19392  2012-02-03 19:23  五子棋\Debug\MainFrm.obj

     文件       3622  2012-02-03 19:23  五子棋\Debug\MainFrm.sbr

     文件        760  2012-01-27 23:02  五子棋\Debug\MAP_PP.sbr

     文件     105882  2012-02-03 19:23  五子棋\Debug\StdAfx.obj

     文件    1375299  2012-02-03 19:23  五子棋\Debug\StdAfx.sbr

     文件     230400  2012-02-03 19:23  五子棋\Debug\vc60.idb

     文件     397312  2012-02-03 19:23  五子棋\Debug\vc60.pdb

     文件    3269632  2012-01-29 01:10  五子棋\Debug\五子棋.bsc

     文件     495701  2012-02-03 19:23  五子棋\Debug\五子棋.exe

     文件     358588  2012-02-03 19:23  五子棋\Debug\五子棋.ilk

     文件      23032  2012-02-03 19:23  五子棋\Debug\五子棋.obj

     文件    6882088  2012-02-03 19:23  五子棋\Debug\五子棋.pch

     文件     377856  2012-02-03 19:23  五子棋\Debug\五子棋.pdb

     文件     278824  2012-02-03 19:23  五子棋\Debug\五子棋.res

     文件       8923  2012-02-03 19:23  五子棋\Debug\五子棋.sbr

     文件      14820  2012-02-03 19:23  五子棋\Debug\五子棋Doc.obj

     文件       7118  2012-02-03 19:23  五子棋\Debug\五子棋Doc.sbr

     文件      76212  2012-02-03 19:23  五子棋\Debug\五子棋View.obj

     文件      96355  2012-02-03 19:23  五子棋\Debug\五子棋View.sbr

     文件      25028  2012-02-01 15:16  五子棋\FiveChess.cpp

     文件       2261  2012-02-01 13:46  五子棋\FiveChess.h

     文件        213  2012-01-23 21:11  五子棋\FivePos.cpp

     文件        175  2012-01-23 21:14  五子棋\FivePos.h

     文件       2596  2012-01-26 16:31  五子棋\MainFrm.cpp

     文件       1581  2012-01-28 17:13  五子棋\MainFrm.h

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

评论

共有 条评论

相关资源