You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

189 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#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;
// }
}