|
|
#include "map.h"
|
|
|
|
|
|
Map::Map(IMAGE* floor):floor(floor)
|
|
|
{
|
|
|
map = new char[MAP_CNT];
|
|
|
for (int i = 0; i < MAP_CNT; i++)
|
|
|
map[i] = 0;
|
|
|
}
|
|
|
|
|
|
void Map::SetMap(int column, int row, char data)
|
|
|
{
|
|
|
map[row * MAP_COLUMN + column] = data;
|
|
|
}
|
|
|
|
|
|
char Map::GetMap(int column, int row)
|
|
|
{
|
|
|
if (row < 0 || row >= MAP_ROW || column < 0 || column >= MAP_COLUMN)
|
|
|
return -1;
|
|
|
else
|
|
|
return map[row * MAP_COLUMN + column];
|
|
|
}
|
|
|
|
|
|
bool Map::IsEmpty()
|
|
|
{
|
|
|
for (int i = 0; i < MAP_CNT; i++)
|
|
|
{
|
|
|
if (map[i] == 1 || map[i] == 2)
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
void Map::ClearBean(int column, int row)
|
|
|
{
|
|
|
if (row < 0 || row >= MAP_ROW || column < 0 || column >= MAP_COLUMN)
|
|
|
return;
|
|
|
|
|
|
int d = map[row * MAP_COLUMN + column];
|
|
|
if (d == 1 || d == 2)
|
|
|
{
|
|
|
SetMap(column, row, 0);
|
|
|
|
|
|
SetWorkingImage(floor);
|
|
|
|
|
|
setfillcolor(BLACK);
|
|
|
|
|
|
int draw_x, draw_y;
|
|
|
draw_x = column * MAP_SIZE + MAP_SIZE / 2;
|
|
|
draw_y = row * MAP_SIZE + MAP_SIZE / 2;
|
|
|
solidcircle(draw_x, draw_y, POINT_BIG_SIZE);
|
|
|
|
|
|
SetWorkingImage(NULL);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void Map::DrawFloor()
|
|
|
{
|
|
|
SetWorkingImage(floor);
|
|
|
|
|
|
setlinecolor(BLUE);
|
|
|
POINT* ps = new POINT[2];
|
|
|
for (int i = 0; i < MAP_ROW; i++)
|
|
|
{
|
|
|
ps[0].y = i * MAP_SIZE + MAP_SIZE / 2;
|
|
|
ps[1].y = i * MAP_SIZE + MAP_SIZE / 2;
|
|
|
for (int j = 0; j < MAP_COLUMN - 1; j++)
|
|
|
{
|
|
|
int k = i * MAP_COLUMN + j;
|
|
|
if (map[k] == 3 && map[k + 1] == 3)
|
|
|
{
|
|
|
ps[0].x = j * MAP_SIZE + MAP_SIZE / 2;
|
|
|
ps[1].x = (j + 1) * MAP_SIZE + MAP_SIZE / 2;
|
|
|
polyline(ps, 2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
for (int i = 0; i < MAP_COLUMN; i++)
|
|
|
{
|
|
|
ps[0].x = i * MAP_SIZE + MAP_SIZE / 2;
|
|
|
ps[1].x = i * MAP_SIZE + MAP_SIZE / 2;
|
|
|
for (int j = 0; j < MAP_ROW - 1; j++)
|
|
|
{
|
|
|
int k = j * MAP_COLUMN + i;
|
|
|
if (map[k] == 3 && map[k + MAP_COLUMN] == 3)
|
|
|
{
|
|
|
ps[0].y = j * MAP_SIZE + MAP_SIZE / 2;
|
|
|
ps[1].y = (j + 1) * MAP_SIZE + MAP_SIZE / 2;
|
|
|
polyline(ps, 2);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
int draw_x, draw_y, size;
|
|
|
for (int i = 0; i < MAP_CNT; i++)
|
|
|
{
|
|
|
draw_y = (i / MAP_COLUMN) * MAP_SIZE + MAP_SIZE / 2;
|
|
|
draw_x = (i % MAP_COLUMN) * MAP_SIZE + MAP_SIZE / 2;
|
|
|
|
|
|
switch (map[i])
|
|
|
{
|
|
|
case 1: setfillcolor(WHITE); size = POINT_SIZE; break;
|
|
|
case 2: setfillcolor(YELLOW); size = POINT_BIG_SIZE; break;
|
|
|
default:
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
solidcircle(draw_x, draw_y, size);
|
|
|
|
|
|
}
|
|
|
|
|
|
SetWorkingImage(NULL);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Map::Test()
|
|
|
{
|
|
|
fstream f;
|
|
|
f.open("image/data.txt", ios::in);
|
|
|
//<2F>ļ<EFBFBD><C4BC><EFBFBD>ʽѡ<CABD>
|
|
|
//<2F><>ios::in<69><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>= 0x01,<2C><>//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(ifstreamĬ<6D>ϵĴ<C4B4>ʽ)
|
|
|
//<2F><>ios::out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x02,<2C><>//<2F><>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B4B4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>(ofstreamĬ<6D>ϵĴ<C4B4>ʽ)
|
|
|
//<2F><>ios::ate<74><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x04,<2C><>//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ɸı<C9B8>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>in<69><6E>out<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
//<2F><>ios::app<70><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD> = 0x08,<2C><>//<2F><>д<EFBFBD><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B4B4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>ݺ<EFBFBD>д<EFBFBD><D0B4><EFBFBD>µ<EFBFBD><C2B5><EFBFBD><EFBFBD>ݣ<EFBFBD>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
//<2F><>ios::trunc<6E><63><EFBFBD><EFBFBD> = 0x10,<2C><>//<2F>ڶ<EFBFBD>дǰ<D0B4>Ƚ<EFBFBD><C8BD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ƚض<C8BD>Ϊ0<CEAA><30>Ĭ<EFBFBD>ϣ<EFBFBD>
|
|
|
//<2F><>ios::nocreate<74><65>= 0x20,<2C><>//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACB3><EFBFBD>in<69><6E>app<70><70><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
//<2F><>ios::noreplace = 0x40,<2C><>//<2F>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F3A3ACB3><EFBFBD>out<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
//<2F><>ios::binary<72><79><EFBFBD><EFBFBD>= 0x80<38><30> //<2F><><EFBFBD><EFBFBD><EFBFBD>Ƹ<EFBFBD>ʽ<EFBFBD>ļ<EFBFBD>
|
|
|
|
|
|
if (!f)
|
|
|
{
|
|
|
//cout << "<22><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>" << endl;
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
//<2F><><EFBFBD>ֽڶ<D6BD><DAB6>벢<EFBFBD><EBB2A2><EFBFBD><EFBFBD>
|
|
|
char ch;
|
|
|
int i = 0, j = 0;
|
|
|
while (EOF != (ch = f.get()))
|
|
|
{
|
|
|
if (ch == ' ')
|
|
|
continue;
|
|
|
else if (ch == '\n')
|
|
|
{
|
|
|
i++;
|
|
|
j = 0;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
SetMap(j, i, ch - '0');
|
|
|
j++;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
f.close();
|
|
|
|
|
|
// string map_str =
|
|
|
//"3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 \
|
|
|
//3 1 1 1 1 1 1 3 1 1 1 1 1 1 3 \
|
|
|
//3 1 3 3 1 3 1 3 1 3 3 1 3 1 3 \
|
|
|
//3 1 3 3 1 1 1 1 1 1 1 1 3 1 3 \
|
|
|
//3 1 3 3 1 3 1 3 3 3 1 3 3 1 3 \
|
|
|
//3 1 1 1 1 3 1 1 1 1 1 3 3 1 3 \
|
|
|
//3 1 3 1 3 3 3 1 3 3 1 1 1 1 3 \
|
|
|
//3 1 3 1 3 3 3 1 3 3 1 3 3 1 3 \
|
|
|
//3 1 1 1 1 1 1 1 1 1 1 1 1 1 3 \
|
|
|
//3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 \
|
|
|
//e";
|
|
|
// int k = 0;
|
|
|
// int len = map_str.length();
|
|
|
// for (int i = 0; i <len; i++)
|
|
|
// {
|
|
|
// if (map_str[i] == 'e')
|
|
|
// break;
|
|
|
// if (map_str[i] == ' ')
|
|
|
// continue;
|
|
|
// if (map_str[i] == '3')
|
|
|
// map[k++] = 3;
|
|
|
// else if (map_str[i] == '1')
|
|
|
// map[k++] = 1;
|
|
|
// else
|
|
|
// map[k++] = 0;
|
|
|
// }
|
|
|
} |