【VC开源代码栏目提醒】:网学会员,鉴于大家对VC开源代码十分关注,论文会员在此为大家搜集整理了“AI.CPP”一文,供大家参考学习!
// AI.cpp: implementation of the AI class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "AI.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
AI::AI()
{ // 0 - 4
// 0 5 15000 15000 15000
// 5 - 8
// 100 3000 5000 100
// 9 - 12
// 500 1500 500 100
// 13 - 17
// 5000 500 100 30 6
m_pParentWnd=NULL;
for (int i=0; i<FIVE_Y; i++)
for (int j=0; j<FIVE_X; j++)
m_nboard[i][j] = FIVE_NULL;
}
AI::~AI()
{
}
BOOL AI::IfWin(char nSide)
{
int x, y;
// -
for(y=0; y<FIVE_Y; y++)
for(x=0; x<FIVE_X-4; x++)
if( m_nboard[x ][y] == nSide &&
m_nboard[x+1][y] == nSide &&
m_nboard[x+2][y] == nSide &&
m_nboard[x+3][y] == nSide &&
m_nboard[x+4][y] == nSide )
return TRUE;
// |
for(y=0; y<FIVE_Y-4; y++)
for(x=0; x<FIVE_X; x++)
if( m_nboard[x][y ] == nSide &&
m_nboard[x][y+1] == nSide &&
m_nboard[x][y+2] == nSide &&
m_nboard[x][y+3] == nSide &&
m_nboard[x][y+4] == nSide )
return TRUE;
// /
for(y=4; y<FIVE_Y; y++)
for(x=0; x<FIVE_X-4; x++)
if( m_nboard[x ][y ] == nSide &&
m_nboard[x+1][y-1] == nSide &&
m_nboard[x+2][y-2] == nSide &&
m_nboard[x+3][y-3] == nSide &&
m_nboard[x+4][y-4] == nSide )
return TRUE;
/* \ */
for(y=0; y<FIVE_Y-4; y++)
for(x=0; x<FIVE_X-4; x++)
if( m_nboard[x ][y ] == nSide &&
m_nboard[x+1][y+1] == nSide &&
m_nboard[x+2][y+2] == nSide &&
m_nboard[x+3][y+3] == nSide &&
m_nboard[x+4][y+4] == nSide )
return TRUE;
return FALSE;
}
void AI::Think(int nSteps, char nSide)
{
int x,y;
int nx, ny;
/*
nSteps--;
if(nSteps==0) return;//the last step
for(int j=0; j<FIVE_X; j++)
for(int k=0; k<FIVE_Y; k++)
if(m_nboard[j][k]==FIVE_NULL){
m_nboard[j][k]=nSide;
Think(0, nSide);
m_nboard[j][k]=FIVE_NULL;
}
*/
//set normal region
for(x=0; x<FIVE_X; x++)
for(y=0; y<FIVE_Y; y++)
m_nVals[x][y]=2;
//set weak region
for(x=0; x<FIVE_X; x++){
m_nVals[x][0]=m_nValuesSetting[0];
m_nVals[x][FIVE_Y-1]=m_nValuesSetting[0];
}
for(y=0; y<FIVE_Y; y++){
m_nVals[0][y]=m_nValuesSetting[0];
m_nVals[FIVE_X-1][y]=m_nValuesSetting[0];
}
//set strong point
nx=(FIVE_X-1)/3;
ny=(FIVE_Y-1)/3;
for(x=nx; x<FIVE_X-3; x+=nx)
for(y=ny; y<FIVE_Y-3; y+=ny){
m_nVals[x][y]=m_nValuesSetting[1];
}
//attack * 3
for(x=0; x<3; x++){
Think00(nSide); Think01(nSide);
Think02(nSide); Think03(nSide);
Think04(nSide); Think05(nSide);
Think06(nSide); Think07(nSide);
Think08(nSide); Think09(nSide);
Think10(nSide); Think11(nSide);
}
nSide = nSide==FIVE_WHITE?FIVE_BLACK:FIVE_WHITE;
//defend * 2
for(x=0; x<2; x++){
Think00(nSide); Think01(nSide);
Think02(nSide); Think03(nSide);
Think04(nSide); Think05(nSide);
Think06(nSide); Think07(nSide);
Think08(nSide); Think09(nSide);
Think10(nSide); Think11(nSide);
}
}
void AI::SetParentWnd(CWnd *pWnd)
{
m_pParentWnd=pWnd;
}
void AI::BestPos(int &x, int &y)
{
int nx,ny;
int i,j;
for(i=0; i<FIVE_X; i++)
for(j=0; j<FIVE_Y; j++)
if(m_nboard[i][j]==FIVE_NULL){
nx=i; ny=j;
i=FIVE_X;//exit right now
j=FIVE_Y;
}
for(i=0; i<FIVE_X; i++)
for(j=0; j<FIVE_Y; j++){
if(m_nVals[i][j]>m_nVals[nx][ny] && m_nboard[i][j]==FIVE_NULL)
{nx=i; ny=j;}
else if (m_nVals[i][j]==m_