扫雷界面比较好看版C(1.0)

扫雷界面比较好看版C(1.0),第1张

扫雷界面比较好看版C(1.0)

先上效果图,让你看看这优美的黑框框= =

 来吧开搞!

目录

1:游戏的组成部分

2:特殊部分提要

(1)创建两个二维数组

mine数组:

 show数组:

2:游戏的实现逻辑

3:数组的大小创建问题

 3:代码实现

(1)game.h

(2)game.c

(3)test.c

4:测试游戏


1:游戏的组成部分

这个我真的不想赘述了= =

原谅我吧,我这有一篇我写的三子棋,框架一样的

三子棋的实现(C)_lihua777的博客-CSDN博客三子棋的实现(C)https://blog.csdn.net/lihua777/article/details/122647702?spm=1001.2014.3001.5501

2:特殊部分提要 (1)创建两个二维数组:

一个二维数组mine,是埋雷的二维数组

一个二维数组show,是呈现给玩家看的二维数组

mine数组:

(它是在你被炸d炸死后才显示出来的)

1表示这个地方埋有雷,0表示这个地方没有雷

 show数组:

(用户在游戏过程中实际看到的图)

 我们要做的功能就是,用户输入排查的坐标:

如果该位置无雷,我们将以该位置为中心,显示它周围8个位置的雷的个数

如果选择的位置有雷,你就被炸死了,给你看一下炸d的埋藏点,让你死也瞑目

2:游戏的实现逻辑

1:初始化两个二维数组

2:打印棋盘(注意两个棋盘的填充物set不同)

3:在mine数组中埋雷

4:展示给用户show棋盘

5:开始排雷(此时要传mine和show两个数组)

6:判断结果

3:数组的大小创建问题

由于要判断周围的8个位置雷的个数,如果我们定义9*9的二维数组,我们还要判断边缘地带的元素的周围8个位置是否越界,所以为了方便,我们定义的是11*11的数组,但是我们给玩家看的是9*9的数组

 3:代码实现 (1)game.h
#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10

void Init_board(char board[ROWS][COLS], int rows, int cols, char set);
void Set_mine(char board[ROWS][COLS],int row,int col,int count);
void Display_board(char board[ROWS][COLS],int row,int col);
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols);
(2)game.c
#include"game.h"

void Init_board(char board[ROWS][COLS], int rows, int cols, char set)
//初始化棋盘
{
	int i = 0;
	int j = 0;
	for (i = 0; i < rows; i++)
	{
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}
}

void Set_mine(char mine[ROWS][COLS], int row, int col, int count)
{//埋雷
	while (count)
	{
		int x = rand() % 9 + 1;//坐标范围:[1,9];
		int y = rand() % 9 + 1;
		if (mine[x][y] == '0')//如果此地未埋过雷,则在此地埋雷
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

void Display_board(char board[ROWS][COLS], int row, int col)
{
	int i = 1;
	int j = 1;

	printf("0    ");
	//打印列号
	for (i = 1; i <= col; i++)
	{
		printf("%d   ", i);
	}
	printf("n");//换行打横线
	for (i = 0; i <= col; i++)
	{
		printf("----");
	}
	printf("n");//换行打棋盘
	//真正打印棋盘
	for (i = 1; i <= row; i++)
	{
		printf("%d   ", i);//打印行号
		for (j = 1; j <= col; j++)
		{
			printf(" %c ", board[i][j]);//打印二维数组里的真正元素
			if (j <= col)//j的范围[1:9]
			{
				printf("|");//打竖线
			}
		}
		printf("n");//换行
		if (i < row )//row=9 i<8打印| -》 行数小于9则打印竖线
		{
			for (j = 0; j <= col; j++)
			{
				printf("---");
				if (j <= col)
				{
					printf("|");
				}
			}
		}
		printf("n");
	}
}

static int count_num(char mine[ROWS][COLS], int x, int y)//计算周围的8个位置雷的个数
{
	return mine[x - 1][y - 1] + mine[x - 1][y] + 
		mine[x + 1][y] +mine[x + 1][y - 1] + 
		mine[x + 1][y + 1] + mine[x - 1][y + 1] + 
		mine[x][y + 1] +mine[x][y - 1] - 8 * '0';
}

void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;//用win来记录已排雷的个数
	while (win < (row * col - EASY_COUNT))//当已排雷的个数==总格数-雷数即跳出循环
	{
		printf("输入要排查的坐标:");
		scanf("%d %d", &x, &y);
		if (x > row || x< 0 || y>col || y < 0)
		{
			printf("坐标非法,请重新输入");
		}
		else
		{
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了n");
				Display_board(mine, ROW, COL);
				break;
			}
			else
			{
				show[x][y] = count_num(mine, x, y) + '0';
				Display_board(show, ROW, COL);
				win++;
			}
		}
	}
	if (win == (row * col - EASY_COUNT))//跳出循环打印成功
	{
		printf("排雷成功!n");
	}
}
(3)test.c
#include"game.h"
void game()
{
	char mine[ROWS][COLS] = { 0 };//存放雷的埋藏信息
	char show[ROWS][COLS] = { 0 };//展示给用户看的棋盘

	Init_board(mine, ROWS, COLS, '0');//初始化埋雷棋盘
	Init_board(show, ROWS, COLS, '*');//初始化给用户看的棋盘
	
	Set_mine(mine, ROW, COL, EASY_COUNT);//埋雷

	Display_board(show, ROW, COL);//展示给用户棋盘
	//printf("______________透视作弊器_______________n");
	//Display_board(mine, ROW, COL);//展示给用户棋盘
	Find_mine(mine, show, ROW, COL);//开排
}

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

void test()
{
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请输入->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏n");
			break;
		default:
			printf("选择错误,请重新选择n");
			break;
		}
	} while (input);
}
int main()
{
	test();
	return 0;
}

4:测试游戏

可以将埋雷图展示出来,并将雷的个数调为80个,这样我们只用看着图找1个位置即可,这也是定义全局变量的好处

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713624.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存