예제 #1
0
void Detach(int a, int B)
{
	int i, j, b, tempa, tempB;
	tempa = a;
	tempB = B;

	for (i = 0, b = B;i <= maxlength - tempa;i++, a++, B *= 2, b = B)
	{
		for (j = (int)pow(2, i);j >= 1;j--, b--)
		{
			pos[1][i][j] = pos[0][a][b];
			pos[0][a][b] = 0;
		}
	}
	if (tempB % 2 == 1)
	{
		if (pos[0][tempa][tempB + 1] == 1)
		{
			SideSwitch(tempa, tempB);
			pos[0][tempa][tempB + 1] = -2;
		}
		else
		{
			pos[0][tempa][tempB] = -1;
			pos[0][tempa][tempB + 1] = -1;
		}
	}
	else pos[0][tempa][tempB] = -1;
}
예제 #2
0
int main(int argc, char *argv[]){

#ifndef CONSOLE_TEST
  if(SetupGPIO() != TOYHACK_SUCCEEDED){
    std::cerr << "Could not initialize libminityra." << std::endl;
    return TOYHACK_ERROR;
  }
#endif

  TConsole console(cmd_descriptions);

  std::cout << "Minityra management console" << std::endl;
  std::cout << "Copyright (C) 2016 Yasumasa Suenaga" << std::endl;
  std::cout << std::endl;

  while(true){
    const char *cmd = console.GetCommand("minityra> ");

    if(strcmp(cmd, "help") == 0){
      console.PrintHelp();
    }
    else if(strcmp(cmd, "list") == 0){
      print_judenchi_list();
    }
    else if(strcmp(cmd, "judenchi") == 0){
      int id = -1;

      /* Read Judenchi ID */
      try{
        id = console.GetNextArgAsInt();

        if(!ID_ISIN(id)){
          throw -1;
        }

      }
      catch(...){
        std::cerr << "Invalid Judenchi ID." << std::endl;
        continue;
      }

      print_judenchi("Judenchi", id);

#ifndef CONSOLE_TEST
      if(SetJudenchi(id) != TOYHACK_SUCCEEDED){
        std::cerr << "Cannot set Judenchi." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "gabu") == 0){

#ifndef CONSOLE_TEST
      if(Gabu() != TOYHACK_SUCCEEDED){
        std::cerr << "Cannot send gabu command." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "mode") == 0){
      int mode = -1;

      try{
        const char *mode_str = console.GetNextArgAsString();

        if(strcmp(mode_str, "overcharge") == 0){
          mode = MODE_OVERCHARGE;
        }
        else if(strcmp(mode_str, "carnival") == 0){
          mode = MODE_CARNIVAL;
        }
        else{
          throw -1;
        }

      }
      catch(...){
        std::cerr << "Invalid mode." << std::endl;
      }

#ifndef CONSOLE_TEST
      if(Kururincho(mode) != TOYHACK_SUCCEEDED){
        std::cerr << "Cannot send kururincho command." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "gaburevolver") == 0){
      bool isOn;

      try{
        isOn = console.GetNextArgAsOnOff();
      }
      catch(...){
        std::cerr << "Invalid argument(s)." << std::endl;
        continue;
      }

#ifdef CONSOLE_TEST
      std::cout << isOn << std::endl;
#else
      if(isOn && (DockGaburevolver() != TOYHACK_SUCCEEDED)){
        std::cerr << "Cannot dock to gaburevolver." << std::endl;
      }
      else if(!isOn && (UndockGaburevolver() != TOYHACK_SUCCEEDED)){
        std::cerr << "Cannot undock from gaburevolver." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "trigger") == 0){

#ifndef CONSOLE_TEST
      if(Trigger() != TOYHACK_SUCCEEDED){
        std::cerr << "Cannot send trigger command." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "side") == 0){

#ifndef CONSOLE_TEST
      if(SideSwitch() != TOYHACK_SUCCEEDED){
        std::cerr << "Cannot send side switch command." << std::endl;
      }
#endif

    }
    else if(strcmp(cmd, "henshin") == 0){
      SetJudenchi(-1);
      Kururincho(MODE_CARNIVAL);
      sleep(1);
      SetJudenchi(55); // Carnival Judenchi
      Gabu();
      sleep(10);
      Trigger();
    }
    else if(strcmp(cmd, "kamichange") == 0){
      SideSwitch();
      sleep(3);
      SetJudenchi(-1);
      sleep(1);

      for(int Cnt = 0; Cnt < 3; Cnt++){
        int id = -1;

        /* Read Judenchi ID */
        try{
          id = console.GetNextArgAsInt();

          if(!ID_ISIN(id)){
            throw -1;
          }

        }
        catch(...){
          std::cerr << "Invalid Judenchi ID." << std::endl;
          break;
        }

        SetJudenchi(id);
        sleep(1);
        Gabu();
        sleep(2);
      }

      Trigger();
    }
    else if(strcmp(cmd, "exit") == 0){
      break;
    }
    else{
      std::cerr << "Error: Unknown command." << std::endl;
    }

  }

  return 0;
}
예제 #3
0
void SeekPath(int stepleft)
{
	DuplicatePos(stepleft, 'b');
	int i = 0, j = 0, k = 0, l = 0, x = 0, y = 0, activeCount = 0;
	//int o, p;//more spaces involved
	for (x = 0;x <= y;x++)
	{
		DuplicatePos(stepleft + maxstep, 'b');
		Compare(x, 0, stepleft, 1);
		if (stepleft > 0)
		{
			DuplicatePos((stepleft + maxstep + maxstep), 'b');
			for (i = 1;i <= maxlength;i++)
			{
				for (j = 1;j <= (int)pow(2, i);j++)
				{
					if (pos[0][i][j] == 0)
						continue;
					else
					{
						Detach(i, j);
						DuplicatePos(stepleft + maxstep + maxstep + maxstep, 'b');
						for (k = 1;k <= maxlength;k++)//k = 0 need to examine
						{
							for (l = 1;l <= (int)pow(2, k);l++)
							{
								if (pos[0][k][l] < 1 && pos[0][k - 1][(l + 1) / 2] >= 1)
								{
									if (l % 2 == 1 && pos[0][k][l] == 0)
									{
										Attach(k, l);
										//printf("\n1step%d %d,%d ---> %d,%d:\n", maxstep + 1 - stepleft, i, j, k, l);
										//Display();
										if (stepleft > 1)
										{
											SaveStep(i, j, k, l, x, stepleft);
											Compare(x, 0, stepleft, 0);
											//printf("1");
											SeekPath(stepleft - 1);
										}
										else
										{
											activeCount = Active(1);
											SaveStep(i, j, k, l, x, stepleft);
											Compare(x, activeCount, stepleft, 0);
											//printf("1");
										}
									}
									else if (l % 2 == 0 && pos[0][k][l - 1] >= 1 && pos[0][k][l - 1] != 2 && pos[1][0][1] != 2)
									{
										if (pos[0][k][l] == -1)//case 1 -1 ---> 1  1
										{
											SideSwitch(k, l - 1);
											Attach(k, l - 1);
											//printf("\n2step%d %d,%d ---> %d,%d:\n", maxstep + 1 - stepleft, i, j, k, l - 1);
											//Display();
											if (stepleft > 1)
											{
												SaveStep(i, j, k, l - 1, x, stepleft);
												Compare(x, 0, stepleft, 0);
												//printf("2");
												SeekPath(stepleft - 1);
											}
											else
											{
												activeCount = Active(1);
												SaveStep(i, j, k, l - 1, x, stepleft);
												Compare(x, activeCount, stepleft, 0);
												//printf("2");
											}
										}
										else if (pos[0][k][l] == -2)//case 1 -2 ---> 1  1
										{
											Attach(k, l);
											//printf("\n3step%d %d,%d ---> %d,%d:\n", maxstep + 1 - stepleft, i, j, k, l);
											//Display();
											if (stepleft > 1)
											{
												SaveStep(i, j, k, l, x, stepleft);
												Compare(x, 0, stepleft, 0);
												//printf("3");
												SeekPath(stepleft - 1);
											}
											else
											{
												activeCount = Active(1);
												SaveStep(i, j, k, l, x, stepleft);
												Compare(x, activeCount, stepleft, 0);
												//printf("3");
											}
										}
										else if (pos[0][k][l] == 0)//case 1  0 ---> 1  1 ,two ways to attach, left and right
										{
											//attach left
											SideSwitch(k, l - 1);
											Attach(k, l - 1);
											//printf("\n4step%d %d,%d ---> %d,%d:\n", maxstep + 1 - stepleft, i, j, k, l - 1);
											//Display();
											if (stepleft > 1)
											{
												SaveStep(i, j, k, l - 1, x, stepleft);
												Compare(x, 0, stepleft, 0);
												//printf("4");
												SeekPath(stepleft - 1);
											}
											else
											{
												activeCount = Active(1);
												SaveStep(i, j, k, l - 1, x, stepleft);
												Compare(x, activeCount, stepleft, 0);
												//printf("4");
											}
											DuplicatePos(stepleft + maxstep + maxstep + maxstep, 'r');

											//attach right
											Attach(k, l);
											//printf("\n5step%d %d,%d ---> %d,%d:\n", maxstep + 1 - stepleft, i, j, k, l);
											//Display();
											if (stepleft > 1)
											{
												SaveStep(i, j, k, l, x, stepleft);
												Compare(x, 0, stepleft, 0);
												//printf("5");
												SeekPath(stepleft - 1);
											}
											else
											{
												activeCount = Active(1);
												SaveStep(i, j, k, l, x, stepleft);
												Compare(x, activeCount, stepleft, 0);
												//printf("5");
											}
										}
									}
									DuplicatePos(stepleft + maxstep + maxstep + maxstep, 'r');
								}
							}
						}
						DuplicatePos(stepleft + maxstep + maxstep, 'r');
					}
				}
			}
		}
		DuplicatePos(stepleft + maxstep, 'r');
		y += Active(0);
	}
}