简易版 扫雷!

  用已经学的知识 实现一个 简易的扫雷小游戏!

思路 

1,打印一个简易游戏菜单

2,创建扫雷棋盘

3,布雷

4,玩家输入坐标进行坐标排雷,并检测附近坐标

如果是雷 ,游戏结束

不是雷 反馈出附近8个坐标的雷数

5,判定玩家输赢

 头文件 .h

#pragma once
#include<stdio.h>
#include<stdlib.h>// rand 与 srand 
#include<time.h>// 时间戳

// 展示数组 行和列
#define ROW 9
#define COL 9

// 布雷数组 行和列
#define ROWS ROW+2
#define COLS COL+2

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */


// 游戏简易菜单
void menu();

// 初始化 展示数组 
void init_arr(char arr[][COLS],int r,int c,char ch);

// 打印 排雷数组
void print_arr(char arr[][COLS],int r,int c);

// 布雷
void Layout_mine(char arr[][COLS],int r,int c);

// 排雷
void Check_mine(char arr1[][COLS], char arr2[][COLS],int r,int c);

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

具体函数定义的实现  .c

#define  _CRT_SECURE_NO_WARNINGS 1
#include"game.h"


// 游戏简易菜单
void menu()
{
	printf("************************************\n");
	printf("********* ---- 扫雷小游戏 ---- *****\n");
	printf("***********     game: 1     *******\n");
	printf("***********     exit: 0     *******\n");
	printf("***********************************\n");

}

// 初始化  展示数组
void init_arr(char arr[][COLS],int r,int c,char ch)
{
	
	int i = 0;
	for (; i < r; i++)
	{
		int j = 0;
		for (; j < c; j++)
		{
			arr[i][j] = ch;
		}
	}

}


// 打印 
void print_arr(char arr[][COLS],int r,int c)
{
	int i = 0;
	
	//  打印对应的 行号
	printf(" 0  ");
	for (int i = 1; i <= r; i++)
	{
		printf("%d ",i);
	}
	printf("\n");

	for (i=1; i <= r; i++)
	{
		printf("%2d: ",i);
		int j = 1;
		for (; j <= c; j++)
		{
			printf("%c ", arr[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}


// 布雷
// 在布雷数组中 生成 1-10的下标位置
void Layout_mine(char arr[][COLS],int r,int c)
{
	// 玩家自己设置 雷的数量
	printf("请输入想要设置 雷的数量,最大雷数为%d~\n", r * c);

	int a = 0;

	again:
	scanf("%d", &a);

	// 对 行和列的 最大布雷数做出判断,最小为 1个雷,最大为 行×列,不然会陷入死循环
	if (a<1 || a>r * c)
	{
		printf("\n *请合理设置 雷数~\n");
		goto again;
	}

	printf("生成中.......\n");

	while (a)
	{
		// 生成 0-9的数字 +1 得到 1-10 的数字

		//得到 行下标 x , 列下标 y
		int x = rand() % r + 1; //获取随机数
		int y = rand() % c + 1;

		// 将 下标插入到 布雷数组中,将其改为 字符 '1'
		
		// 注意 ! 有概率 坐标位置相同
		if (arr[x][y] == '0')
		{
			arr[x][y] = '1';

			a--;// 布雷成功 --,失败则 不操作
		}

	}
	
	printf("加载完成!\n");
}

//   排雷
void Check_mine(char arr1[][COLS], char arr2[][COLS],int r,int c)
{

	// 输入坐标 进行 排雷
	int x = 0;// 行
	int y = 0;// 列

	while (1)
	{
		printf("********* 扫雷 **********\n");
		print_arr(arr1, r, c);
		// 输入
		printf("请输入,需要排查的坐标:>");

		again:
		scanf("%d %d", &x, &y);

		//system("cls");

		// 检查坐标合法性 

		if (( x<1 || x>r ) || ( y<1 || y>c ))
		{
			// 坐标 不合法 ,提示
			printf("\n坐标不合法,请重新输入:");

			// goto 实现直接跳转
			goto again;
		}
		else if (arr1[x][y] != '*')
		{
			printf("坐标无效!请重新输入:>");
			goto again;
		}
		// 坐标合法 时 ,检查坐标位置是否是 雷,雷则游戏结束,不是雷则将 周围 8个坐标进行排查 有几个雷
		else
		{
			// 判断 
			if (arr2[x][y] == '1')
			{
				arr1[x][y] = '1';
				print_arr(arr2,c,r);
				printf("很不幸!你被炸死了~\n\n");
				return;
			}
			else
			{                               // 续行符 \ ,后面不可以跟任何东西,包括 注释,多打一个空格键都不可以
				/* 上 */int a = (arr2[x - 1][y] - '0') + (arr2[x - 1][y - 1] - '0') + (arr2[x - 1][y + 1] - '0')\
				/* 中*/       + (arr2[x][y - 1] - '0') + (arr2[x][y + 1] - '0')\
				/* 下*/       + (arr2[x + 1][y] - '0') + (arr2[x + 1][y - 1] - '0') + (arr2[x + 1][y + 1] - '0');
				arr1[x][y] = a + '0';
				
			}
		}
		
		


	}

}

---------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------

main函数调用 .c  游戏开始

void game()
//{
//	//  排雷 数组
//	char show[ROWS][COLS] = { 0 };
//	//  布雷 数组
//	char mine[ROWS][COLS] = { 0 };
//
//	// 初始化 排雷
//	init_arr(show,ROWS,COLS,'*');
//	// 初始化 布雷
//	init_arr(mine,ROWS,COLS,'0');
//
//	// 打印 show
//	//print_arr(show,ROW,COL);
//	 
//	// 布雷
//	Layout_mine(mine,ROW,COL);
//	// 打印 布雷后的数组
//	//print_arr(mine,ROW,COL);
//
//	//   开始 排雷
//	Check_mine(show, mine,ROW,COL);
//
//}
//int main()
//{
//
//	// 产生随机数
//	srand((unsigned int)time(NULL));
//
//	int n = 0;
//
//	do {
//		menu();
//		printf("**请输入~~:> ");
//		scanf("%d", &n);
//		switch (n)
//		{
//		case 1:
//			game();
//			break;// 执行完跳出
//		case 0:
//			printf("退出游戏!\n");
//			break;
//
//		default :// 输入错误 走这里提示
//			printf("输入错误!请重新输入!\n");
//			break;
//		}
//
//	} while (n);
//
//	return 0;
//}

int main()
{
	int a = 0;
	int b = 0;
	scanf("%x %o", &a, &b);

	printf("%x %o %d\n", a, b,a+b);

	return 0;
}

代码敲完最重要的就是 运行出bug后 如何调试!

下一章 简述VS的调试如何使用。。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值