aiaiask.com©

开花即结果 提问即答案

用c++实现一个扫雷的小游戏
原始问题:

用c++实现一个扫雷的小游戏

以下是一个简单的用C语言实现的扫雷小游戏的示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define SIZE 10
#define MINES 10

int board[SIZE][SIZE];
int revealed[SIZE][SIZE];

void initializeBoard() {
    int i, j;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            board[i][j] = 0;
            revealed[i][j] = 0;
        }
    }
}

void placeMines() {
    int count = 0;
    while (count < MINES) {
        int x = rand() % SIZE;
        int y = rand() % SIZE;
        if (board[x][y] != -1) {
            board[x][y] = -1;
            count++;
        }
    }
}

void calculateNumbers() {
    int i, j;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            if (board[i][j] != -1) {
                int count = 0;
                if (i > 0 && j > 0 && board[i - 1][j - 1] == -1) count++;
                if (i > 0 && board[i - 1][j] == -1) count++;
                if (i > 0 && j < SIZE - 1 && board[i - 1][j + 1] == -1) count++;
                if (j > 0 && board[i][j - 1] == -1) count++;
                if (j < SIZE - 1 && board[i][j + 1] == -1) count++;
                if (i < SIZE - 1 && j > 0 && board[i + 1][j - 1] == -1) count++;
                if (i < SIZE - 1 && board[i + 1][j] == -1) count++;
                if (i < SIZE - 1 && j < SIZE - 1 && board[i + 1][j + 1] == -1) count++;
                board[i][j] = count;
            }
        }
    }
}

void printBoard() {
    int i, j;
    for (i = 0; i < SIZE; i++) {
        for (j = 0; j < SIZE; j++) {
            if (revealed[i][j]) {
                if (board[i][j] == -1) {
                    printf("* ");
                } else {
                    printf("%d ", board[i][j]);
                }
            } else {
                printf(". ");
            }
        }
        printf("  
");
    }
}

void revealCell(int x, int y) {
    if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) return;
    if (revealed[x][y]) return;
    revealed[x][y] = 1;
    if (board[x][y] == 0) {
        revealCell(x - 1, y - 1);
        revealCell(x - 1, y);
        revealCell(x - 1, y + 1);
        revealCell(x, y - 1);
        revealCell(x, y + 1);
        revealCell(x + 1, y - 1);
        revealCell(x + 1, y);
        revealCell(x + 1, y + 1);
    }
}

int main() {
    srand(time(NULL));
    initializeBoard();
    placeMines();
    calculateNumbers();
    printBoard();

    int x, y;
    while (1) {
        printf("Enter the coordinates (x y): ");
        scanf("%d %d", &x, &y);
        if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) {
            printf("Invalid coordinates. Try again.  
");
            continue;
        }
        if (revealed[x][y]) {
            printf("Cell already revealed. Try again.  
");
            continue;
        }
        if (board[x][y] == -1) {
            printf("Game over! You hit a mine.  
");
            break;
        }
        revealCell(x, y);
        printBoard();
    }

    return 0;
}

这个示例代码实现了一个10x10的扫雷游戏,其中有10个地雷。玩家通过输入坐标来揭开格子,如果揭开的格子是地雷,则游戏结束;否则,会显示该格子周围的地雷数量。玩家可以不断揭开格子直到游戏结束。

请注意,这只是一个简单的示例代码,可能还有一些功能和优化可以添加。你可以根据自己的需求进行修改和扩展。

用c++实现一个扫雷的小游戏
https://www.aiaiask.com/ask/45083.html
AI / 模型Siliconflow
时间 / DATEAugust 23, 2023, 5:35 PM
语言zh-CN
IP / 区域江苏 徐州