str/apps/include/PuzzleField.h (125 lines of code) (raw):

#ifndef __PUZZLEFIELD__ #define __PUZZLEFIELD__ #include "ev3api.h" #include "Walker.h" #include "ColorSensor.h" #include "Distance.h" #include "LineTracerWalker.h" #include "BasicWalker.h" #include "PuzzleExplorer.h" using namespace ev3api; class PuzzleField { public: PuzzleField () ; void preparatePuzzle ( void ) ; void runRoot ( void ) ; void testRun ( void ) ; void testGame ( void ) ; private: Walker walker ; BasicWalker basicWalker ; ColorSensor colorSensor; LineTracerWalker lineTracer; Distance distance; PuzzleExplorer puzzleExplorer ; int nearestPosition ; int* root ; static const int8_t X = -1 ; static const int8_t PUZZLE_POSITION_CURRENT = 16 ; static const int8_t PUZZLE_POSITION_NEXT = 16 ; static const int8_t PUZZLE_POSITION_DESTINATE = 9 ; static const int8_t PUZZLE_POLAR_COODINATE = 2 ; static const int8_t DEGREE = 0 ; static const int8_t DISTANCE = 1 ; static const int PUZZLE_LINE_LONG = 1075 ; static const int PUZZLE_LINE_NORMAL = 920 ; static const int PUZZLE_LINE_SHORT = 645 ; static const int PUZZLE_LINE_VERY_SHORT = 330 ; int modifiedSpinVector ; int32_t modifiedSpinDegree ; int8_t color ; int8_t forward; int32_t traceDistance ; int32_t currentDegree ; int8_t leftMotorDeg ; int8_t rightMotorDeg ; int8_t connectNumber ; int8_t beforeconnectNumber ; int32_t beforeDegree ; int32_t nextDegree ; int32_t nextDistance ; int32_t spinDegree ; bool spinVector ; int8_t connectNumberManager[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_NEXT] = { /* 接続ノード番号付与テーブル ( 'X'は非接続を示す ) */ /* N E X T */ /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, */ /* 0 */{ X, X, X, X, X, X, 0, X, 1, 2, X, X, X, 3, 4, X }, /* 1 */{ X, X, 0, X, X, 1, X, X, X, X, 2, X, X, X, X, X }, /* 2 */{ X, 0, X, 1, X, 2, 3, X, 5, X, X, X, X, X, X, X }, /* 3 */{ X, X, 0, X, 1, X, 2, 3, X, 5, X, X, X, X, X, X }, /* C 4 */{ X, X, X, 0, X, X, X, 1, X, X, X, 2, X, X, X, X }, /* U 5 */{ X, 0, 1, X, X, X, 4, X, 2, X, 3, X, 5, X, X, X }, /* R 6 */{ 8, X, 0, 1, X, 4, X, 5, 2, 3, X, X, X, 6, 7, X }, /* R 7 */{ X, X, X, 0, 1, X, 4, X, X, 2, X, 3, X, X, X, 5 }, /* E 8 */{ 8, X, 4, X, X, 0, 1, X, X, 5, 6, X, 2, 3, 7, X }, /* N 9 */{ 8, X, X, 4, X, X, 0, 1, 5, X, X, 6, X, 7, 2, 3 }, /* T 10 */{ X, 0, X, X, X, 1, X, X, 5, X, X, X, 2, X, X, X }, /* 11 */{ X, X, X, X, 0, X, X, 1, X, 5, X, X, X, X, X, 2 }, /* 12 */{ X, X, X, X, X, 5, X, X, 0, X, 1, X, X, 2, X, X }, /* 13 */{ 7, X, X, X, X, X, 5, X, 0, 6, X, X, 1, X, 2, X }, /* 14 */{ 7, X, X, X, X, X, 5, X, 6, 0, X, X, X, 1, X, 2 }, /* 15 */{ X, X, X, X, X, X, X, 5, X, 0, X, 1, X, X, 2, X } } ; int32_t allconnectNumber[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_DESTINATE][PUZZLE_POLAR_COODINATE] = { { /* 0 */{ 90, PUZZLE_LINE_VERY_SHORT }, { 160, PUZZLE_LINE_VERY_SHORT }, { 10, PUZZLE_LINE_VERY_SHORT }, { -120, PUZZLE_LINE_VERY_SHORT }, { -60, PUZZLE_LINE_VERY_SHORT }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 1 */{ 0, PUZZLE_LINE_LONG }, { -30, PUZZLE_LINE_SHORT }, { -75, PUZZLE_LINE_NORMAL }, { X, X }, { X, X }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 2 */{ 180, PUZZLE_LINE_LONG }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }, { -90, PUZZLE_LINE_SHORT }, { X, X }, { X, X }, { X, X } }, { /* 3 */{ 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }, { -90, PUZZLE_LINE_SHORT }, { X, X }, { X, X }, { X, X } }, { /* 4 */{ 180, PUZZLE_LINE_LONG }, { -150, PUZZLE_LINE_SHORT }, { -108, PUZZLE_LINE_NORMAL }, { X, X }, { X, X }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 5 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_LONG }, { -75, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X } }, { /* 6 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_LONG }, { 0, PUZZLE_LINE_LONG }, { -130, PUZZLE_LINE_LONG }, { -75, PUZZLE_LINE_LONG }, { -90, PUZZLE_LINE_VERY_SHORT } }, { /* 7 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { -90, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_LONG }, { -130, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X } }, { /* 8 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -90, PUZZLE_LINE_SHORT }, { 90, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_LONG }, { -210, PUZZLE_LINE_LONG }, { -90, PUZZLE_LINE_LONG }, { -30, PUZZLE_LINE_VERY_SHORT } }, { /* 9 */{ 150, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { -120, PUZZLE_LINE_SHORT }, { -60, PUZZLE_LINE_SHORT }, { 108, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_LONG }, { -30, PUZZLE_LINE_LONG }, { -174, PUZZLE_LINE_LONG }, { -234, PUZZLE_LINE_VERY_SHORT } }, { /* 10 */{ 105, PUZZLE_LINE_NORMAL }, { 108, PUZZLE_LINE_SHORT }, { -30, PUZZLE_LINE_SHORT }, { X, X }, { 30, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 11 */{ 75, PUZZLE_LINE_NORMAL }, { 120, PUZZLE_LINE_SHORT }, { -150, PUZZLE_LINE_SHORT }, { X, X }, { 234, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 12 */{ 108, PUZZLE_LINE_SHORT }, { 150, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X }, { 130, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X }, { X, X } }, { /* 13 */{ 120, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X }, { X, X }, { 75, PUZZLE_LINE_LONG }, { 108, PUZZLE_LINE_LONG }, { 100, PUZZLE_LINE_SHORT }, { X, X } }, { /* 14 */{ 108, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X }, { X, X }, { 120, PUZZLE_LINE_LONG }, { 150, PUZZLE_LINE_NORMAL }, { 120, PUZZLE_LINE_VERY_SHORT }, { X, X } }, { /* 15 */{ 120, PUZZLE_LINE_SHORT }, { 30, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { X, X }, { 210, PUZZLE_LINE_LONG }, { X, X }, { X, X }, { X, X }, { X, X } }, } ; void runPuzzleField ( int8_t, int8_t, int8_t ) ; void runPuzzleFieldVectorChange ( int8_t, int8_t, int8_t, int32_t ) ; void avoidBlock ( int8_t, int8_t, int8_t ) ; } ; #endif