C语言扫雷改进版

前言:

该篇博客是基于作者上一篇文章扫雷进行的修改,由于扫雷的代码有更新修改,所以博客也与此同步。想要了解扫雷原理的读者们可以阅读作者的上一篇文章《C语言怎样写扫雷》

更新修改内容:

  1. 新增了WASD作为方向键操作,不再需要输入坐标操作,极大降低操作难度;
  2. 修改了原先的0的扩散机制,由原先的向四个方向扩散改为向八个方向扩散,更加贴合原版。

代码:

注:以下代码是更新后的代码,和作者上一篇文章有略微差别

game.h
#pragma once

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>

#define X 16
#define Y 30

int x, y, z, num, hudnum;
//行数,列数,雷盘大小标号,雷数
char board_1[X][Y], board_2[X][Y];


void initboard(char board[X][Y]);
void printboard_2(char board_2[X][Y], int choosex, int choosey);
void resetboard_1(char board_1[X][Y], int choosex, int choosey);
void scoreboard_1(char board_1[X][Y]);
void chooseboard_2(char board_1[X][Y], char board_2[X][Y], int choosex, int choosey);
void highlight(char board_2[X][Y], int choosex, int choosey);
void printnum(char board_2[X][Y], int bx, int by);
void alldisplay(char board_1[X][Y], char board_2[X][Y]);
int testboard_2(char board_1[X][Y], char board_2[X][Y], int choosex, int choosey);
game.c
#include"game.h"

void initboard(char board[X][Y])
{
	for (int ax = 0; ax < X; ax++)
	{
		for (int ay = 0; ay < Y; ay++)
		{
			board[ax][ay] = ' ';
		}
	}
}

void printnum(char board_2[X][Y], int bx, int by)
{
	switch (board_2[bx][by])
	{
	case '0':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//白色
		printf("0");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '1':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//亮白色
		printf("1");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '2':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//淡绿色
		printf("2");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '3':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//淡蓝色
		printf("3");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '4':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//淡红色
		printf("4");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '5':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//淡紫色
		printf("5");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '6':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//湖蓝色
		printf("6");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '7':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 1 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//蓝色
		printf("7");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '8':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//紫色
		printf("8");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '*':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//红色
		printf("*");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '!':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);//红色
		printf("!");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case ' ':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		printf(" ");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	}
}

void highlight(char board_2[X][Y], int choosex, int choosey)
{
	switch (board_2[choosex][choosey])
	{
	case '0':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 14 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//白色
		printf("0");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '1':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//亮白色
		printf("1");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '2':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 10 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//淡绿色
		printf("2");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '3':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//淡蓝色
		printf("3");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '4':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//淡红色
		printf("4");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '5':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//淡紫色
		printf("5");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '6':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//湖蓝色
		printf("6");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '7':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 1 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//蓝色
		printf("7");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '8':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//紫色
		printf("8");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '*':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//红色
		printf("*");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case '!':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);//红色
		printf("!");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	case ' ':
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 16 | BACKGROUND_INTENSITY);
		printf(" ");
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
		break;
	}
}

void printboard_2(char board_2[X][Y], int choosex, int choosey)
{
	int bx, by, i = 0;
	for (bx = 0; bx < x - 1; bx++)
	{
		for (by = 0; by < y - 1; by++)
		{
			printf(" ");
			//---------------v
			if ((choosex == bx) && (choosey == by))
			{
				highlight(board_2, choosex, choosey);
			}
			else
			{
				printnum(board_2, bx, by);
			}
			//--------------^
			printf(" |");
		}
		printf(" ");
		//-----------------v
		if ((choosex == bx) && (choosey == by))
		{
			highlight(board_2, choosex, choosey);
		}
		else
		{
			printnum(board_2, bx, by);
		}
		//-------------------^
		printf("  %d", bx);
		if (i == 0)
		{
			printf("    剩余未标记地雷数:%d", hudnum);
			i++;
		}
		printf(" \n");
		for (by = 0; by < y - 1; by++)
		{
			printf("---|");
		}
		printf("---\n");
	}
	for (by = 0; by < y - 1; by++)
	{
		printf(" ");
		//------------------------v
		if ((choosex == bx) && (choosey == by))
		{
			highlight(board_2, choosex, choosey);
		}
		else
		{
			printnum(board_2, bx, by);
		}
		//--------------------^
		printf(" |");
	}
	printf(" ");
	//------------------v
	if ((choosex == bx) && (choosey == by))
	{
		highlight(board_2, choosex, choosey);
	}
	else
	{
		printnum(board_2, bx, by);
	}
	//-------------------^
	printf("  %d", bx);
	printf(" \n\n");
	for (by = 0; by < y; by++)
	{
		if (by < 10)
		{
			printf(" %d  ", by);
		}
		else
		{
			printf(" %d ", by);
		}
	}
	printf("\n");
}

