www.pudn.com > linkfive.rar > Wzq.cpp


// Wzq.cpp: implementation of the CWzq class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "LinkF.h" 
#include "Wzq.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CWzq::CWzq() 
{ 
	m_nOver = 0; 
} 
 
CWzq::~CWzq() 
{ 
	delete [] PlayerScore; 
	delete [] ComputerScore; 
 
	for (int i = 0;i < m_nWidth;i++) 
		delete [] Board[i]; 
	delete [] Board; 
 
	for (i = 0;i < m_nWidth;i++) 
	{ 
		 
		for (int j = 0;j < m_nHeight;j++) 
		{ 
			delete [] PlayerTable[i][j]; 
			delete [] ComputerTable[i][j]; 
		} 
 
		delete [] PlayerTable[i]; 
		delete [] ComputerTable[i]; 
	} 
	delete [] PlayerTable; 
	delete [] ComputerTable; 
} 
void CWzq::ComputerThinking(int &o_nX, int &o_nY) 
{ 
	int PlayerGrade=0; 
	int ComputerGrade=0; 
	int ComputerX; 
	int ComputerY; 
	int i,j,k,mat,nat,mde,nde; 
 
	int** PlayerGrades;//[NUM][NUM],[NUM][NUM]; 
	int** ComputerGrades; 
	PlayerGrades = (int**) new int*[m_nWidth]; 
	for ( i = 0; i < m_nWidth;i++) 
		PlayerGrades[i] = new int[m_nHeight]; 
 
	ComputerGrades = (int**) new int*[m_nWidth]; 
	for (i = 0; i < m_nWidth;i++) 
		ComputerGrades[i] = new int[m_nHeight]; 
 
	for (i = 0;i < m_nWidth;i++) 
		for ( j = 0;j < m_nHeight;j++) 
			ComputerGrades[i][j] = PlayerGrades[i][j] = 0; 
 
	for(i=0;i<19;i++) 
		for(j=0;j<19;j++) 
		{ 
			PlayerGrades[i][j]=0; 
			if(Board[i][j]==0) 
				for(k=0;k<1020;k++) 
					if(PlayerTable[i][j][k]) 
					{ 
						switch(PlayerScore[k]) 
						{ 
						case 1: 
							PlayerGrades[i][j]+=5; 
							break; 
						case 2: 
							PlayerGrades[i][j]+=50; 
							break; 
						case 3: 
							PlayerGrades[i][j]+=500; 
							break; 
						case 4: 
							PlayerGrades[i][j]+=5000; 
							break; 
						} 
					} 
		} 
	for(i=0;i<19;i++) 
		for(j=0;j<19;j++) 
		{ 
			ComputerGrades[i][j]=0; 
			if(Board[i][j]==0) 
				for(k=0;k<1020;k++) 
					if(ComputerTable[i][j][k]) 
					{ 
						switch(ComputerScore[k]) 
						{ 
						case 1: 
							ComputerGrades[i][j]+=5; 
							break; 
						case 2: 
							ComputerGrades[i][j]+=50; 
							break; 
						case 3: 
							ComputerGrades[i][j]+=500; 
							break; 
						case 4: 
							ComputerGrades[i][j]+=500000; 
							break; 
						} 
					} 
		} 
	for(i=0;i<19;i++) 
			for(j=0;j<19;j++) 
				if(Board[i][j]==0) 
				{ 
					if(ComputerGrades[i][j]>=ComputerGrade) 
					{ 
						ComputerGrade=ComputerGrades[i][j]; 
						mat=i; 
						nat=j; 
					} 
					if(PlayerGrades[i][j]>=PlayerGrade) 
					{ 
						PlayerGrade=PlayerGrades[i][j]; 
						mde=i; 
						nde=j; 
					} 
				} 
	if(ComputerGrade>=PlayerGrade) 
		{ 
			ComputerX=mat; 
			ComputerY=nat; 
		} 
		else 
		{ 
			ComputerX=mde; 
			ComputerY=nde; 
		} 
 
	o_nX = ComputerX; 
	o_nY = ComputerY; 
	for (i = 0;i < m_nWidth;i++) 
	{ 
		delete [] PlayerGrades[i]; 
		delete [] ComputerGrades[i]; 
	} 
	delete [] PlayerGrades; 
	delete [] ComputerGrades; 
 
} 
 
void CWzq::PlayerDo(const int &i_nX, const int i_nY) 
{ 
	int PlayerX = i_nX; 
	int PlayerY = i_nY; 
	Board[PlayerX][PlayerY]=1; 
 
	int i; 
	for(i=0;i