00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "FinderField.h"
00010
00011 #include "V2.h"
00012
00013 #include <string.h>
00014
00015
00016
00017
00018
00019 FinderField::FinderField(int w, int h)
00020 {
00021 m_w = w;
00022 m_h = h;
00023
00024
00025 m_closed = new bool*[m_h];
00026 for (int y = 0; y < m_h; ++y) {
00027 m_closed[y] = new bool[m_w];
00028 memset(m_closed[y], false, sizeof(bool) * m_w);
00029 }
00030 }
00031
00032 FinderField::~FinderField()
00033 {
00034 for (int y = 0; y < m_h; ++y) {
00035 delete[] m_closed[y];
00036 }
00037 delete[] m_closed;
00038 }
00039
00040
00041
00042
00043 void
00044 FinderField::reset()
00045 {
00046 for (int y = 0; y < m_h; ++y) {
00047 memset(m_closed[y], false, sizeof(bool) * m_w);
00048 }
00049 }
00050
00051
00052
00053
00054 void
00055 FinderField::markClosed(const V2 &loc)
00056 {
00057 int x = loc.getX();
00058 int y = loc.getY();
00059
00060 if ((0 <= x && x < m_w) && (0 <= y && y < m_h)) {
00061 m_closed[y][x] = true;
00062 }
00063 }
00064
00065
00066
00067
00068
00069 bool
00070 FinderField::isClosed(const V2 &loc) const
00071 {
00072 int x = loc.getX();
00073 int y = loc.getY();
00074
00075 bool result = true;
00076 if ((0 <= x && x < m_w) && (0 <= y && y < m_h)) {
00077 result = m_closed[y][x];
00078 }
00079 return result;
00080 }
00081
00082