写一个使用C语言的俄罗斯方块程序
时间: 2023-09-16 14:13:37 浏览: 61
好的,以下是一个简单的使用C语言实现的俄罗斯方块程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <windows.h>
#define WIDTH 10
#define HEIGHT 20
int board[HEIGHT][WIDTH];
int current_block[4][4];
int current_x, current_y;
int score = 0;
void init_board()
{
int i, j;
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
board[i][j] = 0;
}
}
}
void init_block()
{
int blocks[][4][4] = {
{
{0,0,0,0},
{0,1,1,0},
{0,1,1,0},
{0,0,0,0}
},
{
{0,0,0,0},
{0,0,1,0},
{0,1,1,1},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,0,0},
{0,1,1,1},
{0,0,0,0}
},
{
{0,0,0,0},
{0,0,0,1},
{0,1,1,1},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,1,0},
{0,0,1,1},
{0,0,0,0}
},
{
{0,0,0,0},
{0,0,1,1},
{0,1,1,0},
{0,0,0,0}
},
{
{0,0,0,0},
{0,1,1,1},
{0,0,1,0},
{0,0,0,0}
}
};
int i, j;
int rand_num = rand() % 7;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
current_block[i][j] = blocks[rand_num][i][j];
}
}
current_x = WIDTH / 2 - 2;
current_y = 0;
}
void print_board()
{
int i, j;
system("cls");
printf("Score: %d\n", score);
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
if (board[i][j] == 0) {
printf(".");
} else {
printf("*");
}
}
printf("\n");
}
}
void print_block()
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (current_block[i][j] == 0) {
printf(" ");
} else {
printf("*");
}
}
printf("\n");
}
}
int check_collision(int x, int y)
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (current_block[i][j] == 1 && board[y+i][x+j] == 1) {
return 1;
}
}
}
return 0;
}
void merge_block()
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (current_block[i][j] == 1) {
board[current_y+i][current_x+j] = 1;
}
}
}
}
void check_lines()
{
int i, j;
for (i = HEIGHT-1; i >= 0; i--) {
int full = 1;
for (j = 0; j < WIDTH; j++) {
if (board[i][j] == 0) {
full = 0;
break;
}
}
if (full) {
int k;
score += 10;
for (k = i; k > 0; k--) {
for (j = 0; j < WIDTH; j++) {
board[k][j] = board[k-1][j];
}
}
i++;
}
}
}
void game_over()
{
printf("Game Over!\n");
printf("Your Score: %d\n", score);
exit(0);
}
void game_loop()
{
while (1) {
init_block();
if (check_collision(current_x, current_y)) {
game_over();
}
while (1) {
print_board();
print_block();
Sleep(500);
if (_kbhit()) {
int c = _getch();
if (c == 'a' && !check_collision(current_x-1, current_y)) {
current_x--;
} else if (c == 'd' && !check_collision(current_x+1, current_y)) {
current_x++;
} else if (c == 's') {
break;
}
}
if (check_collision(current_x, current_y+1)) {
break;
} else {
current_y++;
}
}
merge_block();
check_lines();
}
}
int main()
{
srand(time(NULL));
init_board();
game_loop();
return 0;
}
```
这个程序使用了 Windows API 中的函数 `Sleep()` 和 `_kbhit()`,所以只能在 Windows 系统下运行。如果要在其他系统上运行,可以替换这些函数。