サイコロの面を求める
Bonjour!!
学習中、サイコロの面を求めるプログラムの課題がありました。
サイコロを上下左右に動かした際に表に出てくる数字を求めるものです。
最初はわりとおっイケるイケるとか思ってましたが。いったんコードを書き終えて
確認してみると、解凍例通りに動かない。。。。
悩んでも中々法則性を思いつかないところで、グーグル先生に聞いてみました。
結論から言うと上面に出てくる数字を変数に格納するのではく、
配列を使って上下左右に動かした場合分けで配列の数字を入れ替えていくやり方にたどり着きました。
- #include <stdio.h>
- int main(void){
- char direction[1];
- direction[0]=’D’; //U=UP R:Right D:DOWN L:Left
- //サイコロ展開図
- // 2
- //3 1 4 6
- // 5
- int dice[6]={1, 2, 3, 4, 5, 6 };
- int temp=0;
- switch(direction[0]){
- case ‘U’: //上の場合
- temp=dice[0]; //tempに1を代入
- dice[0]=dice[4]; //1に3を代入
- dice[4]=dice[5]; //5に6を代入
- dice[5]=dice[1]; //6に2を代入
- dice[1]=temp; //2に1を代入
- break;
- case ‘R’:
- temp=dice[0];
- dice[0]=dice[2];
- dice[2]=dice[5];
- dice[5]=dice[3];
- dice[3]=temp;
- break;
- case ‘D’:
- temp=dice[0];
- dice[0]=dice[1];
- dice[1]=dice[5];
- dice[5]=dice[4];
- dice[4]=temp;
- break;
- case ‘L’:
- temp=dice[0];
- dice[0]=dice[3];
- dice[3]=dice[5];
- dice[5]=dice[2];
- dice[2]=temp;
- break;
- }
- printf(“%d\n”,dice[0]);
- return 0;
- }
最初表に出てくる面の数字だけ記憶させてどうにかしようとしていたので、
なかなか難しかったです。
ではAu revoir!!