第16講 テトリス開発(4つのブロックを一元的に描くまで)

第8話 for(i=0;i<4;i++)chizu[x+p[s][k][i]][y+q[s][k][i]]=2; のトレースその2
char p[4][4][4] = {
-1,0,1,2,
0,0,0,0,
-2,-1,0,1,
0,0,0,0,

0,1,1,0,
0,1,1,0,
-1,0,0,-1,
-1,0,0,-1,

0,0,0,1,
0,0,1,2,
-1,0,0,0,
-2,-1,0,0,

0,0,1,1,
-1,0,0,1,
-1,-1,0,0,
-1,0,0,1
};
char q[4][4][4] = {
0,0,0,0,
-1,0,1,2,
0,0,0,0,
-2,-1,0,1,

-1,-1,0,0,
0,0,1,1,
0,0,1,1,
-1,-1,0,0,

-2,-1,0,0,
1,0,0,0,
0,0,1,2,
0,0,0,-1,

-1,0,0,1,
1,1,0,0,
-1,0,0,1,
0,0,-1,-1
};

for(i=0;i<4;i++)chizu[x+p[s][k][i]][y+q[s][k][i]]=2;

s=2,k=0009の場合
char p[4][4][4] = {
   ・
0,0,0,1,
   ・

char q[4][4][4] = {
   ・
-2,-1,0,0,
   ・

i=0のとき、 
   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[2][0][0]][y+q[2][0][0]]=2;
            ↓
   chizu[x+0][y+(-2)]=2;
            ↓
   chizu[x][y-2]=2;
i=1のとき、
char p[4][4][4] = {
   ・
0,0,0,1,
   ・

char q[4][4][4] = {
   ・
-2,-1,0,0,
   ・

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[2][0][1]][y+q[2][0][1]]=2;
            ↓
   chizu[x+0][y+(-1)]=2;
            ↓
   chizu[x][y-1]=2;                 
i=2のとき、
char p[4][4][4] = {
   ・
0,0,0,1,
   ・

char q[4][4][4] = {
   ・
-2,-1,0,0,
   ・

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[2][0][2]][y+q[2][0][2]]=2;
            ↓
   chizu[x+0][y+0]=2;
            ↓
   chizu[x][y]=2;  
i=3のとき、
char p[4][4][4] = {
   ・
0,0,0,1,
   ・

char q[4][4][4] = {
   ・
-2,-1,0,0,
   ・

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[2][0][3]][y+q[2][0][3]]=2;
            ↓
   chizu[x+1][y+0]=2;
            ↓
   chizu[x+1][y]=2;

for文でカバーできたのは、
chizu[x][y-2]=2; chizu[x][y-1]=2; chizu[x][y]=2; chizu[x+1][y]=2;
となり、確かに009を実現しています。

s=3,k=1014の場合
char p[4][4][4] = {
   ・
-1,0,0,1,
   ・

char q[4][4][4] = {
   ・
1,1,0,0,
   ・

i=0のとき、 
   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[3][1][0]][y+q[3][1][0]]=2;
            ↓
   chizu[x+(-1)][y+1]=2;
            ↓
   chizu[x-1][y+1]=2;
i=1のとき、
char p[4][4][4] = {
   ・
-1,0,0,1,
   ・
char q[4][4][4] = {
   ・
1,1,0,0,
   ・
   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[3][1][1]][y+q[3][1][1]]=2;
            ↓
   chizu[x+
0][y+1]=2;
            ↓
   chizu[x][y+1]=2;                 
i=2のとき、
char p[4][4][4] = {
-1,0,1,2,
0,0,0,0,
-1,0,0,1,
   ・

char q[4][4][4] = {
   ・
1,1,0,0,
   ・

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[3][1][2]][y+q[3][1][2]]=2;
            ↓
   chizu[x+0][y+0]=2;
            ↓
   chizu[x][y]=2;  
i=3のとき、
char p[4][4][4] = {
-1,0,1,2,
0,0,0,0,
-1,0,0,1,
   ・

char q[4][4][4] = {
0,0,0,0,
-1,0,1,2,
1,1,0,0,
   ・

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[3][1][3]][y+q[3][1][3]]=2;
            ↓
   chizu[x+1][y+0]=2;
            ↓
   chizu[x+1][y]=2;

for文でカバーできたのは、
chizu[x-1][y+1]=2; chizu[x][y+1]=2; chizu[x][y]=2; chizu[x+1][y]=2;
となり、確かに014を実現しています。

以上のトレースは、16パターンの内の4通りをやったにすぎません。
残り全部はやる必要はないでしょうが、
自分で納得できるまで、いくかの場合でトレースをして下さい。




第7話へ  第9話へ
a

初心者のための excel 2016 マクロ VBA 入門講義 基礎から応用まで
vc++ c言語 c++ 入門 初心者 基礎から応用まで
eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門

数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
本サイトトップへ