ETrobocon2017 - 片山研究所モデルベース開発推進事業部
PuzzleCodeConverter.cpp
[詳解]
1 
2 #include "PuzzleCodeConverter.h"
3 
4 
5 //コンストラクタ
7 {
8 }
9 
11 {
12  mPuzzleCode = puzzleCode;
13 }
14 
15 //デストラクタ
17 
23 {
24  int result = mPuzzleCode;
25 
26  int ary[4];
27 
28  //初期位置コードの解釈
29  ary[0] = (result % 11) + 1;
30  result = result - (ary[0] - 1);
31 
32  for(int i=1; i<4; i++){
33  if(i == 3 && result >= 11){
34  ary[i] = (result / 11) + 1;
35  }else{
36  ary[i] = ((result / 11) % 11) + 1;
37  result = (result / 11) - ((result / 11) % 11);
38  }
39  }
40 
41  //
42  blockMap["Blue"] = ary[0];
43  blockMap["Yellow"] = ary[1];
44  blockMap["Red"] = ary[2];
45  blockMap["Black"] = ary[3];
46 
47  return;
48 }
49 
55 {
56  int result=0;
57 
58  switch(color){
59  case BlockColor::Black:
60  result = blockMap["Black"];
61  break;
62 
63  case BlockColor::Red:
64  result = blockMap["Red"];
65  break;
66 
67  case BlockColor::Yellow:
68  result = blockMap["Yellow"];
69  break;
70 
71  case BlockColor::Blue:
72  result = blockMap["Blue"];
73  break;
74 
75  default:
76  break;
77  }
78 
79  return result;
80 
81 }
82 
88 {
89  int blackNum=redNum;
90 
91  if(redNum > 0)blackNum++;
92  if(redNum > 5)blackNum+=2;
93  if(redNum > 10)blackNum++;
94 
95  return blackNum;
96 }
97 
103 {
104  int blackNum=yellowNum;
105 
106  if(yellowNum > 2)blackNum++;
107  if(yellowNum > 3)blackNum++;
108  if(yellowNum > 10)blackNum++;
109 
110  return blackNum;
111 }
112 
118 {
119  int blackNum=blueNum;
120 
121  if(blueNum > 1)blackNum++;
122  if(blueNum > 2)blackNum++;
123  if(blueNum > 6)blackNum++;
124  if(blueNum > 7)blackNum++;
125 
126  return blackNum;
127 }
int blueToBlackPosition(int blueNum)
BlockColor
Definition: BlockColor.h:5
int redToBlackPosition(int redNum)
int getPosition(BlockColor color)
int yellowToBlackPosition(int yellowNum)