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

第7話 for(i=0;i<4;i++)chizu[x+p[s][k][i]][y+q[s][k][i]]=2; のトレースその1
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=0,k=2003の場合
char p[4][4][4] = {
-1,0,1,2,
0,0,0,0,
-2,-1,0,1,
   ・

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

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

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

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

i=2のとき、
char p[4][4][4] = {
-1,0,1,2,
0,0,0,0,
-2,-1,0,1,
   ・

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

   chizu[x+p[s][k][i]][y+q[s][k][i]]=2;
            ↓
   chizu[x+p[0][2][2]][y+q[0][2][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,
-2,-1,0,1,
   ・

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

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

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

s=1,k=3008の場合
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[1][3][0]][y+q[1][3][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[1][3][1]][y+q[1][3][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[1][3][2]][y+q[1][3][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[1][3][3]][y+q[1][3][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;
となり、確かに008を実現しています。




第6話へ  第8話へ
a

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

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

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