A library for solving mazes.
Lees_Algorithm.h@1:80b73beb7742, 2011-06-25 (annotated)
- Committer:
- Pinski1
- Date:
- Sat Jun 25 07:22:36 2011 +0000
- Revision:
- 1:80b73beb7742
- Parent:
- 0:dddf6e50f1e7
Actually included code for getDirection.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pinski1 | 0:dddf6e50f1e7 | 1 | #ifndef MBED_LEES_ALGORITHM_H |
Pinski1 | 0:dddf6e50f1e7 | 2 | #define MBED_LEES_ALGORITHM_H |
Pinski1 | 0:dddf6e50f1e7 | 3 | |
Pinski1 | 0:dddf6e50f1e7 | 4 | #include "mbed.h" |
Pinski1 | 0:dddf6e50f1e7 | 5 | |
Pinski1 | 0:dddf6e50f1e7 | 6 | struct _location { |
Pinski1 | 0:dddf6e50f1e7 | 7 | unsigned char x; |
Pinski1 | 0:dddf6e50f1e7 | 8 | unsigned char y; |
Pinski1 | 0:dddf6e50f1e7 | 9 | }; |
Pinski1 | 0:dddf6e50f1e7 | 10 | |
Pinski1 | 0:dddf6e50f1e7 | 11 | class Lees_Algorithm { |
Pinski1 | 0:dddf6e50f1e7 | 12 | private: |
Pinski1 | 0:dddf6e50f1e7 | 13 | // cell structure |
Pinski1 | 0:dddf6e50f1e7 | 14 | struct _cell { |
Pinski1 | 0:dddf6e50f1e7 | 15 | bool north; |
Pinski1 | 0:dddf6e50f1e7 | 16 | bool west; |
Pinski1 | 0:dddf6e50f1e7 | 17 | unsigned char weight; |
Pinski1 | 0:dddf6e50f1e7 | 18 | } **map; //array of the maze |
Pinski1 | 0:dddf6e50f1e7 | 19 | |
Pinski1 | 0:dddf6e50f1e7 | 20 | unsigned char mazeSize; |
Pinski1 | 0:dddf6e50f1e7 | 21 | unsigned char maxWeight; |
Pinski1 | 0:dddf6e50f1e7 | 22 | |
Pinski1 | 0:dddf6e50f1e7 | 23 | _location stack[300]; |
Pinski1 | 0:dddf6e50f1e7 | 24 | unsigned char nextRead, nextWrite, stackSize; |
Pinski1 | 0:dddf6e50f1e7 | 25 | |
Pinski1 | 0:dddf6e50f1e7 | 26 | void push(_location newLoc) { |
Pinski1 | 0:dddf6e50f1e7 | 27 | stackSize ++; |
Pinski1 | 0:dddf6e50f1e7 | 28 | stack[nextWrite] = newLoc; |
Pinski1 | 0:dddf6e50f1e7 | 29 | nextWrite = (nextWrite + 1) % 300; |
Pinski1 | 0:dddf6e50f1e7 | 30 | } |
Pinski1 | 0:dddf6e50f1e7 | 31 | |
Pinski1 | 0:dddf6e50f1e7 | 32 | _location pull(void) { |
Pinski1 | 0:dddf6e50f1e7 | 33 | stackSize --; |
Pinski1 | 0:dddf6e50f1e7 | 34 | _location buffer = stack[nextRead]; |
Pinski1 | 0:dddf6e50f1e7 | 35 | nextRead = (nextRead + 1) % 300; |
Pinski1 | 0:dddf6e50f1e7 | 36 | return buffer; |
Pinski1 | 0:dddf6e50f1e7 | 37 | } |
Pinski1 | 0:dddf6e50f1e7 | 38 | |
Pinski1 | 0:dddf6e50f1e7 | 39 | |
Pinski1 | 0:dddf6e50f1e7 | 40 | |
Pinski1 | 0:dddf6e50f1e7 | 41 | // stack |
Pinski1 | 0:dddf6e50f1e7 | 42 | public: |
Pinski1 | 0:dddf6e50f1e7 | 43 | |
Pinski1 | 0:dddf6e50f1e7 | 44 | Lees_Algorithm(unsigned char size_); |
Pinski1 | 0:dddf6e50f1e7 | 45 | ~Lees_Algorithm(void); |
Pinski1 | 0:dddf6e50f1e7 | 46 | |
Pinski1 | 0:dddf6e50f1e7 | 47 | void updateMap(_location position, bool north, bool west, bool south, bool east); |
Pinski1 | 1:80b73beb7742 | 48 | char getDirection(_location position, char facing); // returns a letter describing direction |
Pinski1 | 0:dddf6e50f1e7 | 49 | void printMaze(Serial output); |
Pinski1 | 0:dddf6e50f1e7 | 50 | void setDestination(_location target); |
Pinski1 | 0:dddf6e50f1e7 | 51 | void clearWeights(void); // for the entire maze |
Pinski1 | 0:dddf6e50f1e7 | 52 | void initialFill(void); |
Pinski1 | 0:dddf6e50f1e7 | 53 | |
Pinski1 | 0:dddf6e50f1e7 | 54 | }; |
Pinski1 | 0:dddf6e50f1e7 | 55 | |
Pinski1 | 0:dddf6e50f1e7 | 56 | #endif |