c语言实现扫雷基础功能

目录

主函数111.c

头文件minesweeper.h

游戏函数minesweeper.h


主函数111.c

#define _CRT_SECURE_NO_WARNINGS

//扫雷
#include "minesweeper.h"

void meau()
{
	printf("--------------------\n");
	printf("--------1.play------\n");
	printf("--------0.退出------\n");
}
void game()
{
	char bright[HANS][LIES] = { 0 };//建立 界面
	char dark [HANS][LIES] = { 0 };//建立  布雷

	fro_mine(dark,HANS,LIES,'0');//dark初始化为字符0  
	fro_mine(bright, HANS, LIES,'*');//bright初始化为*

	
    print_bright(bright,HAN,LIE);//打印棋盘 

	placemine(dark, HAN, LIE);//布雷
   // print_dark(dark, HAN, LIE);//打印雷盘 

	ifmine(dark, bright, HAN, LIE);//输入判断是否是雷
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
           meau();
       	scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
	    }
	}while (input);

	return 0;
}

头文件minesweeper.h

#pragma once

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

#define HANS HAN+2
#define LIES LIE+2

#define HAN  3
#define LIE  3

#define mine 2

//全部初始化为想要的字符
void fro_mine(char board[HANS][LIES], int han, int lie, char aim);


//打印棋盘
void print_bright(char bright[HANS][LIES], int han, int lie); 

//打印雷盘
void print_dark(char dark[HANS][LIES], int han, int lie); 

//布雷
void placemine(char dark[HANS][LIES], int han, int lie);

//输入判断是否是雷	
void ifmine(char dark[HANS][LIES], char bright[HANS][LIES], int han, int lie);

游戏函数minesweeper.h

#define _CRT_SECURE_NO_WARNINGS

#include "minesweeper.h"


void fro_mine(char board[HANS][LIES],int han, int lie,char aim) //全部转化到aim
{
	int x = 0;
	for (x = 0; x < han; x++)
	{
		int y = 0;
		for (y=0 ;y<lie ;y++)
		{
			board[x][y] =aim;
		}
	}
}

//打印棋盘
void print_bright(char bright[HANS][LIES], int han, int lie)   
{
	int x = 0;
	printf("↘");
	for (x = 1; x <=lie; x++)
	{
		printf(" %d", x);
	}
	printf("\n");

	for (x = 1; x <= han; x++)
	{
		printf("%d|", x);

		int y = 0;
		for (y = 1; y <= lie; y++)
		{
			printf("%c", bright[x][y]);
			if (y < lie)
			{
				printf("|");
			}
		}
		printf("\n");
	}
	
} 


//打印雷盘
	void print_dark(char dark[HANS][LIES], int han, int lie)                     
	{
		int x = 0;
		printf("↘");
		for (x = 1; x <= lie; x++)
		{
			printf(" %d", x);
		}
		printf("\n");
		for (x = 1; x <=han; x++)
		{
			printf("%d|", x);
			int y = 0;
			for (y = 1; y <= lie; y++)
			{
				printf("%c",dark[x][y]);
				if (y < lie)
				{
					printf("|");
				}
			}
			printf("\n");
		}
	}


	//布雷
	void placemine(char dark[HANS][LIES], int han, int lie)
	{
		int x = 0; int y = 0;
		int onmine = mine;
		while(onmine)
		{
			x = rand() % han + 1;
			y = rand() % lie + 1;

			if (dark[x][y] == '0')
			{
				dark[x][y] = '1';
				onmine--;
			}
		}
	}

	//判断有多少个雷
	int calcumine(char dark[HANS][LIES], int x, int y)
	{
		int a = 0;
		int b = 0;
		int sum = 0;
		for (a = -1; a <= 1; a++)
		{
			for (b = -1; b <= 1; b++)
			{
				sum += dark[x + a][y + b];
			}
		}
		int result = sum - 8 * '0';
		 return result;
	}


	//输入判断是否是雷	
	void ifmine(char dark[HANS][LIES], char bright[HANS][LIES], int han, int lie)
	{
		int x = 0;
		int y = 0;
		int rest = han * lie - mine;
		while (rest>0)
		{
			printf("请输入坐标");
			scanf("%d %d", &x, &y);
			if (x >= 1 && x <= han && y >= 1 && y <= lie)
			{
				if (bright[x][y] != '*')
				{
					printf("该坐标已被排查过\n");
					continue;
				}
				if (dark[x][y] == '1')  //是雷
				{
					printf("炸弹爆炸,游戏失败\n");
					print_dark(dark, HAN, LIE);//打印雷盘 
					break;
				}
				else    //不是雷 在bright打印有多少雷
				{
					int num = calcumine(dark, x, y);
					bright[x][y] = num;
					print_bright(bright, HAN, LIE);//打印棋盘 
					rest--;
				}
			}
			else
				printf("坐标非法\n");
		}
		if (rest == 0)
		{
			printf("恭喜您赢得游戏的胜利\n");
		}
     }

总结:

1.未实现标记功能 2.未实现空白铺开

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值