void resetboard_1(char board_1[X][Y], int choosex, int choosey)
{
	int cx, cy, bombnum = num, boardnum = x * y - 1, tmp;
	//cx,cy,剩余的未放置的地雷数,剩余的未访问的点数
	for (cx = 0; cx < x; cx++)
	{
		for (cy = 0; cy < y; cy++)
		{
			if (cx != choosex || cy != choosey)
			//if ((cx<choosex - 2 || cx>choosex + 2) && (cy<choosey - 2 || cy>choosey + 2))
			{
				tmp = rand() % boardnum;//生成0~boardnum-1的随机数tmp
				if (tmp < bombnum)//如果tmp在0~bombnum-1内,那么就在该点布雷
				{
					board_1[cx][cy] = '*';//在board_1[cx][cy]处放置地雷
					bombnum--;//放置一个地雷,bumbnum-1
				}
				boardnum--;//访问一个点,boardnum-1
			}
		}
	}
}

void scoreboard_1(char board_1[X][Y])//用于计算每一个点周围有多少地雷
{
	int dx, dy, score;
	for (dx = 0; dx < x; dx++)
	{
		for (dy = 0; dy < y; dy++)
		{
			if (board_1[dx][dy] != '*')
			{
				score = 0;
				//向上判断 1
				if (dx > 0)
				{
					if (board_1[dx - 1][dy] == '*')
					{
						score++;
					}
				}
				//向右上判断 2
				if (dx > 0 && dy < y - 1)
				{
					if (board_1[dx - 1][dy + 1] == '*')
					{
						score++;
					}
				}
				//向右判断 3
				if (dy < y - 1)
				{
					if (board_1[dx][dy + 1] == '*')
					{
						score++;
					}
				}
				//向右下判断 4
				if (dx < x - 1 && dy < y - 1)
				{
					if (board_1[dx + 1][dy + 1] == '*')
					{
						score++;
					}
				}
				//向下判断 5
				if (dx < x - 1)
				{
					if (board_1[dx + 1][dy] == '*')
					{
						score++;
					}
				}
				//向左下判断 6
				if (dx < x - 1 && dy>0)
				{
					if (board_1[dx + 1][dy - 1] == '*')
					{
						score++;
					}
				}
				//向左判断 7
				if (dy > 0)
				{
					if (board_1[dx][dy - 1] == '*')
					{
						score++;
					}
				}
				//向左上判断 8
				if (dx > 0 && dy > 0)
				{
					if (board_1[dx - 1][dy - 1] == '*')
					{
						score++;
					}
				}
				board_1[dx][dy] = score + 48;//加48,请查询asc码表
			}
		}
	}
	//printboard_2(board_1);//测试用,请忽视
	//Sleep(20000000);
}

void chooseboard_2(char board_1[X][Y], char board_2[X][Y], int choosex, int choosey)//选择排雷该点
{
	if (board_2[choosex][choosey] == ' ' || board_2[choosex][choosey] == '!')//若board_2该点未被占用,被标记的点也不算占用,若因选中或者扩散触发标记点,则标记会被覆盖
	{
		if (board_1[choosex][choosey] != 48)//board_1该点不等于'0',不扩散
		{
			board_2[choosex][choosey] = board_1[choosex][choosey];
		}
		else if (board_1[choosex][choosey] == 48)//若该点等于'0',往四个方向扩散			
		{
			board_2[choosex][choosey] = board_1[choosex][choosey];
			if (choosex < x - 1)//往下
			{
				chooseboard_2(board_1, board_2, choosex + 1, choosey);
			}
			if (choosex > 0)//往上
			{
				chooseboard_2(board_1, board_2, choosex - 1, choosey);
			}
			if (choosey < y - 1)//往右
			{
				chooseboard_2(board_1, board_2, choosex, choosey + 1);
			}
			if (choosey > 0)//往左
			{
				chooseboard_2(board_1, board_2, choosex, choosey - 1);
			}
			if (choosex > 0 && choosey < y - 1)//往右上
			{
				chooseboard_2(board_1, board_2, choosex - 1, choosey + 1);
			}
			if (choosex < x - 1 && choosey < y - 1)//往右下
			{
				chooseboard_2(board_1, board_2, choosex + 1, choosey + 1);
			}
			if (choosex > 0 && choosey > 0)//往左上
			{
				chooseboard_2(board_1, board_2, choosex - 1, choosey - 1);
			}
			if (choosex < x - 1 && choosey>0)//往左下
			{
				chooseboard_2(board_1, board_2, choosex + 1, choosey - 1);
			}
			//往四个方向扩散	
		}
	}
}

