用C语言设计扫雷小游戏320行代码
时间: 2025-01-25 21:12:07 浏览: 21
好的,下面是一个用C语言设计扫雷小游戏的示例代码。这个示例代码大约有320行,包含了游戏的基本功能,如初始化雷区、显示雷区、处理用户输入、判断游戏胜负等。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 9
#define MINES 10
typedef struct {
int isMine;
int revealed;
int flagged;
} Cell;
void initializeBoard(Cell board[SIZE][SIZE]);
void placeMines(Cell board[SIZE][SIZE]);
int countAdjacentMines(Cell board[SIZE][SIZE], int row, int col);
void printBoard(Cell board[SIZE][SIZE], int reveal);
int revealCell(Cell board[SIZE][SIZE], int row, int col);
int checkWin(Cell board[SIZE][SIZE]);
int main() {
Cell board[SIZE][SIZE];
int row, col;
int gameOver = 0;
srand(time(NULL));
initializeBoard(board);
placeMines(board);
while (!gameOver) {
printBoard(board, 0);
printf("Enter row and column (e.g., 3 4): ");
scanf("%d %d", &row, &col);
if (row < 0 || row >= SIZE || col < 0 || col >= SIZE) {
printf("Invalid input. Try again.\n");
continue;
}
if (board[row][col].flagged) {
printf("Cell is flagged. Unflag it to reveal.\n");
continue;
}
if (revealCell(board, row, col)) {
printBoard(board, 1);
printf("Game Over! You hit a mine.\n");
gameOver = 1;
} else if (checkWin(board)) {
printBoard(board, 1);
printf("Congratulations! You won!\n");
gameOver = 1;
}
}
return 0;
}
void initializeBoard(Cell board[SIZE][SIZE]) {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
board[i][j].isMine = 0;
board[i][j].revealed = 0;
board[i][j].flagged = 0;
}
}
}
void placeMines(Cell board[SIZE][SIZE]) {
int minesPlaced = 0;
while (minesPlaced < MINES) {
int row = rand() % SIZE;
int col = rand() % SIZE;
if (!board[row][col].isMine) {
board[row][col].isMine = 1;
minesPlaced++;
}
}
}
int countAdjacentMines(Cell board[SIZE][SIZE], int row, int col) {
int count = 0;
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < SIZE && j >= 0 && j < SIZE && board[i][j].isMine) {
count++;
}
}
}
return count;
}
void printBoard(Cell board[SIZE][SIZE], int reveal) {
printf(" ");
for (int i = 0; i < SIZE; i++) {
printf("%d ", i);
}
printf("\n");
for (int i = 0; i < SIZE; i++) {
printf("%d: ", i);
for (int j = 0; j < SIZE; j++) {
if (reveal) {
if (board[i][j].isMine) {
printf("M ");
} else {
printf("%d ", countAdjacentMines(board, i, j));
}
} else {
if (board[i][j].revealed) {
printf("%d ", countAdjacentMines(board, i, j));
} else if (board[i][j].flagged) {
printf("F ");
} else {
printf("# ");
}
}
}
printf("\n");
}
}
int revealCell(Cell board[SIZE][SIZE], int row, int col) {
if (board[row][col].revealed || board[row][col].flagged) {
return 0;
}
board[row][col].revealed = 1;
if (board[row][col].isMine) {
return 1;
}
if (countAdjacentMines(board, row, col) == 0) {
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < SIZE && j >= 0 && j < SIZE && !board[i][j].revealed) {
revealCell(board, i, j);
}
}
}
}
return 0;
}
int checkWin(Cell board[SIZE][SIZE]) {
for (int i = 0; i < SIZE; i++) {
for (int j = 0; j < SIZE; j++) {
if (!board[i][j].isMine && !board[i][j].revealed) {
return 0;
}
}
}
return 1;
}
相关推荐














