#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 4 // 定义矩阵大小为4*4
// 定义方向常量
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
// 定义方块结构体
struct block {
int value; // 方块的数值
int merged; // 是否已经合并过
};
// 初始化矩阵
void initMatrix(struct block matrix[][SIZE]) {
int i, j;
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
matrix[i][j].value = 0;
matrix[i][j].merged = 0;
}
}
}
// 在矩阵中随机生成一个新的方块
void generateBlock(struct block matrix[][SIZE]) {
int i, j;
int emptyCount = 0; // 记录空位数量
int emptyIndex[SIZE * SIZE][2]; // 记录空位坐标
// 扫描矩阵,记录空位坐标
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
if (matrix[i][j].value == 0) {
emptyIndex[emptyCount][0] = i;
emptyIndex[emptyCount][1] = j;
emptyCount++;
}
}
}
if (emptyCount == 0) {
// 如果没有空位,游戏结束
printf("Game over!\n");
exit(0);
} else {
// 在空位中随机选一个生成新方块
srand((unsigned)time(NULL));
int index = rand() % emptyCount;
matrix[emptyIndex[index][0]][emptyIndex[index][1]].value = (rand() % 2 + 1) * 2;
}
}
// 显示矩阵
void displayMatrix(struct block matrix[][SIZE]) {
int i, j;
for (i = 0; i < SIZE; i++) {
for (j = 0; j < SIZE; j++) {
printf("%4d", matrix[i][j].value);
}
printf("\n");
}
printf("\n");
}
// 将矩阵沿指定方向移动
void moveMatrix(struct block matrix[][SIZE], int direction) {
int i, j, k;
int mergedCount; // 记录合并数量
int merged[SIZE]; // 记录每行/列是否已经合并过
c语言大作业之小游戏2048
最新推荐文章于 2023-08-31 15:42:31 发布