第17講 テトリス開発(ゲームオーバー設定まで)
第3話 ブロックが床に着いたの正確な判定
ブロックが床に付いたの正確な判定コード例(変更部分だけ記載)
void block(){
  int i,j,l;
  if (jyu(KEY_INPUT_DOWN) != 0)y++;
  for(i=0;i<4;i++)chizu[x+p[s][k][i]][y+q[s][k][i]]=2+s;
  for(i=0;i<4;i++){
    for (j = 0; j < 12; j++) {
      for (l = 0; l < 27; l++) {
        if (chizu[j][l] == 2 + i) {
          if(i==0)  DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, kiiro, true);
          if(i==1)  DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, mizuiro, true);
          if(i==2)  DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, aka, true);
          if(i==3)  DrawBox(20 * j, 20 * l, 20 * (j + 1) - 1, 20 * (l + 1) - 1, ao, true);
        }
      }
    }
  }
  for(i=0;i<4;i++){
    if(y+q[s][k][i]>=25){
      t=1; //0:作動停止 1:作動
      y=3;
    }
  }

}
コピペ用添付ファイル

初心者の方にとっては、超難問ですから、
トレースすることによって解説してみましょう。
といっても16パターンありますので、
一例だけ選んで、トレースします。
s=0,k=3004の場合
char q[4][4][4] = {
   ・
-2,-1,0,1,
   ・

i=0のとき、 
   if(y+q[s][k][i]>=25)
       ↓
   if(y+q[s][k][0]>=25)
       ↓
   if(y+(-2)>=25)
       ↓
   if(y-2>=25)
ということで、004一番上の正方形のy座標が上限
(テトリスの画面でいうと下限です。yの値の観点からいっています。
画面の下限は、yの値の最大値=上限となります。
以下の記述も同様ですので、注意して下さい。)

の25を超えてないか比較しています。
i=1のとき、
char q[4][4][4] = {
0,0,0,0,
-1,0,1,2,
-2,-1,0,1,
   ・

   if(y+q[s][k][i]>=25)
       ↓
   if(y+q[s][k][1]>=25)
       ↓
   if(y+(-1)>=25)
       ↓
   if(y-1>=25)
ということで、004上から2番目の正方形のy座標が上限の25を超えてないか比較しています。
i=2のとき、
char q[4][4][4] = {
0,0,0,0,
-1,0,1,2,
-2,-1,0,1,
   ・

   if(y+q[s][k][i]>=25)
       ↓
   if(y+q[s][k][2]>=25)
       ↓
   if(y+0>=25)
       ↓
   if(y>=25)
ということで、004下から2番目の正方形のy座標が上限の25を超えてないか比較しています。  
i=3のとき、
char q[4][4][4] = {
0,0,0,0,
-1,0,1,2,
-2,-1,0,1,
   ・

   if(y+q[s][k][i]>=25)
       ↓
   if(y+q[s][k][3]>=25)
       ↓
   if(y+1>=25)
       ↓
   if(y+1>=25)
ということで、004一番下の正方形のy座標が上限の25を超えてないか比較しています。
これで、長方形ブロックを構成するすべての正方形が上限を超えてないかを判定したことになり、
正確な判定ができるわけです。
ポイントはブロックのすべての正方形について、上限を超えていないかを調べることです。

くどくなりますからトレースは1例だけにしましたが、
皆さんは、16パターンのいくつかを選んで、是非トレースして下さい。

さて、次は001002003004
のように天井をより下になった部分だけを描くようにするという課題です。




第2話へ  第4話へ
a

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

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

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