扫雷小练习

目标:学习完指针前所有内容后,运用所学知识实现简易版扫雷小游戏。

1. 创建三个文件,game.h(头文件及函数声明)  game.c(游戏具体流程)  fac.c(函数实现方法)。

2. 写出游戏主体部分,包括菜单、选择。

void menu()
{
	printf("*********************\n");
	printf("******1. play********\n");
	printf("******0. exit********\n");
	printf("*********************\n");
}

int input = 0;
	do
	{
		menu();
		printf("请选择:(1 or 0 )。\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏。");
			break;
		default:
			printf("选择错误!请重新选择:\n");
			break;
		}
	} while (input);

3. 生成两个棋盘。一个用来存储雷的信息,一个用来展示排雷信息。用 1 来标记雷。

char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };

	//初始化棋盘
Initboard(mine, ROWS, COLS, '0');
Initboard(show, ROWS, COLS, '*');

4. 建立好两个棋盘并分别初始化。接下来需要在 mine 棋盘中布置相应数量的雷,以 字符1 表示雷。此处需要设置随机数以确定雷的坐标。引用时间戳来提供两个随机数。同时判断同样位置不能重复布置。

srand((unsigned int)time(NULL));//生成随机数。
a = rand() % 9 + 1;
b = rand() % 9 + 1;
if (get[a][b] != '1')
	{
		get[a][b] = '1';
		n--;
    }

5. 设置好雷后,就需要进行排雷。输入坐标后,对坐标进行判断。是雷输出  被炸死  ,退出本局。不是雷,输出该位置附近雷的数量。当所有不是雷的位置排完后,结束本局游戏。对于非法位置进行提醒并重新输入。

printf("请输入排查的坐标:(a b)。");
scanf("%d %d", &a, &b);
if (get[a][b] != '1')
	{
		get[a][b] = num(got, a, b) + '0';
		printboard(get, ROW, COL);
		count++;
	}
else if (get[a][b] == '1')
	{
		printf("很遗憾,你被炸死了。\n");
		printboard(got, ROW, COL);
		break;
	}
else
	{
		printf("输入错误,请重新输入:");
	}
if (count == row * col - n)
	{
		printf("恭喜你,排雷成功!\n");
	}
	

利用循环实现当排查点附近都没有雷时,展开一片。

if (get[a][b] != '1')
	{
		get[a][b] = num(got, a, b) + '0';
		if (get[a][b] == '0')
		    {
				for (i = a - 1; i <= a + 1; i++)
					{
						for (j = b - 1; j <= b + 1; j++)
						    {
							    get[i][j] = num(got, i, j) + '0';
							    count++;
						    }
					}
					
			}
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值