编写C语言开心消消乐的代码
时间: 2023-05-19 21:04:50 浏览: 261
C#编码实现的开心消消乐游戏
非常感谢您的提问,以下是C语言开心消消乐的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 6
#define COL 6
void init_board(int board[][COL]);
void print_board(int board[][COL]);
void swap(int *a, int *b);
void shuffle(int board[][COL]);
int eliminate(int board[][COL]);
void drop(int board[][COL]);
int main()
{
int board[ROW][COL];
int score = 0;
srand((unsigned)time(NULL)); // 初始化随机数种子
init_board(board); // 初始化游戏面板
shuffle(board); // 打乱游戏面板
print_board(board); // 输出游戏面板
while (eliminate(board)) // 消除相同的方块
{
score += 10; // 每消除一个方块得10分
drop(board); // 方块掉落
shuffle(board); // 打乱游戏面板
print_board(board); // 输出游戏面板
}
printf("Game over! Your score is %d.\n", score);
return 0;
}
void init_board(int board[][COL])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
board[i][j] = rand() % 5 + 1; // 随机生成1~5的数字
}
}
}
void print_board(int board[][COL])
{
int i, j;
printf(" ");
for (i = 0; i < COL; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 0; i < ROW; i++)
{
printf("%d ", i);
for (j = 0; j < COL; j++)
{
printf("%d ", board[i][j]);
}
printf("\n");
}
}
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
void shuffle(int board[][COL])
{
int i, j;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
int x = rand() % ROW;
int y = rand() % COL;
swap(&board[i][j], &board[x][y]); // 随机交换两个方块
}
}
}
int eliminate(int board[][COL])
{
int i, j;
int flag = 0; // 标记是否有方块被消除
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (board[i][j] == 0) // 如果该方块已经被消除了,跳过
{
continue;
}
int k;
int count = 1; // 计算相同数字的个数
// 横向扫描
for (k = j + 1; k < COL && board[i][k] == board[i][j]; k++)
{
count++;
}
if (count >= 3) // 如果相同数字的个数大于等于3,消除这些方块
{
flag = 1;
for (k = j; k < j + count; k++)
{
board[i][k] = 0;
}
}
count = 1;
// 纵向扫描
for (k = i + 1; k < ROW && board[k][j] == board[i][j]; k++)
{
count++;
}
if (count >= 3) // 如果相同数字的个数大于等于3,消除这些方块
{
flag = 1;
for (k = i; k < i + count; k++)
{
board[k][j] = 0;
}
}
}
}
return flag;
}
void drop(int board[][COL])
{
int i, j;
for (j = 0; j < COL; j++)
{
int count = 0; // 计算该列需要掉落的方块个数
for (i = ROW - 1; i >= 0; i--)
{
if (board[i][j] == 0) // 如果该方块已经被消除了,计数器加1
{
count++;
}
else if (count > 0) // 如果该方块没有被消除,但是上面有被消除的方块,将该方块掉落
{
board[i + count][j] = board[i][j];
board[i][j] = 0;
}
}
}
}
阅读全文