p18扫雷游戏

game.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10

void InitBoard(char board[ROWS][COLS],int rows,int cols,char set);
void DisplayBoard(char board[ROWS][COLS],int row ,int col);
void SetMine(char board[ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);

test.c

#include<stdio.h>
#include "game.h"
void menu()
{
	printf("**************************\n");
	printf("*************1.play*********\n");
	printf("*************0.exit*******\n");
	printf("**************************\n");
}
void game()
{
	//雷的信息存储
	//1.布置好的雷的信息
	char mine[ROWS][COLS]={0};//11*11

	//排查出雷的信息
	char show[ROWS][COLS]={0};
	//初始化
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show,ROWS,COLS,'*');
	//打印棋盘
	//DisplayBoard(mine,ROW,COL);
	DisplayBoard(show,ROW,COL);
	//布置雷
	SetMine(mine,ROW,COL);
	DisplayBoard(show,ROW,COL);
	//扫雷
	FindMine(mine,show,ROW,COL);


}

void test(){
	int input =0;
	srand((unsigned int)time(NULL));
	do 
	{
		menu();
		printf("请选择:>");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");

			default:
			printf("选择错误,重新选择!\n");
			break;

		}
		
	}while(input);
}
int main()
{
	test();
	return 0;
}

game.c

#include "game.h"
void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
{
	int i=0;
	int j=0;
	for(i=0;i<rows;i++)
	{
		for(j=0;j<cols;j++)
		{
			board[i][j]=set;//'*'
		}
	}
}
void DisplayBoard(char board[ROWS][COLS],int row,int col)
{
	int i=0;
	int j=0;
	//打印列号
	for(i=0;i<=col;i++){
		printf("%d ",i);
	}
	printf("\n");
	for(i=1;i<=row;i++){
		printf("%d ",i);
		for(j=1;j<=col;j++)
		{
			printf("%c ",board[i][j]);
		}
		printf("\n");
	}
}
void SetMine(char board[ROWS][COLS],int row,int col){
	int count =EASY_COUNT;
	while(count)
	{
		int x=rand()%row+1;//1-9
		int y=rand()%col+1;
		if(board[x][y]=='0')
		{
			board[x][y]='1';
			count--;
		}
	}
}
int get_mine_count(char mine[ROWS][COLS],int x,int y)
{
	    return mine[x-1][y]+
		mine[x-1][y-1]+
		mine[x][y-1]+
		mine[x+1][y-1]+
		mine[x+1][y]+
		mine[x+1][y+1]+
		mine[x][y+1]+
		mine[x-1][y+1]-8*'0';
}
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
	int x=0;
	int y=0;
	int win=0;
	//9*9-10=71
	while(win<row*col-EASY_COUNT){
		printf("请输入排查雷的坐标>:");
	scanf("%d%d",&x,&y);
	if(x>=1&&x<=row&&y>=1&&y<=col){
		//坐标合法
		//1.踩雷
			
		if(mine[x][y]=='1')
		{
			printf("很遗憾,你被炸死了\n");
			DisplayBoard(mine,row,col);
			break;
		}
		else //不显雷
		{
			//计算x,y坐标周围有几个雷
			int count=get_mine_count(mine,x,y);
			show[x][y]=count+'0';
			DisplayBoard(show,row,col);
			win++;
		}
	}
	else{
		printf("输入坐标非法,请重新输入!\n");

		}
	}
	if(win==row*col-EASY_COUNT)
	{
		printf("恭喜你排雷成功\n");
		DisplayBoard(mine,row,col);
	}
	
}

相关推荐

  1. 洛谷P2670扫雷游戏

    2024-07-18 04:56:02       51 阅读
  2. 扫雷游戏(c++题解)

    2024-07-18 04:56:02       62 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 04:56:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 04:56:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 04:56:02       45 阅读
  4. Python语言-面向对象

    2024-07-18 04:56:02       55 阅读

热门阅读

  1. 理解 App Store 审核规则 3.2(f):预防被拒绝的方法

    2024-07-18 04:56:02       19 阅读
  2. VINS介绍

    2024-07-18 04:56:02       20 阅读
  3. CST高频仿真的网格技术

    2024-07-18 04:56:02       30 阅读
  4. 泰勒展开的推导及应用

    2024-07-18 04:56:02       20 阅读
  5. kotlin get set

    2024-07-18 04:56:02       18 阅读
  6. 网络安全-网络安全及其防护措施1

    2024-07-18 04:56:02       18 阅读
  7. SQL用户权限正则表达式设计思路

    2024-07-18 04:56:02       17 阅读
  8. C++ Primer:2.6 自定义数据结构

    2024-07-18 04:56:02       21 阅读