扫雷

#define _CRT_SECURE_NO_WARNINGS

#include “stdio.h”
#include “stdlib.h”
#include “time.h”

#define MAX_ROW 10
#define MAX_COL 10
#define MINE_COUNT 10
int blank_count;
void game_menu(){
/—随机种子—/
srand((unsigned)time(0));
/—开始菜单—/
printf("----------\n");
printf(“1.开始游戏\n”);
printf(“0.退出游戏\n”);
printf("----------\n");
}

/—显示地图和地雷地图的初始化—/
void map_init(char show_map[MAX_ROW + 2][MAX_COL + 2],
char mine_map[MAX_ROW + 2][MAX_COL + 2]){
/—显示地图的初始化—/
for (int i = 1; i <= MAX_ROW; i++){
for (int j = 1; j <= MAX_COL; j++){
show_map[i][j] = '’;
}
}
/
—地雷地图的初始化—/
for (int i = 0; i < MAX_ROW + 2; i++){
for (int j = 0; j < MAX_COL + 2; j++){
mine_map[i][j] = ‘0’;
}
}
/
—随机产生MINE_COUNT个雷,放入地雷地图中—/
int mine_count = 0;
while (mine_count < MINE_COUNT){
int row = 1 + rand() % (MAX_ROW - 1 + 1);
int col = 1 + rand() % (MAX_COL - 1 + 1);
if (mine_map[row][col] == ‘1’){
continue;
}
mine_map[row][col] = ‘1’;
mine_count++;
}
}
void map_display(char map[MAX_ROW + 2][MAX_COL + 2]){
/
—打印第一行,横坐标—/
printf(" “);
for (int i = 1; i <= MAX_ROW; i++){
printf(”%02d “, i);
}
printf(”\n");
/
—按行打印具体的地图—/
for (int i = 1; i <= MAX_ROW; i++){
/
—打印纵坐标—*/
printf("%02d|", i);
for (int j = 1; j <= MAX_COL; j++){

		printf("%-3c", map[i][j]);

	}

	printf("\n");

}

}
/—地图更新—/
void map_update(char show_map[MAX_ROW + 2][MAX_COL + 2],

char mine_map[MAX_ROW + 2][MAX_COL + 2],

int row, int col){
int mine_count = 0;

/*---统计(row, col)周围八格中的地雷总数---*/

mine_count = (mine_map[row - 1][col - 1] - '0')

	+ (mine_map[row - 1][col] - '0')

	+ (mine_map[row - 1][col + 1] - '0')

	+ (mine_map[row][col - 1] - '0')

	+ (mine_map[row][col + 1] - '0')

	+ (mine_map[row + 1][col - 1] - '0')

	+ (mine_map[row + 1][col] - '0')

	+ (mine_map[row + 1][col + 1] - '0');

show_map[row][col] = mine_count + '0';

blank_count++;

/*---(row, col)周围展开---*/

if (show_map[row][col] == '0'){

/*---当(row, col)为0时,遍历周围8个位置---*/
for (int i = row - 1; i <= row + 1; i++){

/*---横坐标越界判断---*/

if (i < 1 || i > MAX_ROW){

			continue;

		}

		for (int j = col - 1; j <= col + 1; j++){

			/*---纵坐标越界判断---*/

			if (j < 1 || j > MAX_COL){

				continue;

			}

			/*---跳过(row, col)位置---*/

			else if (i == row && j == col){

				continue;

			}

			else{

				/*---若该位置还未被翻开,则递归调用---*/

				if (show_map[i][j] == '*'){

					map_update(show_map, mine_map, i, j);

				}

			}

		}

	}

}

}

/—胜利判断—/

int win_check(char show_map[MAX_ROW + 2][MAX_COL + 2]){

int count = 0;

for (int i = 1; i <= MAX_ROW; i++){

	for (int j = 1; j <= MAX_COL; j++){

		if (show_map[i][j] == '*'){

			count++;

		}

	}

}

return count;

}

void game_run(){

int row = 0;

int col = 0;

char show_map[MAX_ROW + 2][MAX_COL + 2];

char mine_map[MAX_ROW + 2][MAX_COL + 2];

map_init(show_map, mine_map);

while (1){

	int input_check = 0;

	int win_flag = 0;

	map_display(show_map);

	/*---胜利检查---*/

	win_flag = win_check(show_map);

	if (win_flag == MINE_COUNT){

		printf("恭喜您扫雷成功!\n");

		map_display(mine_map);

		break;

	}
     printf("请输入坐标: \n");

	/*---清除输入缓冲区---*/

	fflush(stdin);

	input_check = scanf("%d %d", &row, &col);

	if (input_check != 2){

		printf("输入不合法,请重新输入! \n");

		continue;

	}

	if (row < 1 || row > MAX_ROW ||

		col < 1 || col > MAX_COL){

		printf("输入不合法,请重新输入! \n");

		continue;

	}

	if (mine_map[row][col] == '1'){

		printf("遗憾,您差一点就赢了!\n");

		map_display(mine_map);

		break;

	}

	map_update(show_map, mine_map, row, col);

}

}
int main(){
/—游戏开始标志—/
int game_start_flag = 0;

/*---游戏开始菜单打印---*/
game_menu();

/*---游戏运行---*/
while (1){
	/*---输入合法性的判断---*/
	int input_check = 0;
	printf("请输入命令: \n");
	/*---清除输入缓冲---*/
	fflush(stdin);
	input_check = scanf("%d", &game_start_flag);
	/*---输入不合法,重新输入---*/
	if (input_check != 1){
		printf("无效的命令,请重新输入!\n");
		continue;
	}
	/*---输入1游戏开始---*/
	else if (game_start_flag == 1){
		game_run();
		break;
	}
	/*---输入0游戏结束---*/
	else if (game_start_flag == 0){
		break;
	}
	/*---输入0和1以外的字符,无效---*/
	else{
		printf("无效的命令,请重新输入!\n");
		continue;
	}
}
system("pause");
return 0;

}

## 软件功能详细介绍 1. **文本片段管理**:可以添加、编辑、删除常用文本片段,方便快速调用 2. **分组管理**:支持创建多个分组,不同类型的文本片段可以分类存储 3. **热键绑定**:为每个文本片段绑定自定义热键,实现一键粘贴 4. **窗口置顶**:支持窗口置顶功能,方便在其他应用程序上直接使用 5. **自动隐藏**:可以设置自动隐藏,减少桌面占用空间 6. **数据持久化**:所有配置和文本片段会自动保存,下次启动时自动加载 ## 软件使用技巧说明 1. **快速添加文本**:在文本输入框中输入内容后,点击"添加内容"按钮即可快速添加 2. **批量管理**:可以同时编辑多个文本片段,提高管理效率 3. **热键冲突处理**:如果设置的热键与系统或其他软件冲突,会自动提示 4. **分组切换**:使用分组按钮可以快速切换不同类别的文本片段 5. **文本格式化**:支持在文本片段中使用换行符和制表符等格式 ## 软件操作方法指南 1. **启动软件**:双击"大飞哥软件自习室——快捷粘贴工具.exe"文件即可启动 2. **添加文本片段**: - 在主界面的文本输入框中输入要保存的内容 - 点击"添加内容"按钮 - 在弹出的对话框中设置热键和分组 - 点击"确定"保存 3. **使用热键粘贴**: - 确保软件处于运行状态 - 在需要粘贴的位置按下设置的热键 - 文本片段会自动粘贴到当前位置 4. **编辑文本片段**: - 选中要编辑的文本片段 - 点击"编辑"按钮 - 修改内容或热键设置 - 点击"确定"保存修改 5. **删除文本片段**: - 选中要删除的文本片段 - 点击"删除"按钮 - 在确认对话框中点击"确定"即可删除
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值