关于用c语言实现简陋版MINE MAP

思路

  1. 游戏规则

    • 扫雷游戏的核心是玩家需要点击格子,避开地雷。

    • 每个格子可能是地雷,也可能是数字(表示周围地雷的数量)。

    • 玩家通过推理,标记所有地雷的位置即可获胜。

  2. 数据结构

    • 使用二维数组表示游戏棋盘。

    • 一个数组存储地雷的位置(mineMap)。

    • 另一个数组存储玩家可见的棋盘状态(playerMap)。

  3. 游戏流程

    • 初始化棋盘:随机布置地雷,并计算每个格子周围的地雷数量。

    • 玩家输入坐标,检查是否踩雷。

    • 更新玩家可见的棋盘状态。

    • 判断游戏是否胜利或失败。

  4. 自定义难度

    • 通过调整棋盘大小和地雷数量来实现不同难度.

以下为本作者原创代码:

//头文件
#include 
#include 
#include 
#include 

#define ROW 5
#define COL 5

#define ROWS ROW+2
#define COLS COL+2

#define count 5


void Initboard(char board[ROWS][COLS], int rows, int cols, char set);
void Displayboard(char board[ROWS][COLS], int row, int col);

void Mineset(char board[ROWS][COLS], int row, int col);
void Minefinding(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
int Minechoosecount(char board[ROWS][COLS], int row, int col);
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"

void menu()
{
	printf("****************************************\n");
	printf("***************1 . play   **************\n");
	printf("***************0 . exit   **************\n");
	printf("****************************************\n");


}


void game()
{
	char mine [ROWS] [COLS];//save the data of mine setting
	char show [ROWS] [COLS];//display player's choice of mine

	Initboard(mine, ROWS, COLS, '0');//initiate the original MINE board
	Initboard(show, ROWS, COLS, '*');//initiate the original SHOW board

	Mineset(mine, ROW, COL);

	//show the board to the player
	//Displayboard(mine, ROW, COL);
	Displayboard(show, ROW, COL);

	Minefinding(mine, show, ROW, COL);


}



//源文件

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("please choose to play or exit:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("exiting the game.\n");
			break;
		default:
			printf("an illegal input.\n");
			break;
		}
	} while (input);
	return 0;
}

以下为deepseek大模型生成的代码,供广大读者借鉴思考:

//头文件
#ifndef MINESWEEPER_H
#define MINESWEEPER_H

#include 
#include 
#include 

// 定义棋盘大小和地雷数量
#define ROWS 10
#define COLS 10
#define MINES 15

// 函数声明

// 初始化棋盘
void initBoard();

// 计算某个格子周围的地雷数量
int countMines(int x, int y);

// 打印玩家可见的棋盘
void printPlayerMap();

// 打开格子
int openCell(int x, int y);

// 检查是否胜利
int checkWin();

#endif // MINESWEEPER_H
//源文件
#include "minesweeper.h"

// 全局变量
int mineMap[ROWS][COLS]; // 地雷分布图
char playerMap[ROWS][COLS]; // 玩家可见的棋盘

// 初始化棋盘
void initBoard() {
    // 初始化玩家棋盘
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            playerMap[i][j] = '-'; // 初始状态为未打开
            mineMap[i][j] = 0; // 初始状态为无地雷
        }
    }

    // 随机布置地雷
    srand(time(NULL));
    int minesPlaced = 0;
    while (minesPlaced < MINES) {
        int x = rand() % ROWS;
        int y = rand() % COLS;
        if (mineMap[x][y] == 0) {
            mineMap[x][y] = 1; // 1表示地雷
            minesPlaced++;
        }
    }
}

// 计算某个格子周围的地雷数量
int countMines(int x, int y) {
    int count = 0;
    for (int i = x - 1; i <= x + 1; i++) {
        for (int j = y - 1; j <= y + 1; j++) {
            if (i >= 0 && i < ROWS && j >= 0 && j < COLS && mineMap[i][j] == 1) {
                count++;
            }
        }
    }
    return count;
}

// 打印玩家可见的棋盘
void printPlayerMap() {
    printf("  ");
    for (int j = 0; j < COLS; j++) {
        printf("%d ", j);
    }
    printf("\n");
    for (int i = 0; i < ROWS; i++) {
        printf("%d ", i);
        for (int j = 0; j < COLS; j++) {
            printf("%c ", playerMap[i][j]);
        }
        printf("\n");
    }
}

// 打开格子
int openCell(int x, int y) {
    if (mineMap[x][y] == 1) {
        return -1; // 踩到地雷,游戏结束
    }
    int minesAround = countMines(x, y);
    playerMap[x][y] = '0' + minesAround; // 显示周围地雷数量
    return 1; // 成功打开
}

// 检查是否胜利
int checkWin() {
    int unopened = 0;
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j < COLS; j++) {
            if (playerMap[i][j] == '-' && mineMap[i][j] == 0) {
                unopened++;
            }
        }
    }
    return unopened == 0; // 所有非地雷格子都被打开
}

// 主函数
int main() {
    initBoard();
    printf("欢迎来到扫雷游戏!\n");
    printf("输入坐标 (行 列) 来打开格子。\n");

    while (1) {
        printPlayerMap();
        int x, y;
        printf("请输入坐标 (行 列): ");
        scanf("%d %d", &x, &y);

        if (x < 0 || x >= ROWS || y < 0 || y >= COLS) {
            printf("坐标无效,请重新输入!\n");
            continue;
        }

        int result = openCell(x, y);
        if (result == -1) {
            printf("你踩到地雷了!游戏结束!\n");
            break;
        }

        if (checkWin()) {
            printf("恭喜你,扫雷成功!\n");
            break;
        }
    }

    return 0;
}

你可能感兴趣的:(数据结构,c#)