做一个c++的连连看代码
时间: 2024-05-03 10:20:19 浏览: 10
好的,以下是一个简单的C语言连连看代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
#define N 6
#define M 8
int board[N+2][M+2];
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
void init_board() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
board[i][j] = rand() % 6 + 1;
}
}
}
bool dfs(int x1, int y1, int x2, int y2) {
if (board[x1][y1] != board[x2][y2]) return false;
if (x1 == x2 && y1 == y2) return true;
for (int i = 0; i < 4; i++) {
int nx1 = x1 + dir[i][0], ny1 = y1 + dir[i][1];
int nx2 = x2 + dir[i][0], ny2 = y2 + dir[i][1];
if (nx1 == nx2 && ny1 == ny2) continue;
if (board[nx1][ny1] == 0 && board[nx2][ny2] == 0) continue;
if (board[nx1][ny1] == board[nx2][ny2] && dfs(nx1, ny1, nx2, ny2)) return true;
}
return false;
}
bool check(int x1, int y1, int x2, int y2) {
if (board[x1][y1] != board[x2][y2]) return false;
if (x1 == x2 || y1 == y2) return true;
if (dfs(x1, y1, x2, y2)) return true;
return false;
}
void remove_block(int x1, int y1, int x2, int y2) {
board[x1][y1] = 0;
board[x2][y2] = 0;
}
void drop_block() {
for (int i = N; i >= 1; i--) {
bool full = true;
for (int j = 1; j <= M; j++) {
if (board[i][j] == 0) {
full = false;
break;
}
}
if (full) {
for (int j = 1; j <= M; j++) {
for (int k = i; k > 1; k--) {
board[k][j] = board[k-1][j];
}
board[1][j] = rand() % 6 + 1;
}
i++;
}
}
}
void print_board() {
for (int i = 1; i <= N; i++) {
for (int j = 1; j <= M; j++) {
printf("%d ", board[i][j]);
}
printf("\n");
}
}
int main() {
srand(time(NULL));
init_board();
print_board();
while (true) {
int x1, y1, x2, y2;
printf("请输入第一个坐标(x1,y1):");
scanf("%d%d", &x1, &y1);
printf("请输入第二个坐标(x2,y2):");
scanf("%d%d", &x2, &y2);
if (check(x1, y1, x2, y2)) {
remove_block(x1, y1, x2, y2);
drop_block();
print_board();
} else {
printf("无法消除,请重新输入坐标!\n");
}
}
return 0;
}
```
该代码会生成一个N行M列的棋盘,棋盘上的每个格子随机填充1~6之间的数字。玩家需要输入要消除的两个方块的坐标,如果它们满足以下任意一个条件,就可以消除它们:
1. 它们的数字相同;
2. 它们在同一行或同一列上,它们之间没有其他方块阻挡;
3. 它们之间有一条不超过两个直角拐弯的路径可以连接起来,路径上没有其他方块阻挡。
如果成功消除了这两个方块,它们就会消失,上面的方块会往下掉落填补空缺。每次成功消除一组方块后,程序会重新生成一个新的棋盘并打印出来,玩家需要在新的棋盘上继续消除方块,直到棋盘上没有可消除的方块为止。