int testboard_2(char board_1[X][Y], char board_2[X][Y], int choosex, int choosey)
{
	int ex, ey, score = 0;
	for (ex = 0; ex < x; ex++)
	{
		for (ey = 0; ey < y; ey++)
		{
			if (board_2[ex][ey] == '*')//踩到地雷啦
			{
				return 0;
			}
			if (board_1[ex][ey] == board_2[ex][ey])//计算board_1和board_2的重合度
			{
				score++;
			}
		}
	}
	if (score == x * y - num)//重合度=x*y-num,即所偶有点位已被探明,胜利
	{
		return 1;
	}
	else
	{
		return 2;//重合度<x*y-num,未胜利
	}
}

void alldisplay(char board_1[X][Y], char board_2[X][Y])//踩中地雷时所有地雷显现
{
	int fx, fy;
	for (fx = 0; fx < x; fx++)
	{
		for (fy = 0; fy < y; fy++)
		{
			if (board_1[fx][fy] == '*')
			{
				board_2[fx][fy] = '*';
			}
		}
	}
}
main.c
#include"game.h"

void menu()//菜单 $$
{
	printf("输入以下数字以选择下一步:\n'0'结束游戏\n'1'开始游戏\n'2'游戏信息与设置\n请输入:");
}

int game()
{
	int a = 1, test;//a用于控制第一次选择排雷点时重置雷盘,即第一次排雷不可能遇到地雷
	int choosex = 0, choosey = 0, choose;
	char b, tmp;
	hudnum = num;
	initboard(board_1);//$$
	initboard(board_2);//初始化底层雷区与表面雷区	$$
	printboard_2(board_2, choosex, choosey);//打印表面雷区 $$
	while (1)
	{
		while (1)
		{
			while (1)
			{
				b = '0';
				b = _getch();
				if (b == 'a')
				{
					if (choosey > 0)
					{
						choosey--;//左
						system("cls");
						printboard_2(board_2, choosex, choosey);
					}
				}
				else if (b == 'd')
				{
					if (choosey < y - 1)
					{
						choosey++;//右
						system("cls");
						printboard_2(board_2, choosex, choosey);
					}
				}
				else if (b == 'w')
				{
					if (choosex > 0)
					{
						choosex--;//上
						system("cls");
						printboard_2(board_2, choosex, choosey);
					}
				}
				else if (b == 's')
				{
					if (choosex < x - 1)
					{
						choosex++;//下
						system("cls");
						printboard_2(board_2, choosex, choosey);
					}
				}
				else if (b == '1')
				{
					choose = 1;
					break;
				}
				else if (b == '2')
				{
					choose = 2;
					break;
				}
				//Sleep(100);
			}

			if (-1 < choosex && choosex < x && -1 < choosey && choosey < y && choose == 1)//选择了雷盘内合法的点并排雷
			{
				if (a == 1)//在'第一次'选择排雷后重置雷盘并计算每个点周围的雷数 (后续将不起作用)
				{
					resetboard_1(board_1, choosex, choosey);//重新布雷底部雷区 $$
					scoreboard_1(board_1);//底部雷区计数 $$
					a++;
				}
				if (board_2[choosex][choosey] != '!')
				{
					chooseboard_2(board_1, board_2, choosex, choosey);//选择排雷点
				}
				system("cls");
				printboard_2(board_2, choosex, choosey);//$$
				break;//只有选择该点排雷,才调用break,进入检测环节
			}
			else if (-1 < choosex && choosex < x && -1 < choosey && choosey < y && choose == 2)//选择雷盘内合法的点并标记/取消标记
			{
				if (board_2[choosex][choosey] == ' ')
				{
					board_2[choosex][choosey] = '!';//标记该点
					hudnum--;
				}
				else if (board_2[choosex][choosey] == '!')
				{
					board_2[choosex][choosey] = ' ';//取消标记该点
					hudnum++;
				}
				system("cls");
				printboard_2(board_2, choosex, choosey);
			}
			else//其余一切操作皆为非法操作
			{
				printf("请输入正确的数字");
				Sleep(2000);
				system("cls");
				printboard_2(board_2, choosex, choosey);
			}
		}
		test = testboard_2(board_1, board_2, choosex, choosey);
		//test=0-->踩到地雷;test=1-->全部点位已被探明且未踩到地雷,胜利;test=2-->未踩到地雷,也没有探明所有点位,未结束
		if (test == 0)
		{
			alldisplay(board_1, board_2);
			system("cls");
			printboard_2(board_2, choosex, choosey);
			return 0;
		}
		else if (test == 1)
		{
			return 1;
		}
	}
}//return-->choose-->result:0-->输,1-->赢

