C语言多文件编写简单的扫雷游戏

使用C语言编写扫雷游戏

1.多文件

多文件包含自己写的头文件,和两个源文件。

2.大概思路。

作为新手编写扫雷游戏,只能利用数组,循环编写一个不太完善的扫雷游戏,下边是我写扫雷游戏的大致思路。

1、首先需要画一个棋盘,需要创建两个二维字符类型数组且大小相同,一个显示给用户,一个隐藏起来。
2、在隐藏的棋盘里边需要设置雷的个数,我设计的棋盘大小是10*10的,有100 个元素,其中雷的个数是20个。
雷用字符‘1’,表示,
3、进行扫雷,输入自己的坐标,并进行判断。
如果输入坐标在隐藏的数组里对应的不是雷,我们需要统计它周围的雷的个数,并赋给显示给用户的棋盘对应的坐标上。
如果输入坐标不在棋盘上,或者该位置已经被扫过,就重新输入。
如果输入坐标在隐藏的数组里对应的是雷,直接退出游戏,你被炸死了。
4、编写统计雷个数的函数。

1.各自文件对应的代码

自己写的头文件<M_Game.h >代码如下(示例):

#pragma once
#include<stdio.h>
#include<string.h>
#include<time.h>

#pragma warning(disable:4996)

#define NUMS 20
#define ROW 12
#define COL 12
void menu();
int GetMines(char mine_board[][COL], int row, int col, int x, int  y);
void ShowBoard(char mine_board[][COL], int row, int col);
void SetMine(char mine_board[][COL], int row, int col);

2、M_Game.c文件代码

<M_Game.c>代码如下:

```c
#include"M_Game.h"
void menu()
{
	printf("*****************************\n");
	printf("***********1.play************\n");
	printf("***********0.exit************\n");
	printf("*****************************\n");
}
void SetMine(char mine_board[][COL], int row, int col)
{
	int count = NUMS;
	while (count)
	{
		int x = rand() % 10 + 1;
		int y = rand() % 10 + 1;
		if (mine_board[x][y] = '0')
		{
			mine_board[x][y] = '1';
			count--;
		}
	}
}
int GetMines(char mine_board[][COL], int row, int col, int x, int  y)
{
	return mine_board[x - 1][y - 1] + mine_board[x - 1][y]\
		+ mine_board[x - 1][y + 1] + mine_board[x][y - 1]\
		+ mine_board[x][y + 1]+ mine_board[x + 1][y - 1] \
		+ mine_board[x + 1][y] + mine_board[x + 1][y + 1]-8*'0';
}
void ShowBoard(char show_board[][COL], int row, int col)
{
	printf(" ");
	for (int i = 1; i < row - 1; i++)
	{
		printf("   %d",i);
	}
	printf("\n—————————————————————\n");
	for (int i = 1; i < row - 1; i++)
	{
		printf("%2d|", i);
		for (int j = 1; j < col - 1; j++)
		{
			printf(" %c |", show_board[i][j]);
		}
		printf("  \n—————————————————————\n");
	}
}
void M_Game()
{
	char show_board[ROW][COL];
	char mine_board[ROW][COL];
	memset(show_board, '*', sizeof(show_board));
	memset(mine_board, '0', sizeof(mine_board));
	srand((unsigned long)time(NULL));
	SetMine(mine_board,ROW,COL);
	int count = (ROW - 2) * (COL - 2) - NUMS; 
	int x = 0;
	int y = 0;
	do
	{
		ShowBoard(show_board, ROW, COL);
		printf("请选择你扫的位置:\n");
		scanf("%d %d",&x,&y);
		if (x < 1 || x>10 || y < 1 || y>10)
		{
			printf("你输入的位置越界了,请重输!!!\n");
			continue;
		}
		else if (show_board[x][y] != '*')
		{
			printf("这个位置已经被排除,请重新输入!!!\n");
			continue;
		}
		else if (mine_board[x][y] == '1')
		{
			break;
		}
		else
		{
			int ret = GetMines(mine_board,ROW,COL,x,y);
			show_board[x][y] = ret+'0';
			count--;
		}
	} while (count > 0);
	if (count > 0)
	{
		printf("你被炸死了!!\n");
	}
	else
	{
		printf("你赢了!\n");
	}
	ShowBoard(show_board,ROW,COL);
	ShowBoard(mine_board, ROW, COL);
}
3.main.c文件代码如下

```c
#include"M_Game.h"
int main()
{
	int quit = 0;
	int input = 0;
	while (!quit) 
	{
		menu();
		printf("请选择<1|0>:\n");
		scanf("%d", &input);
		switch (input)
		{case 1:
			M_Game();
			break;
		case 0:
			quit = 1;
			break;
		default:
			printf("输入错误,请重输!!!\n");
			break;
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值