第15講 テトリス(4つのブロックを描くまで)
第8話 正方形ブロックを2次元for文を利用して描く
008を実現するコード例(変更部分のみ記載)
void block(){
  int x,y;
  for(x=0;x<2;x++){
    for(y=0;y<2;y++){
      chizu[2+x][3+y]=2;
    }
  }
  for (x = 0; x < 12; x++) {
    for (y = 0; y < 27; y++) {
      if (chizu[x][y] == 2) {
        DrawBox(20 * x, 20 * y, 20 * (x + 1) - 1, 20 * (y + 1) - 1, kiiro, true);
      }
    }
  }
}
コピペ用添付ファイル
  for(x=0;x<2;x++){
    for(y=0;y<2;y++){
      chizu[2+x][3+y]=2;
    }
  }
の部分を2次元for文でなく、1次元for文で済ます方法はあるでしょうか。
ある場合は、1次元for文で008を実現してください。
ヒントを書いておきましょう。
%と/を使います。
a%b(a % b と間に半角スペースを入れても同じです。)はaをbで割った余りを求める式です。
ですから、5 % 3 = 2 です。
a/b(これもa / b と間に半角スペースを入れても可です。)はaをbで割った商を求める式です。
ここで注意が必要です。
5 / 3 は 5 / 3 = 1 です。
なぜなら、テトリスでは整数型変数しか利用しないからです。
5 / 3 = 1.66666・・・ですが、
これを整数型の箱に入れるときには、
小数部分が捨てられて1に丸められます。
したがって、aとbが整数型変数の場合5 / 3 = 1 となるのです。

答えは、30行下。






















あります。
コード例
void block(){
  int x,y;
  int i;
  for(i=0;i<4;i++){
    chizu[2+i%2][3+i/2]=2;
  }
  for (x = 0; x < 12; x++) {
    for (y = 0; y < 27; y++) {
      if (chizu[x][y] == 2) {
        DrawBox(20 * x, 20 * y, 20 * (x + 1) - 1, 20 * (y + 1) - 1, kiiro, true);
      }
    }
  }
}
コピペ用添付ファイル

解説
コンピュータの動きを追うことをトレースといいます。
トレースしてみましょう。
i=0のとき、
    chizu[2+i%2][3+i/2]=2;
         ↓
    chizu[2+0%2][3+0/2]=2;
         ↓
    chizu[2+0][3+0]=2;
         ↓
    chizu[2][3]=2;
i=1のとき、
    chizu[2+i%2][3+i/2]=2;
         ↓
    chizu[2+1%2][3+1/2]=2;
         ↓
    chizu[2+1][3+0]=2;
         ↓
    chizu[3][3]=2;
i=2のとき、
    chizu[2+i%2][3+i/2]=2;
         ↓
    chizu[2+2%2][3+2/2]=2;
         ↓
    chizu[2+0][3+1]=2;
         ↓
    chizu[2][4]=2;
i=3のとき、
    chizu[2+i%2][3+i/2]=2;
         ↓
    chizu[2+3%2][3+3/2]=2;
         ↓
    chizu[2+1][3+1]=2;
         ↓
    chizu[3][4]=2;

結果だけ書くと
chizu[2][3]=2; chizu[3][3]=2;
chizu[2][4]=2; chizu[3][4]=2;
座標(x、y)は、

2 3 x
3 1 2
4 3 4
y

(2,3)→(3,3)→(2,4)→(3,4)の順で動きます。
では、
void block(){
  int x,y;
  int i;
  for(i=0;i<4;i++){
    
chizu[2+i/2][3+i%2]=2;
  }
  for (x = 0; x < 12; x++) {
    for (y = 0; y < 27; y++) {
      if (chizu[x][y] == 2) {
        DrawBox(20 * x, 20 * y, 20 * (x + 1) - 1, 20 * (y + 1) - 1, kiiro, true);
      }
    }
  }
}
コピペ用添付ファイル
とするとどのように動くでしょうか。




第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 入門 サイト 基礎から応用まで
本サイトトップへ