第17講 テトリス開発(ゲームオーバー設定まで)第5話 ブロックを時間とともに自動的に落としていく

ブロックを時間とともに自動的に落としていくコード例(変更部分だけ記載)
グローバル変数
int x=4,y; //整数型の箱xとyを用意
int hajimenojikoku; //始めの時刻を入れる整数型の箱

void block(){
  int i,j,l;
  y=(GetNowCount()-hajimenojikoku)/500;
  for(i=0;i<4;i++){
    if(y+q[s][k][i]>0)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:作動
      hajimenojikoku=GetNowCount();
    }
  }
}
コピペ用添付ファイル

  y=(GetNowCount()-hajimenojikoku)/1000;
だと、1秒でだけ進みます。
は、
002
003
004
の1区画の1です。
これだと遅く感じる場合は、
  y=(GetNowCount()-hajimenojikoku)/500;
などとします。
これだと0.5秒ですすみますから、
1秒で2進むことになります。
速さは、割る数に反比例しますから、
割る数が小さくなるほど速くなり、
大きくなるほど遅くなります。
という説明を聞いても、高校生ぐらいの人でも納得できない人は多いと思います。
速くするには、割る数を大きくすればよいのか、小さくすればよいのか、
迷ったときは、両方試してみればよいのです。
最初の画面をメニュー画面としていますが、
その理由は、難易度をここで選べるように将来するからです。
難易度は
  y=(GetNowCount()-hajimenojikoku)/割る数;
の割る数を調整することによって変えることができます。
ブロックが速く落ちてくるほど難易度はむずかしくなり、
遅いほど易しくなります。

第6話の課題は、床またはブロックに着いたブロックを残すことです。

これを実現するには、
新しいグローバル変数
char chizumodosu[12][27]; //地図配置を元に戻す 1:可 0:不可
を用意して、
void chizusakusei() {
  int gazou = LoadGraph("画像/kb00.png");
  int i,j;
  for (i = 0; i < 12; i++) {
    for (j = 0; j < 27; j++) {
      chizu[i][j] = 0;
    }
  }
を改良します。
ある条件のときだけ、
0に戻すことを可とするのです。
char chizumodosu[12][27];
の初期化は、新しい社員syokika()を雇い、
その社員にやらせて下さい。
最初は配列のすべてを1に初期化して下さい。
また、
  srand((unsigned) time(NULL)); //乱数の系列決定するシード値を現在時刻から取得
  hajimenojikoku=GetNowCount(); //ゲーム起動時の時刻をゲット
もsyokika()に移動して下さい。
要するに社員syokika()は、ゲームの最初の設定を担当する社員です。

ヒントを書いておくと、今回はy>=?のような単純なものではありません。




第4話へ  第6話へ
a

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

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

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