za

Fork of m3pi by Chris Styles

Committer:
s4stevo
Date:
Sat Nov 16 01:24:57 2013 +0000
Revision:
14:4739a7ef4251
Parent:
13:f55ec972be61
25

Who changed what in which revision?

UserRevisionLine numberNew contents of line
s4stevo 11:d6f259026b7c 1
s4stevo 11:d6f259026b7c 2
s4stevo 11:d6f259026b7c 3
s4stevo 11:d6f259026b7c 4 enum WALLS
s4stevo 11:d6f259026b7c 5 {
s4stevo 11:d6f259026b7c 6 EMPTY = 0x00,
s4stevo 11:d6f259026b7c 7 RIGHT = 0x01,
s4stevo 11:d6f259026b7c 8 LEFT = 0x02,
s4stevo 11:d6f259026b7c 9 BOTTOM = 0x04,
s4stevo 11:d6f259026b7c 10 TOP = 0x08,
s4stevo 11:d6f259026b7c 11
s4stevo 11:d6f259026b7c 12
s4stevo 11:d6f259026b7c 13 NTOP = 0x07,
s4stevo 11:d6f259026b7c 14 NBOTTOM = 0x0B,
s4stevo 11:d6f259026b7c 15 NLEFT = 0x0D,
s4stevo 11:d6f259026b7c 16 NRIGHT = 0x0E,
s4stevo 11:d6f259026b7c 17 FULL = 0x0F
s4stevo 11:d6f259026b7c 18 };
s4stevo 11:d6f259026b7c 19
s4stevo 11:d6f259026b7c 20 enum DIRECTION
s4stevo 11:d6f259026b7c 21 {
s4stevo 11:d6f259026b7c 22 NORTH = 0,
s4stevo 11:d6f259026b7c 23 EAST = 1,
s4stevo 11:d6f259026b7c 24 SOUTH = 2,
s4stevo 11:d6f259026b7c 25 WEST = 3,
s4stevo 11:d6f259026b7c 26 };
s4stevo 11:d6f259026b7c 27
s4stevo 11:d6f259026b7c 28 enum OPERATION
s4stevo 11:d6f259026b7c 29 {
s4stevo 11:d6f259026b7c 30 HALT = 0x00,
s4stevo 11:d6f259026b7c 31 FORWARD = 0x01,
s4stevo 11:d6f259026b7c 32 TURN_RIGHT = 0x02,
s4stevo 11:d6f259026b7c 33 TURN_LEFT = 0x03,
s4stevo 11:d6f259026b7c 34 TURN_AROUND = 0x04,
s4stevo 11:d6f259026b7c 35 SENSE_RIGHT = 0x05,
s4stevo 11:d6f259026b7c 36 SENSE_LEFT = 0x06,
s4stevo 11:d6f259026b7c 37 SENSE_FRONT = 0x07,
s4stevo 11:d6f259026b7c 38 };
s4stevo 11:d6f259026b7c 39
s4stevo 11:d6f259026b7c 40 int orientation = 0;
s4stevo 11:d6f259026b7c 41
s4stevo 11:d6f259026b7c 42 void updateOrientation(signed int change)
s4stevo 11:d6f259026b7c 43 {
s4stevo 11:d6f259026b7c 44 orientation += change;
s4stevo 11:d6f259026b7c 45 orientation %= 4;
s4stevo 11:d6f259026b7c 46 };
s4stevo 11:d6f259026b7c 47
s4stevo 11:d6f259026b7c 48 const int size = 16;
s4stevo 11:d6f259026b7c 49
s4stevo 11:d6f259026b7c 50 unsigned char maze1s[16][16] = {
s4stevo 11:d6f259026b7c 51 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
s4stevo 11:d6f259026b7c 52 {0xA, 0xC, 0xC, 0xD, 0xE, 0xC, 0x9, 0xF, 0xA, 0xC, 0xC, 0xD, 0xE, 0x8, 0xC, 0xD}, // 1
s4stevo 11:d6f259026b7c 53 {0x3, 0xB, 0xA, 0xD, 0xA, 0xD, 0x2, 0x8, 0x4, 0xC, 0xC, 0xC, 0xC, 0x4, 0xC, 0xD}, // 2
s4stevo 11:d6f259026b7c 54 {0x3, 0x2, 0x5, 0xE, 0x4, 0xC, 0x5, 0x3, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 3
s4stevo 11:d6f259026b7c 55 {0x3, 0x3, 0xB, 0xA, 0xC, 0xC, 0x8, 0x1, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 4
s4stevo 11:d6f259026b7c 56 {0x3, 0x3, 0x3, 0x6, 0xC, 0x9, 0x3, 0x3, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 5
s4stevo 11:d6f259026b7c 57 {0x6, 0x4, 0x4, 0xC, 0xC, 0x1, 0x3, 0x3, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 6
s4stevo 11:d6f259026b7c 58 {0xA, 0xC, 0xC, 0xC, 0x9, 0x3, 0x2, 0x4, 0xC, 0x9, 0xA, 0xC, 0xC, 0xC, 0xC, 0x9}, // 7
s4stevo 11:d6f259026b7c 59 {0x6, 0xC, 0x8, 0x9, 0x3, 0x3, 0x3, 0xA, 0x9, 0x3, 0x2, 0xC, 0xC, 0xC, 0xD, 0x3}, // 8
s4stevo 11:d6f259026b7c 60 {0xB, 0xB, 0x3, 0x3, 0x3, 0x2, 0x1, 0x6, 0x4, 0x1, 0x2, 0xC, 0xC, 0xD, 0xB, 0x3}, // 9
s4stevo 11:d6f259026b7c 61 {0x2, 0x5, 0x3, 0x3, 0x3, 0x3, 0x6, 0xC, 0xC, 0x4, 0x4, 0x9, 0xA, 0x9, 0x3, 0x3}, // 10
s4stevo 11:d6f259026b7c 62 {0x3, 0xB, 0x7, 0x3, 0x3, 0x7, 0xA, 0xC, 0xC, 0xC, 0x8, 0x5, 0x2, 0x4, 0x4, 0x1}, // 11
s4stevo 11:d6f259026b7c 63 {0x3, 0x2, 0x8, 0x1, 0x6, 0xD, 0x2, 0xC, 0xC, 0x9, 0x6, 0xC, 0x4, 0xC, 0x9, 0x3}, // 12
s4stevo 11:d6f259026b7c 64 {0x3, 0x3, 0x3, 0x3, 0xA, 0xC, 0x4, 0xC, 0x9, 0x6, 0xC, 0xC, 0xC, 0x9, 0x3, 0x3}, // 13
s4stevo 11:d6f259026b7c 65 {0x3, 0x3, 0x3, 0x3, 0x2, 0xC, 0xC, 0xC, 0x4, 0x8, 0xC, 0xC, 0xD, 0x3, 0x3, 0x3}, // 14
s4stevo 11:d6f259026b7c 66 {0x6, 0x5, 0x3, 0x6, 0x0, 0xC, 0xC, 0xC, 0xD, 0x3, 0xE, 0xC, 0xC, 0x1, 0x7, 0x7}, // 15
s4stevo 11:d6f259026b7c 67 {0xE, 0xC, 0x4, 0xC, 0x4, 0xC, 0xC, 0xC, 0xD, 0x6, 0xC, 0xC, 0xC, 0x4, 0xC, 0xD} // 16
s4stevo 11:d6f259026b7c 68 };
s4stevo 11:d6f259026b7c 69
s4stevo 11:d6f259026b7c 70 unsigned char maze1[16][16] = {
s4stevo 11:d6f259026b7c 71 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
s4stevo 11:d6f259026b7c 72 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 0
s4stevo 11:d6f259026b7c 73 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 1
s4stevo 11:d6f259026b7c 74 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 2
s4stevo 11:d6f259026b7c 75 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 3
s4stevo 11:d6f259026b7c 76 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 4
s4stevo 11:d6f259026b7c 77 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF}, // 5
s4stevo 11:d6f259026b7c 78 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xD, 0x8, 0xC, 0x8, 0x9, 0xA, 0x9}, // 6
s4stevo 11:d6f259026b7c 79 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xD, 0x0, 0x9, 0x3, 0x3, 0x3, 0x3}, // 7
s4stevo 11:d6f259026b7c 80 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0x3, 0x2, 0x1, 0x3, 0x3, 0x3}, // 8
s4stevo 11:d6f259026b7c 81 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xE, 0x1, 0x7, 0x2, 0x1, 0x3, 0x3}, // 9
s4stevo 11:d6f259026b7c 82 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xA, 0x5, 0xE, 0x5, 0x6, 0x1, 0x3}, // 10
s4stevo 11:d6f259026b7c 83 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0x3, 0xA, 0x1, 0xA, 0x9, 0x3, 0x3}, // 11
s4stevo 11:d6f259026b7c 84 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}, // 12
s4stevo 11:d6f259026b7c 85 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3}, // 13
s4stevo 11:d6f259026b7c 86 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0x6, 0x5, 0x2, 0x5, 0x3, 0x3, 0x3}, // 14
s4stevo 11:d6f259026b7c 87 {0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xF, 0xD, 0xC, 0x4, 0xD, 0x6, 0x5, 0x7}, // 15
s4stevo 11:d6f259026b7c 88 };
s4stevo 11:d6f259026b7c 89
s4stevo 11:d6f259026b7c 90 signed int maze1F[16][16] = {
s4stevo 11:d6f259026b7c 91 // 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
s4stevo 11:d6f259026b7c 92 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //1
s4stevo 11:d6f259026b7c 93 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 94 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //3
s4stevo 11:d6f259026b7c 95 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 96 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //5
s4stevo 11:d6f259026b7c 97 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 98 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //7
s4stevo 11:d6f259026b7c 99 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 100 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 101 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, //10
s4stevo 11:d6f259026b7c 102 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 103 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 12
s4stevo 11:d6f259026b7c 104 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 105 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, // 14
s4stevo 11:d6f259026b7c 106 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
s4stevo 11:d6f259026b7c 107 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1} // 16
s4stevo 11:d6f259026b7c 108 };
s4stevo 11:d6f259026b7c 109
s4stevo 11:d6f259026b7c 110 // Visual Functions
s4stevo 11:d6f259026b7c 111 void printmaze();
s4stevo 11:d6f259026b7c 112 void printflood();
s4stevo 11:d6f259026b7c 113
s4stevo 11:d6f259026b7c 114 // important Functions
s4stevo 11:d6f259026b7c 115 void floodStep();
s4stevo 11:d6f259026b7c 116 void findPath();
s4stevo 11:d6f259026b7c 117 void createDirections();
s4stevo 11:d6f259026b7c 118
s4stevo 11:d6f259026b7c 119 // CELL[i][j] <---> BYTE
s4stevo 11:d6f259026b7c 120 unsigned char cellToByte(int i, int j)
s4stevo 11:d6f259026b7c 121 {
s4stevo 11:d6f259026b7c 122 unsigned char byteVal = 0;
s4stevo 11:d6f259026b7c 123
s4stevo 11:d6f259026b7c 124 int newi = i;
s4stevo 11:d6f259026b7c 125 int newj = j;
s4stevo 11:d6f259026b7c 126
s4stevo 11:d6f259026b7c 127 if(newi >= 8)
s4stevo 11:d6f259026b7c 128 {
s4stevo 11:d6f259026b7c 129 byteVal += 0x80;
s4stevo 11:d6f259026b7c 130 newi-=8;
s4stevo 11:d6f259026b7c 131 }
s4stevo 11:d6f259026b7c 132 if(newi >= 4)
s4stevo 11:d6f259026b7c 133 {
s4stevo 11:d6f259026b7c 134 byteVal += 0x40;
s4stevo 11:d6f259026b7c 135 newi-=4;
s4stevo 11:d6f259026b7c 136 }
s4stevo 11:d6f259026b7c 137 if(newi >= 2)
s4stevo 11:d6f259026b7c 138 {
s4stevo 11:d6f259026b7c 139 byteVal += 0x20;
s4stevo 11:d6f259026b7c 140 newi-=2;
s4stevo 11:d6f259026b7c 141 }
s4stevo 11:d6f259026b7c 142 if(newi >= 1)
s4stevo 11:d6f259026b7c 143 {
s4stevo 11:d6f259026b7c 144 byteVal += 0x10;
s4stevo 11:d6f259026b7c 145 newi--;
s4stevo 11:d6f259026b7c 146 }
s4stevo 11:d6f259026b7c 147
s4stevo 11:d6f259026b7c 148 if(newj >= 8)
s4stevo 11:d6f259026b7c 149 {
s4stevo 11:d6f259026b7c 150 byteVal += 0x8;
s4stevo 11:d6f259026b7c 151 newj-=8;
s4stevo 11:d6f259026b7c 152 }
s4stevo 11:d6f259026b7c 153 if(newj >= 4)
s4stevo 11:d6f259026b7c 154 {
s4stevo 11:d6f259026b7c 155 byteVal += 0x4;
s4stevo 11:d6f259026b7c 156 newj-=4;
s4stevo 11:d6f259026b7c 157 }
s4stevo 11:d6f259026b7c 158 if(newj >= 2)
s4stevo 11:d6f259026b7c 159 {
s4stevo 11:d6f259026b7c 160 byteVal += 0x2;
s4stevo 11:d6f259026b7c 161 newj-=2;
s4stevo 11:d6f259026b7c 162 }
s4stevo 11:d6f259026b7c 163 if(newj >= 1)
s4stevo 11:d6f259026b7c 164 {
s4stevo 11:d6f259026b7c 165 byteVal += 0x1;
s4stevo 11:d6f259026b7c 166 newj--;
s4stevo 11:d6f259026b7c 167 }
s4stevo 11:d6f259026b7c 168
s4stevo 11:d6f259026b7c 169 return byteVal;
s4stevo 11:d6f259026b7c 170 }
s4stevo 11:d6f259026b7c 171 unsigned int colFromByte(unsigned char byte)
s4stevo 11:d6f259026b7c 172 {
s4stevo 11:d6f259026b7c 173 return (byte & 0x0F);
s4stevo 11:d6f259026b7c 174 }
s4stevo 11:d6f259026b7c 175 unsigned int rowFromByte(unsigned char byte)
s4stevo 11:d6f259026b7c 176 {
s4stevo 11:d6f259026b7c 177 return colFromByte((byte >> 4));
s4stevo 11:d6f259026b7c 178 }
s4stevo 11:d6f259026b7c 179
s4stevo 11:d6f259026b7c 180 int highestSurrounding(int r, int c)
s4stevo 11:d6f259026b7c 181 {
s4stevo 11:d6f259026b7c 182 int top = -1;
s4stevo 11:d6f259026b7c 183 if(r > 0 && !(maze1[r][c] & TOP))
s4stevo 11:d6f259026b7c 184 top = maze1F[r-1][c];
s4stevo 11:d6f259026b7c 185
s4stevo 11:d6f259026b7c 186 int bottom = -1;
s4stevo 11:d6f259026b7c 187 if(r < size-1 && !(maze1[r][c] & BOTTOM))
s4stevo 11:d6f259026b7c 188 bottom = maze1F[r+1][c];
s4stevo 11:d6f259026b7c 189
s4stevo 11:d6f259026b7c 190 int left = -1;
s4stevo 11:d6f259026b7c 191 if(c > 0 && !(maze1[r][c] & LEFT))
s4stevo 11:d6f259026b7c 192 left = maze1F[r][c-1];
s4stevo 11:d6f259026b7c 193
s4stevo 11:d6f259026b7c 194 int right = -1;
s4stevo 11:d6f259026b7c 195 if(c < size-1 && !(maze1[r][c] & RIGHT) )
s4stevo 11:d6f259026b7c 196 right = maze1F[r][c+1];
s4stevo 11:d6f259026b7c 197
s4stevo 11:d6f259026b7c 198 int max = top;
s4stevo 11:d6f259026b7c 199
s4stevo 11:d6f259026b7c 200 if(bottom > max)
s4stevo 11:d6f259026b7c 201 max = bottom;
s4stevo 11:d6f259026b7c 202
s4stevo 11:d6f259026b7c 203 if(left > max)
s4stevo 11:d6f259026b7c 204 max = left;
s4stevo 11:d6f259026b7c 205
s4stevo 11:d6f259026b7c 206 if(right > max)
s4stevo 11:d6f259026b7c 207 max = right;
s4stevo 11:d6f259026b7c 208
s4stevo 11:d6f259026b7c 209 return max;
s4stevo 11:d6f259026b7c 210 }
s4stevo 11:d6f259026b7c 211
s4stevo 11:d6f259026b7c 212
s4stevo 11:d6f259026b7c 213 // Global Vars
s4stevo 11:d6f259026b7c 214 int startRow = 15; // Start loc
s4stevo 11:d6f259026b7c 215 int startCol = 15;
s4stevo 11:d6f259026b7c 216
s4stevo 11:d6f259026b7c 217 int destRow = 9; // Destination loc
s4stevo 11:d6f259026b7c 218 int destCol = 9;
s4stevo 11:d6f259026b7c 219
s4stevo 13:f55ec972be61 220 int currRow = startRow; // Current Loc
s4stevo 13:f55ec972be61 221 int currCol = startCol;
s4stevo 11:d6f259026b7c 222
s4stevo 11:d6f259026b7c 223 unsigned int Movements[5000];
s4stevo 11:d6f259026b7c 224 int moveCounter = 0;
s4stevo 11:d6f259026b7c 225
s4stevo 11:d6f259026b7c 226
s4stevo 11:d6f259026b7c 227 int currentDistance = 0; // Flooding
s4stevo 11:d6f259026b7c 228
s4stevo 11:d6f259026b7c 229 unsigned char* directions;
s4stevo 11:d6f259026b7c 230
s4stevo 11:d6f259026b7c 231 void floodStep()
s4stevo 11:d6f259026b7c 232 {
s4stevo 11:d6f259026b7c 233 currentDistance++;
s4stevo 11:d6f259026b7c 234
s4stevo 11:d6f259026b7c 235 int changed = 0;
s4stevo 11:d6f259026b7c 236 unsigned char changes[256];
s4stevo 11:d6f259026b7c 237
s4stevo 11:d6f259026b7c 238 for(int i = 0; i < size; i++)
s4stevo 11:d6f259026b7c 239 {
s4stevo 11:d6f259026b7c 240 for(int j = 0; j < size; j++)
s4stevo 11:d6f259026b7c 241 {
s4stevo 11:d6f259026b7c 242 if(maze1F[i][j] != -1)
s4stevo 11:d6f259026b7c 243 {
s4stevo 11:d6f259026b7c 244 continue;
s4stevo 11:d6f259026b7c 245 }
s4stevo 11:d6f259026b7c 246 else
s4stevo 11:d6f259026b7c 247 {
s4stevo 11:d6f259026b7c 248 if(highestSurrounding(i,j) != -1)
s4stevo 11:d6f259026b7c 249 {
s4stevo 11:d6f259026b7c 250 changes[changed] = cellToByte(i, j);
s4stevo 11:d6f259026b7c 251 changed++;
s4stevo 11:d6f259026b7c 252 }
s4stevo 11:d6f259026b7c 253 }
s4stevo 11:d6f259026b7c 254 }
s4stevo 11:d6f259026b7c 255 }
s4stevo 11:d6f259026b7c 256
s4stevo 11:d6f259026b7c 257 for(int k = 0; k < changed; k++)
s4stevo 11:d6f259026b7c 258 {
s4stevo 11:d6f259026b7c 259 maze1F[rowFromByte(changes[k])][colFromByte(changes[k])] = currentDistance;
s4stevo 11:d6f259026b7c 260 }
s4stevo 11:d6f259026b7c 261 }
s4stevo 11:d6f259026b7c 262
s4stevo 11:d6f259026b7c 263 void findPath()
s4stevo 11:d6f259026b7c 264 {
s4stevo 11:d6f259026b7c 265 int i = destRow;
s4stevo 11:d6f259026b7c 266 int j = destCol;
s4stevo 11:d6f259026b7c 267
s4stevo 11:d6f259026b7c 268 int di = 0;
s4stevo 11:d6f259026b7c 269 int dj = 0;
s4stevo 11:d6f259026b7c 270
s4stevo 11:d6f259026b7c 271 int counter = 0;
s4stevo 11:d6f259026b7c 272
s4stevo 11:d6f259026b7c 273 directions = new unsigned char[currentDistance];
s4stevo 11:d6f259026b7c 274
s4stevo 11:d6f259026b7c 275 while((i != startRow) || (j != startCol))
s4stevo 11:d6f259026b7c 276 {
s4stevo 11:d6f259026b7c 277 int min = maze1F[i][j];
s4stevo 11:d6f259026b7c 278
s4stevo 11:d6f259026b7c 279 if(i > 0 && !(maze1[i][j] & TOP))
s4stevo 11:d6f259026b7c 280 {
s4stevo 11:d6f259026b7c 281 if(maze1F[i-1][j] < min && maze1F[i-1][j] != -1)
s4stevo 11:d6f259026b7c 282 {
s4stevo 11:d6f259026b7c 283 min = maze1F[i-1][j];
s4stevo 11:d6f259026b7c 284 di = -1;
s4stevo 11:d6f259026b7c 285 dj = 0;
s4stevo 11:d6f259026b7c 286 }
s4stevo 11:d6f259026b7c 287
s4stevo 11:d6f259026b7c 288 }
s4stevo 11:d6f259026b7c 289
s4stevo 11:d6f259026b7c 290 if(i < size-1 && !(maze1[i][j] & BOTTOM))
s4stevo 11:d6f259026b7c 291 {
s4stevo 11:d6f259026b7c 292 if(maze1F[i+1][j] < min && maze1F[i+1][j] != -1)
s4stevo 11:d6f259026b7c 293 {
s4stevo 11:d6f259026b7c 294 min = maze1F[i+1][j];
s4stevo 12:042135807ee8 295 di = 1;
s4stevo 11:d6f259026b7c 296 dj = 0;
s4stevo 11:d6f259026b7c 297 }
s4stevo 11:d6f259026b7c 298 }
s4stevo 11:d6f259026b7c 299
s4stevo 11:d6f259026b7c 300 if(j > 0 && !(maze1[i][j] & LEFT))
s4stevo 11:d6f259026b7c 301 {
s4stevo 11:d6f259026b7c 302 if(maze1F[i][j-1] < min && maze1F[i][j-1] != -1)
s4stevo 11:d6f259026b7c 303 {
s4stevo 11:d6f259026b7c 304 min = maze1F[i][j-1];
s4stevo 11:d6f259026b7c 305 di = 0;
s4stevo 11:d6f259026b7c 306 dj = -1;
s4stevo 11:d6f259026b7c 307 }
s4stevo 11:d6f259026b7c 308
s4stevo 11:d6f259026b7c 309 }
s4stevo 11:d6f259026b7c 310
s4stevo 11:d6f259026b7c 311 if(j < size-1 && !(maze1[i][j] & RIGHT))
s4stevo 11:d6f259026b7c 312 {
s4stevo 11:d6f259026b7c 313 if(maze1F[i][j+1] < min && maze1F[i][j+1] != -1)
s4stevo 11:d6f259026b7c 314 {
s4stevo 11:d6f259026b7c 315 min = maze1F[i][j+1];
s4stevo 11:d6f259026b7c 316 di = 0;
s4stevo 12:042135807ee8 317 dj = 1;
s4stevo 11:d6f259026b7c 318 }
s4stevo 11:d6f259026b7c 319 }
s4stevo 11:d6f259026b7c 320
s4stevo 11:d6f259026b7c 321 i += di;
s4stevo 11:d6f259026b7c 322 j += dj;
s4stevo 11:d6f259026b7c 323
s4stevo 11:d6f259026b7c 324 counter++;
s4stevo 11:d6f259026b7c 325
s4stevo 11:d6f259026b7c 326 unsigned char byteVal = cellToByte(i, j);
s4stevo 11:d6f259026b7c 327
s4stevo 11:d6f259026b7c 328 directions[currentDistance - counter] = byteVal;
s4stevo 11:d6f259026b7c 329
s4stevo 11:d6f259026b7c 330 }
s4stevo 11:d6f259026b7c 331 }
s4stevo 11:d6f259026b7c 332
s4stevo 11:d6f259026b7c 333 void turnRight()
s4stevo 11:d6f259026b7c 334 {
s4stevo 11:d6f259026b7c 335 updateOrientation(1);
s4stevo 11:d6f259026b7c 336
s4stevo 11:d6f259026b7c 337 }
s4stevo 11:d6f259026b7c 338
s4stevo 11:d6f259026b7c 339 void turnLeft()
s4stevo 11:d6f259026b7c 340 {
s4stevo 11:d6f259026b7c 341 updateOrientation(3);
s4stevo 11:d6f259026b7c 342 }
s4stevo 11:d6f259026b7c 343
s4stevo 11:d6f259026b7c 344 void createDirections()
s4stevo 11:d6f259026b7c 345 {
s4stevo 11:d6f259026b7c 346 int prevRow = rowFromByte(directions[0]);
s4stevo 11:d6f259026b7c 347 int prevCol = colFromByte(directions[0]);
s4stevo 11:d6f259026b7c 348 unsigned char prevByte = directions[0];
s4stevo 11:d6f259026b7c 349
s4stevo 11:d6f259026b7c 350 directions[currentDistance] = cellToByte(destRow, destCol);
s4stevo 11:d6f259026b7c 351
s4stevo 11:d6f259026b7c 352 for(int d = 1; d <= currentDistance; d++)
s4stevo 11:d6f259026b7c 353 {
s4stevo 11:d6f259026b7c 354 int row = rowFromByte(directions[d]);
s4stevo 11:d6f259026b7c 355 int col = colFromByte(directions[d]);
s4stevo 11:d6f259026b7c 356 unsigned char byte = directions[d];
s4stevo 11:d6f259026b7c 357
s4stevo 11:d6f259026b7c 358 switch(orientation)
s4stevo 11:d6f259026b7c 359 {
s4stevo 11:d6f259026b7c 360 case NORTH:
s4stevo 11:d6f259026b7c 361 switch((prevByte-byte))
s4stevo 11:d6f259026b7c 362 {
s4stevo 11:d6f259026b7c 363 case -1: // GO RIGHT ONE CELL
s4stevo 11:d6f259026b7c 364 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 365 turnRight();
s4stevo 11:d6f259026b7c 366 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 367 break;
s4stevo 11:d6f259026b7c 368
s4stevo 11:d6f259026b7c 369 case 1: // GO LEFT
s4stevo 11:d6f259026b7c 370 Movements[moveCounter++] = TURN_LEFT;
s4stevo 11:d6f259026b7c 371 turnLeft();
s4stevo 11:d6f259026b7c 372 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 373 break;
s4stevo 11:d6f259026b7c 374
s4stevo 11:d6f259026b7c 375 case 16: // GO UP
s4stevo 11:d6f259026b7c 376 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 377 break;
s4stevo 11:d6f259026b7c 378
s4stevo 11:d6f259026b7c 379 case -16:// GO DOWN
s4stevo 11:d6f259026b7c 380 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 381 turnRight();
s4stevo 11:d6f259026b7c 382 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 383 turnRight();
s4stevo 11:d6f259026b7c 384 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 385 break;
s4stevo 11:d6f259026b7c 386 }
s4stevo 11:d6f259026b7c 387 break;
s4stevo 11:d6f259026b7c 388
s4stevo 11:d6f259026b7c 389 case EAST:
s4stevo 11:d6f259026b7c 390 switch((prevByte-byte))
s4stevo 11:d6f259026b7c 391 {
s4stevo 11:d6f259026b7c 392 case -1:
s4stevo 11:d6f259026b7c 393 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 394 break;
s4stevo 11:d6f259026b7c 395
s4stevo 11:d6f259026b7c 396 case 1:
s4stevo 11:d6f259026b7c 397 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 398 turnRight();
s4stevo 11:d6f259026b7c 399 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 400 turnRight();
s4stevo 11:d6f259026b7c 401 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 402 break;
s4stevo 11:d6f259026b7c 403
s4stevo 11:d6f259026b7c 404 case 16:
s4stevo 11:d6f259026b7c 405 Movements[moveCounter++] = TURN_LEFT;
s4stevo 11:d6f259026b7c 406 turnLeft();
s4stevo 11:d6f259026b7c 407 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 408 break;
s4stevo 11:d6f259026b7c 409
s4stevo 11:d6f259026b7c 410 case -16:
s4stevo 11:d6f259026b7c 411 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 412 turnRight();
s4stevo 11:d6f259026b7c 413 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 414 break;
s4stevo 11:d6f259026b7c 415 }
s4stevo 11:d6f259026b7c 416 break;
s4stevo 11:d6f259026b7c 417
s4stevo 11:d6f259026b7c 418 case SOUTH:
s4stevo 11:d6f259026b7c 419 switch((prevByte-byte))
s4stevo 11:d6f259026b7c 420 {
s4stevo 11:d6f259026b7c 421 case -1:
s4stevo 11:d6f259026b7c 422 Movements[moveCounter++] = TURN_LEFT;
s4stevo 11:d6f259026b7c 423 turnLeft();
s4stevo 11:d6f259026b7c 424 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 425 break;
s4stevo 11:d6f259026b7c 426
s4stevo 11:d6f259026b7c 427 case 1:
s4stevo 11:d6f259026b7c 428 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 429 turnRight();
s4stevo 11:d6f259026b7c 430 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 431 break;
s4stevo 11:d6f259026b7c 432
s4stevo 11:d6f259026b7c 433 case 16:
s4stevo 11:d6f259026b7c 434 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 435 turnRight();
s4stevo 11:d6f259026b7c 436 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 437 turnRight();
s4stevo 11:d6f259026b7c 438 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 439 break;
s4stevo 11:d6f259026b7c 440
s4stevo 12:042135807ee8 441 case -16: //DOWN
s4stevo 11:d6f259026b7c 442 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 443 break;
s4stevo 11:d6f259026b7c 444 }
s4stevo 11:d6f259026b7c 445 break;
s4stevo 11:d6f259026b7c 446
s4stevo 11:d6f259026b7c 447 case WEST:
s4stevo 11:d6f259026b7c 448 switch((prevByte-byte))
s4stevo 11:d6f259026b7c 449 {
s4stevo 11:d6f259026b7c 450 case -1:
s4stevo 11:d6f259026b7c 451 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 452 turnRight();
s4stevo 11:d6f259026b7c 453 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 454 turnRight();
s4stevo 11:d6f259026b7c 455 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 456 break;
s4stevo 11:d6f259026b7c 457
s4stevo 11:d6f259026b7c 458 case 1:
s4stevo 11:d6f259026b7c 459 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 460 break;
s4stevo 11:d6f259026b7c 461
s4stevo 11:d6f259026b7c 462 case 16:
s4stevo 11:d6f259026b7c 463 Movements[moveCounter++] = TURN_RIGHT;
s4stevo 11:d6f259026b7c 464 turnRight();
s4stevo 11:d6f259026b7c 465 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 466 break;
s4stevo 11:d6f259026b7c 467
s4stevo 11:d6f259026b7c 468 case -16:
s4stevo 11:d6f259026b7c 469 Movements[moveCounter++] = TURN_LEFT;
s4stevo 11:d6f259026b7c 470 turnLeft();
s4stevo 11:d6f259026b7c 471 Movements[moveCounter++] = FORWARD;
s4stevo 11:d6f259026b7c 472 break;
s4stevo 11:d6f259026b7c 473 }
s4stevo 11:d6f259026b7c 474 break;
s4stevo 11:d6f259026b7c 475 }
s4stevo 11:d6f259026b7c 476
s4stevo 11:d6f259026b7c 477 prevRow = row;
s4stevo 11:d6f259026b7c 478 prevCol = col;
s4stevo 11:d6f259026b7c 479 prevByte = byte;
s4stevo 11:d6f259026b7c 480 }
s4stevo 11:d6f259026b7c 481
s4stevo 11:d6f259026b7c 482 Movements[moveCounter++] = HALT;
s4stevo 11:d6f259026b7c 483 }
s4stevo 11:d6f259026b7c 484
s4stevo 11:d6f259026b7c 485
s4stevo 11:d6f259026b7c 486
s4stevo 11:d6f259026b7c 487 void calcFlood()
s4stevo 11:d6f259026b7c 488 {
s4stevo 11:d6f259026b7c 489 //THIS IS WHERE WE SET THE DESTINATION AND START VALUES; //OR IN THE HEADER... WHO CARES?
s4stevo 11:d6f259026b7c 490 // IF this cond is true, then the mouse begins with the REST of the maze on its right and is facing north
s4stevo 11:d6f259026b7c 491 if(false) // if pin != 1
s4stevo 11:d6f259026b7c 492 {
s4stevo 11:d6f259026b7c 493 orientation = 0;
s4stevo 11:d6f259026b7c 494 startRow = 15;
s4stevo 12:042135807ee8 495 startCol = 0;
s4stevo 11:d6f259026b7c 496 }
s4stevo 11:d6f259026b7c 497 else
s4stevo 11:d6f259026b7c 498 {
s4stevo 11:d6f259026b7c 499 orientation = 0;
s4stevo 11:d6f259026b7c 500 startRow = 15;
s4stevo 11:d6f259026b7c 501 startCol = 15;
s4stevo 11:d6f259026b7c 502
s4stevo 11:d6f259026b7c 503 }
s4stevo 11:d6f259026b7c 504
s4stevo 11:d6f259026b7c 505 maze1F[startRow][startCol] = 0;
s4stevo 11:d6f259026b7c 506
s4stevo 11:d6f259026b7c 507
s4stevo 11:d6f259026b7c 508 while(maze1F[destRow][destCol] == -1)
s4stevo 11:d6f259026b7c 509 {
s4stevo 11:d6f259026b7c 510 floodStep();
s4stevo 11:d6f259026b7c 511 }
s4stevo 11:d6f259026b7c 512
s4stevo 11:d6f259026b7c 513 findPath();
s4stevo 11:d6f259026b7c 514
s4stevo 11:d6f259026b7c 515 createDirections();
s4stevo 11:d6f259026b7c 516 }
s4stevo 11:d6f259026b7c 517