简易版扫雷

(1)头文件

pragma once

ifndef MINE_H

define MINE_H

include

include

include

define CRT_SECURE_NO_WARNINGS

pragma warning(disable:4996)

define CLOS 11

define ROWS 11

define NUM 10

void menu();
void play_game();
void init(char mine_board[ROWS][CLOS], char show_board[ROWS][CLOS]);
void player(char mine_board[ROWS][CLOS], char show_board[ROWS][CLOS]);
void display(char show_board[ROWS][CLOS]);

endif

(2)函数的实现

include “mine.h”

void menu()
{
printf(“*************************\n”);
printf(“* 1.play *\n”);
printf(“* 2.exit *\n”);
printf(“*************************\n”);
}

void init(char mine_board[ROWS][CLOS], char show_board[ROWS][CLOS])
{
int i = 0;
int j = 0;
int x = 0;
int y = 0;
int n = NUM;
for (i = 0; i < ROWS; i++)
{
for (j = 0; j < CLOS; j++)
{
show_board[i][j] = ‘*’;
mine_board[i][j] = ‘0’;
}
}
srand((unsigned)time(NULL));
while (n)
{
x = rand() % 9 + 1;
y = rand() % 9 + 1;
mine_board[x][y] = ‘1’;
n–;

}

}

void display(char show_board[ROWS][CLOS])
{
int i = 0;
int j = 0;
printf(“\n”);
for (i = 1; i < ROWS - 1; i++)
{
for (j = 1; j < CLOS - 1; j++)
{
printf(” %c “,show_board[i][j]);
}
printf(“\n”);
}
printf(“\n”);
}
void player(char mine_board[ROWS][CLOS], char show_board[ROWS][CLOS])
{
int x = 0;
int y = 0;
int count = 0;
do
{
display(show_board);
display(mine_board);
printf(“请输入坐标>:”);
scanf(“%d %d”, &x, &y);
if ((x < 1) || (x > ROWS - 2) || (y < 1) || (y > CLOS - 2))
{
printf(“坐标不合法!”);
}
else if (mine_board[x ][y ] == ‘1’)
{
printf(“踩雷了!游戏结束!\n”);
break;
}
else
{
if (mine_board[x - 1][y - 1] == ‘1’)
count++;
if (mine_board[x ][y] == ‘1’)
count++;
if (mine_board[x + 1][y - 1] == ‘1’)
count++;
if (mine_board[x - 1][y] == ‘1’)
count++;
if (mine_board[x + 1][y] == ‘1’)
count++;
if (mine_board[x - 1][y +1] == ‘1’)
count++;
if (mine_board[x ][y +1] == ‘1’)
count++;
if (mine_board[x + 1][y+1 ] == ‘1’)
count++;
show_board[x ][y ] = count+’0’;
}
display(show_board);
} while (1);
}
void play_game()
{
int x = 0;
int y = 0;
char mine_board[ROWS][CLOS] = { 0 };
char show_board[ROWS][CLOS] = { 0 };
init(mine_board, show_board);
player(mine_board, show_board);
}

(3)主函数

include “mine.h”

int main()
{
int input = 1;

do
{
    menu();
    printf("请选择1或2>:");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
        play_game();
        break;
    case 2:
        input = 0;
        break;
    }
} while (input);


system("pause");
return 0;

}

下面是一个简单的Python实现扫雷的示例代码: ```python import random # 游戏参数 ROWS = 10 COLUMNS = 10 MINES = 10 # 方格状态 UNREVEALED = -1 MINE = -2 # 创建游戏面板 board = [[UNREVEALED for _ in range(COLUMNS)] for _ in range(ROWS)] # 随机布雷 mines = random.sample(range(ROWS * COLUMNS), MINES) for mine in mines: row, col = divmod(mine, COLUMNS) board[row][col] = MINE # 计算周围地雷数量 for row in range(ROWS): for col in range(COLUMNS): if board[row][col] == MINE: continue count = 0 for r in range(max(0, row - 1), min(row + 2, ROWS)): for c in range(max(0, col - 1), min(col + 2, COLUMNS)): if board[r][c] == MINE: count += 1 board[row][col] = count # 显示游戏面板 def print_board(): print(" ", end="") for col in range(COLUMNS): print(f"{col:2d}", end="") print() for row in range(ROWS): print(f"{row:2d} ", end="") for col in range(COLUMNS): if board[row][col] == UNREVEALED: print(" .", end="") elif board[row][col] == MINE: print(" *", end="") else: print(f" {board[row][col]}", end="") print() # 点击方格 def click(row, col): if board[row][col] == MINE: print("你踩到了地雷,游戏结束!") return False elif board[row][col] == UNREVEALED: board[row][col] = 0 for r in range(max(0, row - 1), min(row + 2, ROWS)): for c in range(max(0, col - 1), min(col + 2, COLUMNS)): if board[r][c] == UNREVEALED: click(r, c) return True else: return True # 开始游戏 print_board() while True: row = int(input("请输入行号:")) col = int(input("请输入列号:")) if not click(row, col): break print_board() ``` 这个简易版扫雷游戏使用的是命令行界面,先随机生成地雷,然后根据地雷数量计算每个方格周围的地雷数量。玩家输入行号和列号来点击方格,如果踩到地雷,则游戏结束,否则会递归地展开周围未点击过的方格,直到点击到有地雷的方格或者所有非地雷方格都被点击为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值