ETrobocon2017 - 片山研究所モデルベース開発推進事業部
PuzzleField.h
[詳解]
1 #ifndef __PUZZLEFIELD__
2 #define __PUZZLEFIELD__
3 
4 #include "ev3api.h"
5 #include "Walker.h"
6 #include "ColorSensor.h"
7 #include "Distance.h"
8 #include "LineTracerWalker.h"
9 #include "BasicWalker.h"
10 
11 #define X -1
12 
13 #define PUZZLE_POSITION_CURRENT 16
14 #define PUZZLE_POSITION_NEXT 16
15 #define PUZZLE_POSITION_DESTINATE 9
16 #define PUZZLE_POLAR_COODINATE 2
17 
18 #define DEGREE 0
19 #define DISTANCE 1
20 
21 #define PUZZLE_LINE_LONG 1100
22 #define PUZZLE_LINE_NORMAL 920
23 #define PUZZLE_LINE_SHORT 660
24 #define PUZZLE_LINE_VERY_SHORT 345
25 
26 using namespace ev3api;
27 
28 class PuzzleField {
29 public:
30  PuzzleField () ;
31  void preparatePuzzle ( void ) ;
32  void testGame ( void ) ;
33 
34 private:
35  Walker walker ;
36  BasicWalker basicWalker ;
37  ColorSensor colorSensor;
38  LineTracerWalker lineTracer;
39  Distance distance;
40  int modifiedSpinVector ;
41  int32_t modifiedSpinDegree ;
42  int8_t color ;
43  int8_t forward;
44  int32_t traceDistance ;
45  int32_t currentDegree ;
46  int8_t leftMotorDeg ;
47  int8_t rightMotorDeg ;
48  int8_t connectNumber ;
49  int8_t beforeconnectNumber ;
50  int32_t beforeDegree ;
51  int32_t nextDegree ;
52  int32_t nextDistance ;
53  int32_t spinDegree ;
54  bool spinVector ;
55  int8_t connectNumberManager[PUZZLE_POSITION_CURRENT][PUZZLE_POSITION_NEXT] = {
56  /* 接続ノード番号付与テーブル ( 'X'は非接続を示す ) */
57  /* N E X T */
58  /* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, */
59  /* 0 */{ X, X, X, X, X, X, 0, X, 1, 2, X, X, X, 3, 4, X },
60  /* 1 */{ X, X, 0, X, X, 1, X, X, X, X, 2, X, X, X, X, X },
61  /* 2 */{ X, 0, X, 1, X, 2, 3, X, 5, X, X, X, X, X, X, X },
62  /* 3 */{ X, X, 0, X, 1, X, 2, 3, X, 5, X, X, X, X, X, X },
63  /* C 4 */{ X, X, X, 0, X, X, X, 1, X, X, X, 2, X, X, X, X },
64  /* U 5 */{ X, 0, 1, X, X, X, 4, X, 2, X, 3, X, 5, X, X, X },
65  /* R 6 */{ 8, X, 0, 1, X, 4, X, 5, 2, 3, X, X, X, 6, 7, X },
66  /* R 7 */{ X, X, X, 0, 1, X, 4, X, X, 2, X, 3, X, X, X, 5 },
67  /* E 8 */{ 8, X, 4, X, X, 0, 1, X, X, 5, 6, X, 2, 3, 7, X },
68  /* N 9 */{ 8, X, X, 4, X, X, 0, 1, 5, X, X, 6, X, 7, 2, 3 },
69  /* T 10 */{ X, 0, X, X, X, 1, X, X, 5, X, X, X, 2, X, X, X },
70  /* 11 */{ X, X, X, X, 0, X, X, 1, X, 5, X, X, X, X, X, 2 },
71  /* 12 */{ X, X, X, X, X, 5, X, X, 0, X, 1, X, X, 2, X, X },
72  /* 13 */{ 7, X, X, X, X, X, 5, X, 0, 6, X, X, 1, X, 2, X },
73  /* 14 */{ 7, X, X, X, X, X, 5, X, 6, 0, X, X, X, 1, X, 2 },
74  /* 15 */{ X, X, X, X, X, X, X, 5, X, 0, X, 1, X, X, 2, X }
75  } ;
77  {
78  /* 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 }
79  },
80  {
81  /* 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 }
82  },
83  {
84  /* 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 }
85  },
86  {
87  /* 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 }
88  },
89  {
90  /* 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 }
91  },
92  {
93  /* 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 }
94  },
95  {
96  /* 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 }
97  },
98  {
99  /* 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 }
100  },
101  {
102  /* 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 }
103  },
104  {
105  /* 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 }
106  },
107  {
108  /* 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 }
109  },
110  {
111  /* 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 }
112  },
113  {
114  /* 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 }
115  },
116  {
117  /* 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 }
118  },
119  {
120  /* 14 */{ 108, PUZZLE_LINE_SHORT }, { 180, PUZZLE_LINE_SHORT }, { 0, PUZZLE_LINE_SHORT }, { X, X }, { X, X }, { 130, PUZZLE_LINE_LONG }, { 160, PUZZLE_LINE_NORMAL }, { 120, PUZZLE_LINE_VERY_SHORT }, { X, X }
121  },
122  {
123  /* 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 }
124  },
125  } ;
126 
127  void runPuzzleField ( int8_t, int8_t, int8_t ) ;
128  void runPuzzleFieldVectorChange ( int8_t, int8_t, int8_t, int32_t ) ;
129  void avoidBlock ( int8_t, int8_t, int8_t ) ;
130 } ;
131 
132 #endif
#define PUZZLE_LINE_VERY_SHORT
Definition: PuzzleField.h:24
#define PUZZLE_POLAR_COODINATE
Definition: PuzzleField.h:16
#define PUZZLE_POSITION_CURRENT
Definition: PuzzleField.h:13
Definition: Clock.h:12
#define PUZZLE_LINE_LONG
Definition: PuzzleField.h:21
#define X
Definition: PuzzleField.h:11
タイヤの進んだ距離(回転角)に関するクラス
#define PUZZLE_POSITION_NEXT
Definition: PuzzleField.h:14
#define PUZZLE_POSITION_DESTINATE
Definition: PuzzleField.h:15
#define PUZZLE_LINE_SHORT
Definition: PuzzleField.h:23
#define PUZZLE_LINE_NORMAL
Definition: PuzzleField.h:22
Definition: Walker.h:10