001 import java.io.*;
002 import java.lang.*;
003 import java.util.*;
004
005
006 public class Node {
007 private int iTop=-1,iRight=-1,iBottom=-1,iLeft=-1;
008 private Point pPoint;
009 private int iG=0, iH=0;
010 private double dF;
011 private Node nParent;
012
013 /**
014 * The no-arg constructor only declares the coordinates.
015 */
016 public Node(){
017 pPoint = new Point();
018 }
019
020
021 public Node(Node _nNode){
022 pPoint.x = _nNode.getX();
023 pPoint.y = _nNode.getY();
024 iG = _nNode.getG();
025 iH = _nNode.getH();
026 nParent = _nNode.getParent();
027 iTop = _nNode.getTop();
028 iRight = _nNode.getRight();
029 iBottom = _nNode.getBottom();
030 iLeft = _nNode.getLeft();
031 }
032
033 /**
034 * Instantiates the coordinates of the Node.
035 *
036 * @param _pPoint location of the gridcoordinate
037 */
038 public Node(Point _pPoint){
039 pPoint = new Point();
040 pPoint.x = _pPoint.x;
041 pPoint.y = _pPoint.y;
042 pPoint.z = 0;
043 }
044
045 /**
046 * Instantiates the coordinates of the Node.
047 *
048 * @param _iX the X value of the coordinate
049 * @param _iY the Y value of the coordinate
050 */
051 public Node(int _iX, int _iY){
052 pPoint = new Point();
053 pPoint.x = _iX;
054 pPoint.y = _iY;
055 }
056
057 /**
058 * The full contructor, instantiates the coordinate and wall booleans on the four side's of the coordinate
059 * @param _pPoint location of the gridcoordinate
060 * @param _iTop Wall yes or no at Top of gridcoordinate
061 * @param _iRight Wall yes or no at Right of gridcoordinate
062 * @param _iBottom Wall yes or no at Bottom of gridcoordinate
063 * @param _iLeft Wall yes or no at Left of gridcoordinate
064 */
065 public Node(Point _pPoint,int _iTop,int _iRight,int _iBottom,int _iLeft){
066 pPoint = new Point();
067 pPoint.x = _pPoint.x;
068 pPoint.x = _pPoint.x;
069 iTop = _iTop;
070 iBottom = _iBottom;
071 iRight = _iRight;
072 iLeft = _iLeft;
073 }
074
075 /**
076 * The full contructor, instantiates the coordinate and wall booleans on the four side's of the coordinate
077 * @param _iX the X value of the coordinate
078 * @param _iY the Y value of the coordinate
079 * @param _iTop Wall yes or no at Top of gridcoordinate
080 * @param _iRight Wall yes or no at Right of gridcoordinate
081 * @param _iBottom Wall yes or no at Bottom of gridcoordinate
082 * @param _iLeft Wall yes or no at Left of gridcoordinate
083 */
084 public Node(int _iX, int _iY, int _iTop,int _iRight,int _iBottom,int _iLeft){
085 pPoint = new Point();
086 pPoint.x = _iX;
087 pPoint.y = _iY;
088 iTop = _iTop;
089 iBottom = _iBottom;
090 iRight = _iRight;
091 iLeft = _iLeft;
092 }
093
094
095
096 /**
097 * Checks wheter two Nodes have the same Coordinate
098 * @param _nNode The Node that the current Node is compared with
099 * @return true if the coordinates are the same
100 */
101 public boolean isPointEqual(Node _nNode){
102 if((pPoint.x == _nNode.getX()) && (pPoint.y == _nNode.getY())){
103 return true;
104 }
105 return false;
106 }
107
108 /**
109 * Checks wheter a border exist at a given loaction
110 * @param _iDirection The direction we are looking at (1=top,2=right,3=left,4=left)
111 * @return true if the border exists
112 */
113 public int borderValue(int _iDirection){
114 if(_iDirection == 0){return iTop;}
115 else if(_iDirection == 1){return iRight;}
116 else if(_iDirection == 2){return iBottom;}
117 else if(_iDirection == 3){return iLeft;}
118 return -2;
119 }
120
121
122 public boolean allBordersKnown() {
123 return ((iTop!=-1) && (iRight!=-1) && (iBottom!=-1) && (iLeft!=-1));
124 }
125
126 public int bordersUnknownCount() {
127 int i=0;
128 if(iTop== -1) i++;
129 if(iRight== -1) i++;
130 if(iBottom== -1) i++;
131 if(iLeft== -1) i++;
132 return i;
133 }
134
135 public int bordersFalseCount() {
136 int i=0;
137 if(iTop<= 0) i++;
138 if(iRight<= 0) i++;
139 if(iBottom<= 0) i++;
140 if(iLeft<= 0) i++;
141 return i;
142 }
143
144 /*----------- GETTERS ----------- */
145 /**
146 * @return The integer X coordinate
147 */
148 public int getX() {
149 return (int)pPoint.x;
150 }
151
152 /**
153 * @return The integer Y coordinate
154 */
155 public int getY() {
156 return (int)pPoint.y;
157 }
158
159 /**
160 * @return The integer h(n) value
161 */
162 public int getH() {
163 return iH;
164 }
165
166 /**
167 * @return The integer g(n) value
168 */
169 public int getG() {
170 return iG;
171 }
172
173
174 /**
175 * @return The integer f(n) value
176 */
177 public double getF() {
178 dF = iG+iH;
179 return dF;
180 }
181
182 /**
183 * @return The int value containing a wall at Topside of the coordinaat
184 */
185 public int getTop(){
186 return iTop;
187 }
188
189 /**
190 * @return The int value containing a wall at Rightside of the coordinaat
191 */
192 public int getRight(){
193 return iRight;
194 }
195
196 /**
197 * @return The int value containing a wall at Bottomside of the coordinaat
198 */
199 public int getBottom(){
200 return iBottom;
201 }
202
203 /**
204 * @return The int value containing a wall at Leftside of the coordinaat
205 */
206 public int getLeft(){
207 return iLeft;
208 }
209
210 /**
211 * @return The parent-Node
212 */
213 public Node getParent(){
214 return nParent;
215 }
216
217
218 /*----------- SETTERS ----------- */
219 /**
220 * Sets the X coordinate
221 * @param _iX the X value of the coordinate
222 */
223 public void setX(int _iX) {
224 pPoint.x = _iX;
225 }
226
227 /**
228 * Sets the Y coordinate
229 * @param _iY the Y value of the coordinate
230 */
231 public void setY(int _iY) {
232 pPoint.y = _iY;
233 }
234
235 /**
236 * Sets the Wall yes or no at Top of gridcoordinate
237 * @param _iTop Wall yes or no at Top of gridcoordinate
238 */
239 public void setBorder(int _iDirection, int _iValue) {
240 if(_iDirection == 0){iTop = _iValue;}
241 if(_iDirection == 1){iRight = _iValue;}
242 if(_iDirection == 2){iBottom = _iValue;}
243 if(_iDirection == 3){iLeft = _iValue;}
244 }
245
246 /**
247 * Sets the Wall yes or no at Top of gridcoordinate
248 * @param _iTop Wall yes or no at Top of gridcoordinate
249 */
250 public void setTop(int _iTop) {
251 iTop = _iTop;
252 }
253
254 /**
255 * Sets the Wall yes or no at Right of gridcoordinate
256 * @param _iRight Wall yes or no at Right of gr_iTopidcoordinate
257 */
258 public void setRight(int _iRight) {
259 iRight = _iRight;
260 }
261
262 /**
263 * Sets the Wall yes or no at Bottom of gridcoordinate
264 * @param _iBottom Wall yes or no at Bottom of gridcoordinate
265 */
266 public void setBottom(int _iBottom) {
267 iBottom = _iBottom;
268 }
269
270 /**
271 * Sets the Wall yes or no at Left of gridcoordinate
272 * @param _iLeft Wall yes or no at Left of gridcoordinate
273 */
274 public void setLeft(int _iLeft) {
275 iLeft = _iLeft;
276 }
277
278 /**
279 * Sets the g(n) value
280 * @param _iG g(n)
281 */
282 public void setG(int _iG) {
283 iG = _iG;
284 }
285
286 /**
287 * Sets the h(n) value
288 * @param _iH h(n)
289 */
290 public void setH(int _iH) {
291 iH = _iH;
292 }
293 /**
294 * Sets the parent Node value
295 * @param p A Node holding the parent-Node
296 */
297 public void setParent(Node _nNode) {
298 nParent = _nNode;
299 }
300
301
302 /**
303 * @return A String with the coordinates placed in brackets.
304 */
305 public String toString(){
306 return "[ " + pPoint.x + ", " + pPoint.y + " ]";
307 }
308
309
310 }