C语言扫雷的一些心得

 

文章目录

  • 前言
  • 一、对于扫雷的认识
  • 二、关于扫雷游戏的实现
    • 1.设计出游戏的大体模样
    • 2.游戏需用到的头文件
    • 3.初始化函数
    • 4.埋雷函数
    • 5.打印函数
    • 6.排雷函数
  • 总结


前言

这是关于我自己对扫雷的一些认识,希望大家能提些建议。


一、对于扫雷的认识

在一个系统给出的棋盘里找出不是雷的坐标。

二、关于扫雷游戏的实现

1.设计出游戏的大体模样

在我们玩游戏的时候一般都会有一个菜单让你选择,所以脑中第一个想法就是创建出一个菜单,

当菜单有了之后,自然而然我们就会需要输入我们的选择让电脑执行我们的想法。

当我们选择了‘0’的话,电脑应输出游戏结束并停止程序的运行。而选择出现错误的时候,电脑应让我们重新选择,所以这应该是一个循环。我们规定‘1’为雷,‘0’为不是雷。

当我们进入游戏,我们要创建两个二维数组。一个用来随机存放雷,另一个用‘*’来掩盖这些坐标。

先让两个数组全都初始化。在arr1中埋雷,埋雷是随机的,所以我们要用到随机函数rand(),而使用rand函数时,要先使用srand函数。我们以系统时间为变量。头文件就需要有#include和#include。当雷埋完之后,就再次打印棋盘,让我们输入坐标。到这阶段的时候,就要开始排雷。如果运气不好,第一步就踩到了雷。这很好办,我们让电脑输出游戏结束跳出循环,并把棋盘所有的雷打印出来在屏幕上显示。若想要赢,要把除了雷的坐标全打印出来,在9*9的棋盘里这要输入71个坐标才能获胜。我们每输入一次我们就让count++;直到count=71;我们跳出循环,并输出您获胜了。

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
	printf("*********************\n");
	printf("****1.play 0.exit****\n");
	printf("*********************\n");
}
void game()
{
	char arr1[ROWS][COLS] = { 0 };
	char arr2[ROWS][COLS] = { 0 };
	init(arr1, ROWS, COLS, '0');
	init(arr2, ROWS, COLS, '*');
	mailei(arr1, ROW, COL);
	display(arr2, ROW, COL);
	pailei(arr1, arr2, ROWS, COLS);
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

2.游戏需用到的头文件

代码如下

#pragma once
#include
#include
#include

#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10

void init(char arr[ROWS][COLS], int rows, int cols, char set);
void mailei(char arr1[ROWS][COLS], int row, int col);
void display(char arr2[ROWS][COLS], int row, int col);
void pailei(char arr1[ROWS][COLS], char arr2[ROWS][COLS], int row, int col);

3.初始化函数

代码如下:

void init(char arr[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			arr[i][j] = set;
		}
	}
}

4.埋雷函数

代码如下:

void mailei(char arr1[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int i = 0;
	int count = EASY_COUNT;
	while (count)
	{
		x = rand() % ROW + 1;
		y = rand() % COL + 1;
		for (i = 0; i < EASY_COUNT; i++)
		{
			if (arr1[ROW][COL] == '0')
			{
				arr1[x][y] = '1';
				count--;
			}
		}
	}
}

5.打印函数

代码如下:

void display(char arr2[ROWS][COLS], int row, int col)
{
	int i = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n**********扫雷***********\n");
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", arr2[i][j]);
		}
		printf("\n");
	}
}

6.排雷函数

代码如下:​

int shuzi(char arr1[ROWS][COLS], int x, int y)
{
		return arr1[x - 1][y - 1] + 
		arr1[x - 1][y] + 
		arr1[x - 1][y + 1] + 
		arr1[x][y - 1] + 
		arr1[x][y + 1] + 
		arr1[x + 1][y - 1] + 
		arr1[x + 1][y] + 
		arr1[x + 1][y + 1] - 8 * '0';
}
void pailei(char arr1[ROWS][COLS], char arr2[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while (win <= ROW * COL - EASY_COUNT)
	{
		printf("请输入要排查的坐标:>");
		scanf("%d%d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (arr1[x][y] == '1')
			{
				printf("抱歉,游戏结束\n");
				display(arr1, ROW, COL);
				break;
			}
			else
			{
				int count = shuzi(arr1,x,y);
				arr2[x][y] = count + '0';
				display(arr2, ROW, COL);
				win++;
			}
		}
		else
		{
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == ROW * COL - EASY_COUNT)
	{
		printf("你赢了\n");
		display(arr1, ROW, COL);
	}
}

​​​​​​


总结

以上就是我对扫雷游戏的认识,当你了解扫雷本质是一个二维数组,在二维数组中放难度不同的雷进去,让人输入坐标去排除这些雷之后,你会发现和三子棋的一些程序很相似。

写博客的能力还有待加强。

你可能感兴趣的:(博客,扫雷游戏,c语言,开发语言,后端)