⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.cpp

📁 人工智能的相关程序
💻 CPP
字号:
// Display.cpp: implementation of the CDisplay class.
// CDisplay类实现文件
// 作者:刘志良
// 最后修改日期:2003年12月8日
////////////////////////////////////////////////

#include "stdafx.h"
#include "Display.h"

////////////////////
// 构造函数
////////////////////
CDisplay::CDisplay()
{
	this->m_bAnswer = false;
	this->m_NoteType = NotYet;
}

////////////////////
// 析构函数
////////////////////
CDisplay::~CDisplay()
{

}

//////////////////////////////////////////////////
// LoadData:载入状态
// 载入有两种方式:1.输入,2.复制已有状态
//////////////////////////////////////////////////
void CDisplay::LoadData(DataType Data,int i,int j)
{
	m_DispData[i][j] = Data;
}

void CDisplay::LoadData(CDisplay *Item)
{
	DataType Src[MaxItem][MaxItem];
	for(int i=0; i<MaxItem; i++)
	 for(int j=0; j<MaxItem; j++)
	 {
	  Src[i][j] = Item->GetDispData(i,j);
	  m_DispData[i][j] = Src[i][j];
	 }
}

////////////////////////////////////
// FindBlankPostion:寻找空白位的位置
////////////////////////////////////
void CDisplay::FindBlankPosition()
{
	m_BlankPosition = Position(65535,65535);
	for(int i=0; i<MaxItem; i++)
	 for(int j=0; j<MaxItem; j++) 
	  if(m_DispData[i][j] == Blank) 
		  m_BlankPosition = Position(i,j);	
}

////////////////////////////////////////////////////
// MoveBlank:移动空白位
// 用于复制已有状态到本身之后 移动空白位使产生新状态
// 参数:MoveDirection 移动方式
////////////////////////////////////////////////////
void CDisplay::MoveBlank(UINT MoveDirection)
{
	FindBlankPosition();
	Position TmpPos = m_BlankPosition;
	switch(MoveDirection)
	{
	case MoveLeft : TmpPos = m_BlankPosition-Position(0,1);break;
	case MoveRight : TmpPos = m_BlankPosition+Position(0,1);break;
	case MoveUp : TmpPos = m_BlankPosition-Position(1,0);break;
	case MoveDown : TmpPos = m_BlankPosition+Position(1,0);break;
	default : AfxMessageBox("ERROR MoveBlank");break;
	}
	DataType DataTemp = m_DispData[TmpPos.x][TmpPos.y];
	m_DispData[TmpPos.x][TmpPos.y] = m_DispData[m_BlankPosition.x][m_BlankPosition.y];
	m_DispData[m_BlankPosition.x][m_BlankPosition.y] = DataTemp;
} 

//////////////////////////////////////
// IsEuqal:两个状态是否相同
// 参数:目标节点Item
// 返回值:TRUE 相等 FALSE 不等
//////////////////////////////////////
BOOL CDisplay::IsEqual(CDisplay *Item)
{
	int k=0;
	DataType Src[MaxItem][MaxItem];
	for(int i=0; i<MaxItem; i++)
	 for(int j=0; j<MaxItem; j++)
	 {
	  Src[i][j] = Item->GetDispData(i,j);
	  if(Src[i][j] == m_DispData[i][j]) k++;
	 }
	if(k == MaxItem*MaxItem) return true;
	else return false;
}

////////////////////////////////////////////
// GetDispData:对外接口 取得当前位置的状态值
// 参数:位置变量i,j
////////////////////////////////////////////
DataType CDisplay::GetDispData(int i, int j)
{
	return m_DispData[i][j];
}

////////////////////////////////////////////////
// SetThisIsAAnswer: 对外接口 设置节点为正解节点
////////////////////////////////////////////////
void CDisplay::SetThisIsAAnswer()
{
	this->m_bAnswer = true;
}

////////////////////////////////////
// GetNoteType:对外接口 取得节点类型
////////////////////////////////////
UINT CDisplay::GetNoteType()
{
	return this->m_NoteType;
}

/////////////////////////////////////////
// SetNoteType:对外接口 设置节点类型
/////////////////////////////////////////
void CDisplay::SetNoteType(UINT noteType)
{
	this->m_NoteType = noteType;
}

/////////////////////////////////////
// SetCurrentG:对外接口 设置节点的G值
/////////////////////////////////////
void CDisplay::SetCurrentG(int CurG)
{
	this->m_CurrentG = CurG;
}

////////////////////////////////////
// GetCurrentG:对外接口 取得节点G值
////////////////////////////////////
int CDisplay::GetCurrentG()
{
	return this->m_CurrentG;
}

///////////////////////////////////////////////
// GetIsAAnswer:对外接口 取得节点是否是正解节点
///////////////////////////////////////////////
BOOL CDisplay::GetIsAAnswer()
{
	return this->m_bAnswer;
}

//////////////////////////////////////////
// SetCurrentCount:对外接口 设置节点记数值
//////////////////////////////////////////
void CDisplay::SetCurrentCount(int Count)
{
	this->m_CurrentCount = Count;
}

////////////////////////////////////////////
// GetCurrentCount:对外接口 设取得节点记数值
////////////////////////////////////////////
int CDisplay::GetCurrentCount()
{
	return this->m_CurrentCount;
}

////////////////////////////////////////////
// GetBlankPositin:对外接口 提交空白位的位置
////////////////////////////////////////////
Position CDisplay::GetBlankPosition()
{
	FindBlankPosition();
	return m_BlankPosition;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -