サイコロの面を求める

Bonjour!!

 

学習中、サイコロの面を求めるプログラムの課題がありました。

サイコロを上下左右に動かした際に表に出てくる数字を求めるものです。

最初はわりとおっイケるイケるとか思ってましたが。いったんコードを書き終えて

確認してみると、解凍例通りに動かない。。。。

悩んでも中々法則性を思いつかないところで、グーグル先生に聞いてみました。

 

 

結論から言うと上面に出てくる数字を変数に格納するのではく、

配列を使って上下左右に動かした場合分けで配列の数字を入れ替えていくやり方にたどり着きました。

 

 

  1. #include <stdio.h>
  2. int main(void){
  3.   char direction[1];
  4.   direction[0]=’D’; //U=UP R:Right D:DOWN L:Left
  5.   //サイコロ展開図
  6.   // 2
  7.   //3 1 4 6
  8.   // 5
  9.   int dice[6]={1, 2, 3, 4, 5, 6 };
  10.   int temp=0;
  11.       switch(direction[0]){
  12.           case ‘U’: //上の場合
  13.           temp=dice[0]; //tempに1を代入
  14.           dice[0]=dice[4]; //1に3を代入
  15.           dice[4]=dice[5]; //5に6を代入
  16.           dice[5]=dice[1]; //6に2を代入
  17.           dice[1]=temp; //2に1を代入
  18.           break;
  19.           case ‘R’:
  20.           temp=dice[0];
  21.           dice[0]=dice[2];
  22.           dice[2]=dice[5];
  23.           dice[5]=dice[3];
  24.           dice[3]=temp;
  25.           break;
  26.           case ‘D’:
  27.           temp=dice[0];
  28.           dice[0]=dice[1];
  29.           dice[1]=dice[5];
  30.           dice[5]=dice[4];
  31.           dice[4]=temp;
  32.           break;
  33.           case ‘L’:
  34.           temp=dice[0];
  35.           dice[0]=dice[3];
  36.           dice[3]=dice[5];
  37.           dice[5]=dice[2];
  38.           dice[2]=temp;
  39.           break;
  40.       }
  41.   printf(“%d\n”,dice[0]);
  42.   return 0;
  43. }

 

最初表に出てくる面の数字だけ記憶させてどうにかしようとしていたので、

なかなか難しかったです。

 

ではAu revoir!!