栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

扫雷小游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

扫雷小游戏

在C语言的学习过程中,自主实现小游戏能提高我们对C语言的兴趣,我今天将为大家带来扫雷小游戏的实现。

文章目录
  • 扫雷游戏需要的文档
  • 菜单的实现
    • 1.选择是否开始游戏
    • 2.选择是否退出游戏
    • 3.判断非法输入
  • 初始化布置雷的表格和排雷信息的表格
  • 随机布置雷
  • 打印排雷信息
  • 排查雷
  • 扫雷游戏的整体声明
  • 函数的整体调用



扫雷游戏需要的文档

game.c ----- 游戏代码的实现
game.h----- 游戏代码的声明
test.c ----- 扫雷小游戏的检验



菜单的实现 1.选择是否开始游戏 2.选择是否退出游戏 3.判断非法输入

代码如下:

void menu ()
{
	printf("######################################################n");
	printf("############### 1.play ####### 0.exit ################n");
	printf("######################################################n");
}
int main ()
{
    int input = 0;
	do
	{
		menu();
		scanf("%d",&input);
	    switch(input)
		{
		case 1:
			printf("游戏开始n");
			game();
			break;
		case 0:
			printf("退出游戏。n");
			break;
		default:
			printf("输入错误,请重新输入。n");
			break;
		}
	}while(input);
}


初始化布置雷的表格和排雷信息的表格
void InitBoard(char Board[ROWS][COLS],int rows,int cols,char set)
{
    int i = 0;
	for(i=0;i
	    int j = 0;
		for(j=0;j
		    Board[i][j]=set;
		}
	}
}


随机布置雷
void setmine (char Board[ROWS][COLS],int row,int col)
{
	int count = 0;
	while(count
	   int x = rand()%row+1;
	   int y = rand()%col+1;
	   if(x>=1 && x<=row && y>=1 && y<=col)
	   {
	        if(Board[x][y]=='0')
			{
			    Board[x][y]='1';
				count++;
			}
	   }
	}

}


打印排雷信息
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");
	 }
}


排查雷
int mine_count (char Board[ROWS][COLS],int x,int y)
{
    return Board[x-1][y-1]+
		Board[x-1][y]+
		Board[x-1][y+1]+
		Board[x][y-1]+
		Board[x][y+1]+
		Board[x+1][y-1]+
		Board[x+1][y]+
		Board[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;
	 while(win
		  scanf("%d %d",&x,&y);
		  //判断坐标合法
	      if(x>=1 && x <=row && y>=1 && y<=col)
		  {
			  //判断该坐标是否被排过
			  if(Show[x][y]=='*')
			  {
			      if(Mine[x][y]=='0')
				  {
				       int ret = mine_count(Mine,x,y);
					   Show[x][y] = ret + '0';
					   DisplayBoard(Show,ROW,COL);
					   win++;
				  }
				  else
				  {
				       printf("你已经被炸死了。n");
					   break;
				  }
			  }
			  else
			  {
			      printf("你已经排查过该坐标。n");
			  }
		  }
		  else
		  {
		      printf("输入的坐标不合分,请重新输入。n");
		  }
	 }

}
扫雷游戏的整体声明
#include
#include
#include

#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);

函数的整体调用
void game ()
{
	char mine[ROWS][COLS]={0};
	char show[ROWS][COLS]={0};
	
	//初始化
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show,ROWS,COLS,'*');
   
	//打印排雷信息
	DisplayBoard(show,ROW,COL);

	//布置雷
	setmine(mine,ROW,COL);

	//排雷
    Findmine(mine,show,ROW,COL);

}

关注点一点,下期更精彩。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034964.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号