C语言小游戏——扫雷


扫雷的实现:

1.盘的打印

2.随机布雷

3.安全第地周围雷的个数

4.判断输赢

#ifndef  __GAME_H__
#define  __GAME_H__

#include<stdio.h>
#include<stdlib.h>

#define ROW 11
#define COL 11     //在这里可以改变棋盘的大小

void init_board(char arr1[ROW][COL], char arr2[ROW][COL]);
void  display_board(char arr2[ROW][COL]);
void  set_lei(char arr1[ROW][COL]);
int lei_shu(char arr1[ROW][COL], int x, int y);
void player_move(char arr1[ROW][COL], char arr2[ROW][COL]);

#endif

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
#include<stdio.h>

void init_board(char arr1[ROW][COL], char arr2[ROW][COL])
{
	memset(arr1, ' ', ROW*COL*sizeof(arr1));
	memset(arr2, '*', ROW*COL*sizeof(arr2));

}

void  display_board(char arr2[ROW][COL])   //打印棋盘
{
	int i = 0;
	int j = 0;
	printf("  ");
	for (i = 1; i < COL - 1; i++)
		printf("%2d", i);
	printf("\n");
	for (i = 1; i < ROW - 1; i++)
	{
		printf("%2d ", i);
		for (j = 1; j < COL - 1; j++)
		{
			printf("%c ", arr2[i][j]);
		}
		printf("\n");
	}
}

void  set_lei(char arr1[ROW][COL])    //利用srand随机生成雷
{
	int x = 0;
	int y = 0;
	int count = 10;     //可以改变雷的个数
	srand((unsigned int)time(NULL));
	while (count)
	{
		x = rand() % (ROW - 2) + 1;
		y = rand() % (COL - 2) + 1;
		if (arr1[x][y] = '0')
		{
			arr1[x][y] = '1';
			count--;
		}
	}
}

int lei_shu(char arr1[ROW][COL], int x, int y)     //显示出安全地周围雷的个数
{
	int count = 0;
	if (arr1[x + 1][y + 1] == '1')
		count++;
	if (arr1[x + 1][y] == '1')
		count++;
	if (arr1[x + 1][y - 1] == '1')
		count++;
	if (arr1[x][y - 1] == '1')
		count++;
	if (arr1[x][y + 1] == '1')
		count++;
	if (arr1[x - 1][y - 1] == '1')
		count++;
	if (arr1[x - 1][y] == '1')
		count++;
	if (arr1[x - 1][y + 1] == '1')
		count++;
	return count;
}


以下就是扫雷中最重要的部分:如何进行扫雷


void player_move(char arr1[ROW][COL], char arr2[ROW][COL])     
{
	int tmp = 1;
	int i = 0;
	int j = 0;
	int num = 0;
	while (num != (ROW - 2)*(COL - 2) - 10)
	{
		printf("  ");
		for (i = 1; i<COL - 1; i++)
		{
			printf("%2d", i);
		}
		printf("\n");
		for (i = 1; i<ROW - 1; i++)
		{
			printf("%2d", i);
			for (j = 1; j<COL - 1; j++)
			{
				printf("%2c", arr1[i][j]);
			}

			printf("\n");
		}
		printf("请输入下子位置:");
		scanf("%d%d", &i, &j);
		int x = 0;
		int y = 0;
		if ((i >= 1) && (j >= 1) && (i <= ROW - 2) && (j <= COL - 2))
		{
			while (tmp == 1)
			{
				if (arr1[i][j] == '1')
				{
					while (tmp == 1)
					{
						arr1[i][j] = '0';
						y = rand() % 9;
						x = rand() % 9;
						if (arr1[x][y] = '0')
						{
							arr1[x][y] = '1';
							t = 0;
						}
					}
				}
				else
				{
					tmp = 0;
				}
			}
			if (arr1[i][j] == '1')
			{
				printf("失败\n");
				return;
			}
			else
			{
				int ret = lei_shu(arr1, i, j);
				arr2[i][j] = ret + '0';
				num++;
				display_board(arr2);
			}
		}
		else printf("请重新输入:\n");
	}
	printf("恭喜你。\n");
}

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include"game.h"

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


void game()
{
	char arr1[ROW][COL] = { 0 };
	char arr2[ROW][COL] = { 0 };

	 init_board(arr1, arr2);
	 display_board(arr2);
	 set_lei(arr1);
	 player_move(arr1, arr2);


}

int main()
{
	int input;
	do
	{
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			break;
		default:
			printf("输入错误。\n");
		}
	} while (input);
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Messi_31/article/details/79868000