A library for solving mazes.

Committer:
Pinski1
Date:
Sat Jun 25 07:55:05 2011 +0000
Revision:
2:5343f19381c8
Parent:
1:80b73beb7742
Minor change to getDirection

Who changed what in which revision?

UserRevisionLine numberNew 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