扫雷C语言核心知识点

本文介绍了如何使用C语言实现一个简单的扫雷游戏,包括创建棋盘、初始化、布雷、用户输入验证和输出结果。核心内容涉及棋盘边界处理、随机布雷以及用户交互逻辑。
摘要由CSDN通过智能技术生成

一:构思

①创建两个棋盘(一个用来显示,一个用来储存信息)

②初始化棋盘

③利用随机数将棋盘布雷

④用户输入进行扫雷

⑤输出棋盘

二:核心知识

①创建棋盘因为要统计周围八个空格内的雷数,故边界需要特殊考虑,不如多创建两行两列(例如9x9的棋盘创建时创建11x11,print输出时只输出9x9即可)

②初始化棋盘通过for遍历一遍二维数组即可

③布雷时利用srand()和rand()布置即可,注意随机数要在9x9中央棋盘范围内

④用户输入时,先判断是否在合理范围,如果是合理范围,先判断是不是雷,如果不是雷,遍历周围八个数,输出雷的个数在展示棋盘中

⑤输出棋盘只需要遍历数组即可

附代码:

1.game.h

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define row 9
#define line 9
#define rows 11
#define lines 11
#define number 10
void initbord(char bord[rows][lines], char rest);
void print(char bord[rows][lines]);
void setbord(char bord[rows][lines]);
void findbord(char bord[rows][lines], char show[rows][lines]);

2.game.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void initbord(char ret[rows][lines],char rest)
{
	for (int i = 0; i < rows; i++)
	{
		for (int j = 0; j < lines; j++)
		{
			ret[i][j] = rest;
		}
	}
}
void print(char bord[rows][lines])
{
	printf("   -----------------");
	printf("\n");
	printf("   1 2 3 4 5 6 7 8 9");
	printf("\n");
	for (int i = 1; i <= row; i++)
	{
		printf("%d  ", i);
		for (int j = 1; j <= line; j++)
		{
			printf("%c ", bord[i][j]);
		}
		printf("\n");
	}
}
void setbord(char bord[rows][lines])
{
	int cont = number;
	while (cont)
	{
		int x = rand() % row + 1;
		int y = rand() % line + 1;
		if (bord[x][y] == '0')
		{
			bord[x][y] = '1';
			cont--;
		}
		
	}
}
int sum(char bord[rows][lines], int x, int y)
{
	return bord[x + 1][y] + bord[x][y] + bord[x - 1][y] +
		bord[x][y + 1] + bord[x + 1][y + 1] + bord[x - 1][y + 1] +
		bord[x][y - 1] + bord[x + 1][y - 1] + bord[x - 1][y - 1] -
		9 * '0';
}

void findbord(char bord[rows][lines], char show[rows][lines])
{
	int i = 0;
	int j = 0;
	int cont = number;
	while (row*line - cont)
	{
		printf("请输入坐标>");
		scanf("%d %d", &i, &j);
		if (i < 1 || i >9 || j < 1 || j >9)
			printf("输入错误");
		else if (bord[i][j] == '1')
		{
			printf("BOOM\n");
			print(bord);
			break;
		}
		else {
			int ret = sum(bord, i, j);
			show[i][j] = ret + '0';
			print(show);
			cont++;
		}
		if (row * line == cont)
		{
			printf("恭喜你,扫雷成功\n");
		}
	}
	
}

3.text.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu(void)
{
	printf("1.play\n");
	printf("0.exit\n");
}
void game(void)
{
	char bord[rows][lines] = { 0 };
	char show[rows][lines] = { 0 };
	initbord(bord,'0');
	initbord(show,'*');
	//print(bord);
	print(show);
	setbord(bord);
	//print(bord);
	findbord(bord , show);
}
int main()
{
	int i = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择>\n");
		scanf("%d", &i);
		switch (i)
		{
		case 1 :
			printf("游戏开始\n");
			game();
			break;
		case 0 :
			printf("游戏结束\n");
			break;
		default :
			printf("输入错误,请重新输入\n");
			break;
		}

	} while (i);
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值