void choose_menu()//菜单选择
{
	int menuchoose = 0, result = 0;//menuchoose菜单选择结果,result游戏输赢结果
	z = 1, num = 9, x = 9, y = 9;
	int set = 0, boa = 1;
	do
	{
		system("cls");
		menu();
		scanf("%d", &menuchoose);
		switch (menuchoose)
		{
		case 0://结束游戏
			system("cls");
			printf("结束游戏");
			Sleep(2000);
			break;
		case 1://开始游戏
			system("cls");
			printf("开始游戏");
			Sleep(2000);
			system("cls");
			result = game();//game()_return:0-->输,1-->赢
			if (result == 0)
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
				printf("you lost!!\n");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
				printf("按下回车键以继续");
				getchar();
				getchar();
			}
			else if (result == 1)
			{
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
				printf("you won!!\n");
				SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7 | FOREGROUND_INTENSITY | 8 | BACKGROUND_INTENSITY);
				printf("按下回车键以继续");
				getchar();
				getchar();
			}
			break;
		case 2://信息与设置
			system("cls");
			printf("游戏信息与设置");
			Sleep(2000);
			system("cls");
			printf("游戏信息:\n\n游戏名:扫雷\n\n作者:li_zi_jin\n\n提示:\n1.游戏规则与Windows扫雷相同\n2.'adws'作为方向键选择你想选择的格,'1'排雷该点相当于原版左键,'2'标记/取消标记该点相当于原版右键\n3.可以调整雷盘大小,默认为小\n4.请严格按照提示输入合适的内容,否则会出bug\n\n");
			printf("信息:\n雷盘大小:");
			switch (z)
			{
			case 1:
				printf("小(9*9)\n");
				break;
			case 2:
				printf("中(16*16)\n");
				break;
			case 3:
				printf("大(16*30)\n");
				break;
			default:
				printf("出错\n");
				break;
			}
			printf("地雷数量:");
			printf("%d\n", num);
			printf("\n输入以下数字以选择下一步:\n'1'调整雷盘大小\n'其他数字'退回初始界面\n请输入:");
			scanf("%d", &set);
			if (set == 1)
			{
				printf("\n输入以下数字以选择相应雷盘大小:\n'1'小\n'2'中\n'3'大\n请输入:");
				scanf("%d", &boa);
				if (0 < boa && boa < 4)
				{
					z = boa;
					switch (z)
					{
					case 1:
						num = 9;
						//num = 1;//测试用,请忽略
						x = 9;
						y = 9;
						break;
					case 2:
						num = 40;
						x = 16;
						y = 16;
						break;
					case 3:
						num = 99;
						x = 16;
						y = 30;
						break;
					}
					printf("设置成功");
				}
				else
				{
					printf("请输入正确的数字");
				}
			}
			else
			{
				printf("退回初始界面");
			}
			Sleep(2000);
			break;
		default://非法输入
			system("cls");
			printf("请输入正确的数字\n");
			Sleep(2000);
			break;
		}
	} while (menuchoose != 0);
}

int main()
{
	srand((unsigned int)time(NULL));
	system("color 87");
	choose_menu();
	return 0;
}

li_zi_jin (20231101)

未经作者同意不得转载

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

li_zi_jin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值