用c需要写一个好玩的小游戏
时间: 2024-02-15 07:01:55 浏览: 18
当然可以,你可以尝试编写经典的贪吃蛇游戏,也可以编写一个简单的俄罗斯方块戏。以下是一个简单的俄罗斯方块游戏的代码示例供你参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <Windows.h>
#define ROW 22
#define COL 12
int game_board[ROW][COL] = { 0 }; // 游戏面板数组
int current_block[4][4] = { 0 }; // 当前方块数组
int current_block_type = 0; // 当前方块类型
int current_block_x = 0; // 当前方块的x坐标
int current_block_y = 0; // 当前方块的y坐标
int score = 0; // 得分
// 初始化游戏
void init_game()
{
// 初始化面板
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (i == ROW - 1 || j == 0 || j == COL - 1) {
game_board[i][j] = 1;
}
}
}
// 随机生成第一个方块
srand(time(NULL));
current_block_type = rand() % 7;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
current_block[i][j] = blocks[current_block_type][i][j];
}
}
current_block_x = 4;
current_block_y = 0;
// 清屏
system("cls");
}
// 绘制游戏面板
void draw_game_board()
{
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (game_board[i][j] == 1) {
printf("#");
} else if (game_board[i][j] == 2) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
}
// 绘制当前方块
void draw_current_block()
{
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (current_block[i][j] == 1) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
}
// 移动方块
void move_block(int x, int y)
{
current_block_x += x;
current_block_y += y;
// 判断是否可以移动
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (current_block[i][j] == 1) {
if (game_board[current_block_y + i][current_block_x + j] == 1 ||
game_board[current_block_y + i][current_block_x + j] == 2) {
// 方块不能移动,撤销移动
current_block_x -= x;
current_block_y -= y;
return;
}
}
}
}
}
// 旋转方块
void rotate_block()
{
int temp_block[4][4];
// 保存原始方块
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
temp_block[i][j] = current_block[i][j];
}
}
// 旋转方块
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
current_block[i][j] = temp_block[3 - j][i];
}
}
// 判断是否可以旋转
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (current_block[i][j] == 1) {
if (game_board[current_block_y + i][current_block_x + j] == 1 ||
game_board[current_block_y + i][current_block_x + j] == 2) {
// 方块不能旋转,撤销旋转
for (int k = 0; k < 4; k++) {
for (int l = 0; l < 4; l++) {
current_block[k][l] = temp_block[k][l];
}
}
return;
}
}
}
}
}
// 消除行
void clear_line()
{
for (int i = ROW - 2; i >= 0; i--) {
int flag = 1;
for (int j = 1; j < COL - 1; j++) {
if (game_board[i][j] != 2) {
flag = 0;
break;
}
}
if (flag == 1) {
// 将该行以上的所有行下移一行
for (int k = i; k > 0; k--) {
for (int j = 1; j < COL - 1; j++) {
game_board[k][j] = game_board[k - 1][j];
}
}
score += 10;
i++; // 继续判断该行是否被消除
}
}
}
// 判断游戏是否结束
int is_game_over()
{
for (int j = 1; j < COL - 1; j++) {
if (game_board[0][j] == 2) {
return 1;
}
}
return 0;
}
// 主函数
int main()
{
init_game();
while (1) {
// 绘制游戏
draw_game_board();
draw_current_block();
// 获取用户输入
if (_kbhit()) {
int key = _getch();
switch (key) {
case 'a':
move_block(-1, 0);
break;
case 'd':
move_block(1, 0);
break;
case 's':
move_block(0, 1);
break;
case 'w':
rotate_block();
break;
}
}
// 更新游戏状态
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (current_block[i][j] == 1) {
game_board[current_block_y + i][current_block_x + j] = 2;
}
}
}
clear_line();
// 随机生成下一个方块
current_block_type = rand() % 7;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
current_block[i][j] = blocks[current_block_type][i][j];
}
}
current_block_x = 4;
current_block_y = 0;
// 判断游戏是否结束
if (is_game_over()) {
break;
}
// 等待一段时间
Sleep(100);
}
// 游戏结束
system("cls");
printf("Game Over!\n");
printf("Score: %d\n", score);
return 0;
}
```
该代码使用了 Windows.h 头文件中的 Sleep() 函数来控制游戏速度。如果使用的是 Linux 或 macOS 系统,可以使用 usleep() 函数来代替。