我想在C中做一個簡單的俄羅斯方塊遊戲。我來到輸入部分,遇到了麻煩。我製作了一個循環,每秒鐘都會將新片移動。現在我希望這種情況發生,但我希望玩家能夠按下一個按鈕來移動棋子,當然這也是遊戲的目標。這兩件事不應該干涉。遊戲循環是繼續執行循環,同時有可能採取輸入
for (i=1;i<100;i++)
{
printBoard(¤t);
if (move(¤t))
spawn(¤t);
sleep(1);
}
這裏函數移動,移動下降的塊向下一個單元,並返回1,如果該塊撞到地面或另一片在這種情況下,新的塊經由產卵功能衍生。印刷板只是將板打印到終端。做這個的最好方式是什麼?
在此先感謝
爲了完整起見,這裏是完整的代碼到目前爲止
#include <stdio.h>
#include <math.h>
#define height 20
#define width 15
typedef struct board{
int x[height][width];
int score;
} board;
void printBoard(board * current){
int i,j;
for (i=0;i<40;i++)
printf("\n");
printf("Score : %d\n", current->score);
for (i=0;i<height-1;i++)
{
printf("|");
for (j=0;j<width;j++)
{
if (current->x[i][j] == 0)
printf(" ");
else
printf("x");
}
printf("|\n");
}
for (i=0;i<width+2;i++)
printf("T");
printf("\n");
}
void spawn(board * current){
current->x[0][4] = 2;
current->x[1][4] = 2;
current->x[1][5] = 2;
current->x[1][6] = 2;
current->x[1][7] = 2;
}
int move(board * current){ // returns 1 if block hits ground
int i,j;
for (i=(height-1);i>0;i--)
for (j=0;j<width;j++)
if (current->x[i-1][j] == 2){
if (i==(height-1) || current->x[i][j] == 1){
goto DONE;
}
current->x[i][j] = 2;
current->x[i-1][j] = 0;
}
return 0;
DONE:
for (i=0;i<height;i++)
for (j=0;j<width;j++)
if (current->x[i][j] == 2)
current->x[i][j] = 1;
return 1;
}
int main(){
board current;
current.score = 0;
int i,j;
for (i=0;i<height;i++)
for (j=0;j<width;j++)
current.x[i][j] = 0;
spawn(¤t);
for (i=1;i<100;i++)
{
printBoard(¤t);
if (move(¤t))
spawn(¤t);
sleep(1);
}
return 0;
}