用c代码编写扫雷小游戏
时间: 2023-09-03 08:09:53 浏览: 92
扫雷小游戏,和window上自带的一模一样(用java编写,可以在各大系统运行).zip
好的,以下是一个简单的扫雷小游戏的C代码实现,仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 9 // 行数
#define COLS 9 // 列数
#define EASY 10 // 简单模式雷数
#define MEDI 20 // 中等模式雷数
#define HARD 30 // 困难模式雷数
int board[ROWS + 2][COLS + 2]; // 扫雷棋盘
int show[ROWS + 2][COLS + 2]; // 显示棋盘
int mines; // 雷数
// 初始化游戏
void init_game(int level)
{
int i, j, x, y;
mines = 0;
for (i = 1; i <= ROWS; i++) {
for (j = 1; j <= COLS; j++) {
board[i][j] = 0;
show[i][j] = 0;
}
}
srand((unsigned)time(NULL));
for (i = 0; i < level; i++) {
x = rand() % ROWS + 1;
y = rand() % COLS + 1;
if (board[x][y] == 0) {
board[x][y] = -1;
mines++;
} else {
i--;
}
}
}
// 显示棋盘
void show_board()
{
int i, j;
printf(" ");
for (i = 1; i <= COLS; i++) {
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= ROWS; i++) {
printf("%d ", i);
for (j = 1; j <= COLS; j++) {
if (show[i][j] == 0) {
printf("* ");
} else if (show[i][j] == 1) {
if (board[i][j] == -1) {
printf("X ");
} else {
printf("%d ", board[i][j]);
}
} else {
printf("F ");
}
}
printf("\n");
}
}
// 统计周围雷数
int count_mines(int x, int y)
{
int i, j, count = 0;
for (i = x - 1; i <= x + 1; i++) {
for (j = y - 1; j <= y + 1; j++) {
if (board[i][j] == -1) {
count++;
}
}
}
return count;
}
// 插旗
void flag(int x, int y)
{
if (show[x][y] == 0) {
show[x][y] = 2;
} else if (show[x][y] == 2) {
show[x][y] = 0;
}
}
// 点击格子
void click(int x, int y)
{
if (board[x][y] == -1) {
show[x][y] = 1;
} else {
int count = count_mines(x, y);
show[x][y] = 1;
if (count == 0) {
int i, j;
for (i = x - 1; i <= x + 1; i++) {
for (j = y - 1; j <= y + 1; j++) {
if (i >= 1 && i <= ROWS && j >= 1 && j <= COLS && show[i][j] == 0) {
click(i, j);
}
}
}
}
}
}
// 判断游戏是否结束
int is_gameover()
{
int i, j;
for (i = 1; i <= ROWS; i++) {
for (j = 1; j <= COLS; j++) {
if (board[i][j] == -1 && show[i][j] == 1) {
return 1;
}
}
}
return 0;
}
// 判断游戏是否胜利
int is_win()
{
int i, j, count = 0;
for (i = 1; i <= ROWS; i++) {
for (j = 1; j <= COLS; j++) {
if (board[i][j] == -1 && show[i][j] == 2) {
count++;
} else if (board[i][j] != -1 && show[i][j] == 1) {
count++;
}
}
}
return count == ROWS * COLS;
}
int main()
{
int level, x, y, mode = 1;
printf("扫雷小游戏\n");
while (mode) {
printf("请选择难度级别(1.简单 2.中等 3.困难):");
scanf("%d", &level);
if (level == 1) {
init_game(EASY);
} else if (level == 2) {
init_game(MEDI);
} else if (level == 3) {
init_game(HARD);
} else {
printf("输入有误,请重新选择难度级别!\n");
continue;
}
show_board();
while (!is_gameover() && !is_win()) {
printf("请输入坐标(x y):");
scanf("%d %d", &x, &y);
if (x < 1 || x > ROWS || y < 1 || y > COLS) {
printf("输入有误,请重新输入!\n");
continue;
}
printf("请选择操作(1.插旗 2.点击格子):");
scanf("%d", &mode);
if (mode == 1) {
flag(x, y);
} else if (mode == 2) {
click(x, y);
} else {
printf("输入有误,请重新选择操作!\n");
}
show_board();
}
if (is_gameover()) {
printf("游戏结束,你输了!\n");
} else if (is_win()) {
printf("恭喜你,游戏胜利!\n");
}
printf("是否继续游戏(1.是 0.否):");
scanf("%d", &mode);
}
printf("游戏结束,再见!\n");
return 0;
}
```
这个代码实现的扫雷小游戏比较简单,只有三种难度级别可供选择,且没有计时、排行榜等功能。如果需要实现更加完善的扫雷小游戏,可以参考其他扫雷游戏的代码实现。
阅读全文