简易连连看:给定一个2nx2n的的方阵网格游戏盘面,每个格子中放置一些符号,这些符号一定是成对出现的,同一个符一号可能不止一对。程序读入玩家给出的一对位置(x1,y1)、(x2,y2),判断这两个位置」上的符号是否匹配。如果匹配成功,则将两个符号消为“*”并输出消去后的盘面;否则输出“Uh-oh”。若匹配错误达到3次,则输出“Game Over”并结束游戏。或者当全部行符号匹配成功,则输出“Congratulations!”,然后结束游戏。试编写相应程序。用c
时间: 2023-12-30 21:03:05 浏览: 123
以下是一个简单的实现,使用二维数组存储盘面,每次玩家输入两个位置,判断是否匹配成功,并更新盘面。同时记录错误次数和已匹配的对数,直到所有对数都匹配成功或错误次数达到3次为止。
```c
#include <stdio.h>
#define N 4 // 方阵大小
void print_board(char board[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
int main() {
char board[N][N]; // 盘面
int matched = 0; // 已匹配对数
int errors = 0; // 错误次数
// 初始化盘面
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
board[i][j] = '*';
}
}
// 随机放置符号
for (char c = 'A'; c <= 'Z'; c++) {
for (int k = 0; k < 2; k++) {
int i, j;
do {
i = rand() % N;
j = rand() % N;
} while (board[i][j] != '*');
board[i][j] = c;
}
}
// 开始游戏
while (matched < N*N/2 && errors < 3) {
print_board(board);
printf("请输入两个位置(行 列),用空格分隔:");
int x1, y1, x2, y2;
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
if (x1 < 0 || x1 >= N || y1 < 0 || y1 >= N ||
x2 < 0 || x2 >= N || y2 < 0 || y2 >= N) {
printf("位置超出范围,请重新输入。\n");
continue;
}
if (board[x1][y1] == '*' || board[x2][y2] == '*') {
printf("位置无符号,请重新输入。\n");
continue;
}
if (board[x1][y1] == board[x2][y2]) {
board[x1][y1] = board[x2][y2] = '*';
matched++;
printf("匹配成功,已消去 %d 对符号。\n", matched);
} else {
errors++;
printf("匹配失败,错误次数 %d。\n", errors);
if (errors == 3) {
printf("Game Over!\n");
break;
}
}
}
if (matched == N*N/2) {
printf("Congratulations!\n");
}
return 0;
}
```
注意:这个实现中,位置是从0开始计数的,即第一行第一列的位置是(0, 0),最后一行最后一列的位置是(N-1, N-1)。
阅读全文