帮我生成一个连连看的c语言代码
时间: 2024-04-16 20:29:56 浏览: 12
当然可以帮你生成一个连连看的 C 语言代码。下面是一个简单的示例代码,实现了一个简单的连连看游戏:
```c
#include <stdio.h>
#include <stdbool.h>
#define ROWS 8
#define COLS 8
typedef struct {
int row;
int col;
} Point;
void printBoard(char board[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
printf("%c ", board[i][j]);
}
printf("\n");
}
}
bool isAdjacent(Point p1, Point p2) {
return (p1.row == p2.row && abs(p1.col - p2.col) == 1) || (p1.col == p2.col && abs(p1.row - p2.row) == 1);
}
bool isPathClear(Point p1, Point p2, char board[ROWS][COLS]) {
if (p1.row == p2.row) {
int minCol = p1.col < p2.col ? p1.col : p2.col;
int maxCol = p1.col > p2.col ? p1.col : p2.col;
for (int col = minCol + 1; col < maxCol; col++) {
if (board[p1.row][col] != ' ') {
return false;
}
}
} else if (p1.col == p2.col) {
int minRow = p1.row < p2.row ? p1.row : p2.row;
int maxRow = p1.row > p2.row ? p1.row : p2.row;
for (int row = minRow + 1; row < maxRow; row++) {
if (board[row][p1.col] != ' ') {
return false;
}
}
}
return true;
}
bool isBoardFull(char board[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] == ' ') {
return false;
}
}
}
return true;
}
bool canConnect(Point p1, Point p2, char board[ROWS][COLS]) {
if (board[p1.row][p1.col] != board[p2.row][p2.col]) {
return false;
}
if (!isAdjacent(p1, p2)) {
return false;
}
if (!isPathClear(p1, p2, board)) {
return false;
}
return true;
}
bool isGameOver(char board[ROWS][COLS]) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (board[i][j] != ' ') {
for (int k = 0; k < ROWS; k++) {
for (int l = 0; l < COLS; l++) {
if (board[k][l] != ' ' && !(i == k && j == l) && canConnect((Point){i, j}, (Point){k, l}, board)) {
return false;
}
}
}
}
}
}
return true;
}
void removeTiles(Point p1, Point p2, char board[ROWS][COLS]) {
board[p1.row][p1.col] = ' ';
board[p2.row][p2.col] = ' ';
}
bool isValidMove(Point p1, Point p2, char board[ROWS][COLS]) {
if (p1.row < 0 || p1.row >= ROWS || p1.col < 0 || p1.col >= COLS) {
return false;
}
if (p2.row < 0 || p2.row >= ROWS || p2.col < 0 || p2.col >= COLS) {
return false;
}
if (board[p1.row][p1.col] == ' ' || board[p2.row][p2.col] == ' ') {
return false;
}
if (!canConnect(p1, p2, board)) {
return false;
}
return true;
}
int main() {
char board[ROWS][COLS] = {
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'},
{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'},
{'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'},
{'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P'},
{'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X'},
{'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X'},
{'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z'},
{'Y', 'Z', 'Y', 'Z', 'Y', 'Z', 'Y', 'Z'}
};
printBoard(board);
while (!isGameOver(board)) {
Point p1, p2;
printf("Enter the row and column of the first tile: ");
scanf("%d %d", &p1.row, &p1.col);
printf("Enter the row and column of the second tile: ");
scanf("%d %d", &p2.row, &p2.col);
if (isValidMove(p1, p2, board)) {
removeTiles(p1, p2, board);
printf("Valid move! Tiles removed.\n");
} else {
printf("Invalid move! Please try again.\n");
}
printBoard(board);
}
printf("Game over!\n");
return 0;
}
```
这是一个简单的连连看游戏代码,游戏板由一个 8x8 的字符数组表示,每个元素代表一个方块。你可以根据需要进行修改和扩展。希望能对你有所帮助!