-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDisplay.cpp
180 lines (161 loc) · 4.6 KB
/
Display.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// 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;
}