テトリスのようなフィールドで、上から降りてくるブロックをフィールドの一番下にいる自機から発射される弾で撃っていき、ブロックがフィールドの一番下まで来てしまったらゲームオーバー、ブロックが一番下まで来ないように1分間耐えられたらゲームクリアといったものを考えています。
その降りてくるブロックのことなのですが、思ったように動かせていません。
下記のように動かしたいです。
<現在>
■■■ ■ ■■■■■ ■■■ ■ ■■■■■ ■■■ ■ ■■■■■
→ ■■ ■■■■■■■■ → ■■ ■■■■■■■■
■■■■■ ■■ ■■
<目標>
■■■ ■ ■■■■■ ■■ ■■■■■■■■ ■■■■■ ■■ ■■
→ ■■■ ■ ■■■■■ → ■■ ■■■■■■■■
■■■ ■ ■■■■■
(ブロックのずれは関係ないです)
以下コードです
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h> // system()
#include <windows.h> // Sleep()
#define SIZE_X 14
#define SIZE_Y 21
#define WALL 1
#define BLOCK 4
int main()
{
int c = 0;
int wait_time = 600;
int x, y;
int bx, by; //ブロックの座標
int r;
int timecount = 60;
int field[SIZE_Y][SIZE_X] =
{
{1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
{1,0,0,0,0,0,0,0,0,0,0,0,1}, //センター
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1},
};
//ブロックを初期位置へ
bx = 1, by = 1;
while (1)
{
//BLOCKの動き
srand(time(NULL)); //横方向のBLOCK表示は乱数でランダムに
for (bx = 1; bx < 11; bx++) //1つずつ決めていく
{
r = rand() % 2;
switch (r)
{
case 0: //r=0なら表示しない
field[by][bx] = 0;
break;
case 1: //r=1なら表示
field[by][bx] = BLOCK;
break;
}
}
by++; //1座標進める
if (by == 19) //もしブロックが一番下まで到達したらゲームオーバー
{
printf("GAME OVER \n");
break;
}
//画面表示
for (y = 0; y < SIZE_Y; y++)
{
for (x = 0; x < SIZE_X; x++)
{
switch (field[y][x])
{
case 0:
printf(" ");
break;
case WALL: //壁
printf("■");
break;
case BLOCK: //ブロック
printf("□");
break;
}
}
printf("\n");
}
Sleep(wait_time); //少しの時間止める
system("cls"); //画面消去
}
return 0;
}
よろしくお願いいたします。