str/apps/explorer/PuzzleCodeConverter.cpp (75 lines of code) (raw):

#include "PuzzleCodeConverter.h" //コンストラクタ PuzzleCodeConverter::PuzzleCodeConverter() { } PuzzleCodeConverter::PuzzleCodeConverter(int puzzleCode) { mPuzzleCode = puzzleCode; } //デストラクタ PuzzleCodeConverter::~PuzzleCodeConverter(){} /** * ブロックの初期位置コードから、各ブロックの位置を算出する * @param なし */ void PuzzleCodeConverter::resolvePositionCode() { int result = mPuzzleCode; int ary[4]; //初期位置コードの解釈 ary[0] = (result % 11) + 1; result = result - (ary[0] - 1); for(int i=1; i<4; i++){ if(i == 3 && result >= 11){ ary[i] = (result / 11) + 1; }else{ ary[i] = ((result / 11) % 11) + 1; result = (result / 11) - ((result / 11) % 11); } } // blockMap["Blue"] = ary[0]; blockMap["Yellow"] = ary[1]; blockMap["Red"] = ary[2]; blockMap["Black"] = ary[3]; return; } /** * 該当する色のブロックの場所を返す * @param BlockColor ブロックの色 */ int PuzzleCodeConverter::getPosition(BlockColor color) { int result=0; switch(color){ case BlockColor::Black: result = blockMap["Black"]; break; case BlockColor::Red: result = blockMap["Red"]; break; case BlockColor::Yellow: result = blockMap["Yellow"]; break; case BlockColor::Blue: result = blockMap["Blue"]; break; default: break; } return result; } /** * 赤ブロックの位置を黒ブロックの位置で返す * @param redNum 赤ブロックの位置 */ int PuzzleCodeConverter::redToBlackPosition(int redNum) { int blackNum=redNum; if(redNum > 0)blackNum++; if(redNum > 5)blackNum+=2; if(redNum > 10)blackNum++; return blackNum; } /** * 黄ブロックの位置を黒ブロックの位置で返す * @param yellowNum 黄ブロックの位置 */ int PuzzleCodeConverter::yellowToBlackPosition(int yellowNum) { int blackNum=yellowNum; if(yellowNum > 2)blackNum++; if(yellowNum > 3)blackNum++; if(yellowNum > 10)blackNum++; return blackNum; } /** * 青ブロックの位置を黒ブロックの位置で返す * @param blueNum 青ブロックの位置 */ int PuzzleCodeConverter::blueToBlackPosition(int blueNum) { int blackNum=blueNum; if(blueNum > 1)blackNum++; if(blueNum > 2)blackNum++; if(blueNum > 6)blackNum++; if(blueNum > 7)blackNum++; return blackNum; }