C语言扫雷源码

目录

1.简介

2.代码

1.test.c 

2.game.h

3.game.c

3.运行

1.踩中雷

2.排雷成功

4.总结


1.简介

        根据百度百科,《扫雷》是一款大众类的益智小游戏,于1992年发行。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

        本篇文章用C语言实现该游戏,介绍代码的实现方式。

2.代码

        代码分为两个源文件和一个头文件,分别是test.c,game.c和game.h。我们分别介绍三个部分的代码。

1.test.c 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include "game.h"//包括game.h头文件,头文件中是game.c中函数的声明

void interface() {

	printf("********************\n");//开始界面
	printf("*****  1.paly  *****\n");
	printf("*****  2.exit  *****\n");
	printf("********************\n");

}

int test() {
	
	interface();
	int n = 0;
	scanf("%d",&n);//读取n,if语句判断是否开始游戏
	if (n == 1) {
		printf("开始游戏\n");
		char mine[ROW + 2][COL + 2] = { '0' };//数组mine埋地雷,不展示
		char show[ROW + 2][COL + 2] = { '0' };//数组show展示揭开地是否有地雷或者附近是否有地雷
		init(mine,'0');//mine全初始化为‘0’
		init(show,'*');//show全初始化为‘*’
		int row = ROW;//行
		int col = COL;//列
		plantboom(mine,show,row,col);//种地雷
		//print(mine,row,col);
		print(show,row,col);//展示show棋盘
		int m = 0;
		int time = 0;
		do{//排雷
			printf("请输入您要扫雷位置的坐标\n");
			m = game(mine, show, row, col);//排雷函数
			if (m == 0)//排雷失败就直接死去
				break;
			if (m == 1) {//排雷成功time计数加1
				time++;
				//printf("%d\n", time);
				if (time == ROW * COL - count) {//全排完了
					printf("WIN\n");
					return 1;
				}
			}
		}while(1);
		return 1;
	}
	else if (n == 2) {//输入2直接退出
		printf("退出游戏\n");
		return 0;
	}
	else {//输入错误重新输入
		printf("输入错误,请重新输入\n");
		return 1;
	}
	
}

int main() {//主函数,函数的入口

	srand((unsigned int)time(NULL));//随机数生成的声明
	int n = 0;
	do {//至少进入test函数一次,所以do    while。
		n = test();
	} while(n);

	return 0;

}

2.game.h

        对game.c中函数的声明。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h> 
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define count 10

int game(char mine[ROW + 2][COL + 2],char show[ROW + 2][COL + 2], int row,int col);

void init(char board[ROW + 2][COL + 2],char set);

void print(char visual[ROW + 2][COL + 2],int row,int col);

void plantboom(char mine[ROW + 2][COL + 2], char show[ROW + 2][COL + 2], int row, int col);

int count_boom(char mine[ROW + 2][COL + 2], char show[ROW + 2][COL + 2], int x, int y);

3.game.c

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

int game(char mine[ROW + 2][COL + 2], char show[ROW + 2][COL + 2], int row, int col) {//排雷函数

	
	int x = 0;
	int y = 0;
	scanf("%d %d",&x,&y);//读取排雷位置坐标
	if (x >= 1 && x <= row && y >= 1 && y <= col)
		if (mine[x][y] == '1') {//踩雷死亡
			printf("WASTED\n");
			return 0;
		}
		else {
			int n = count_boom(mine, show, x, y);
			show[x][y] = n + 48;
			//print(mine, row, col);
			print(show, row, col);
			return 1;
		}
	else {
		printf("输入错误,请重新输入\n");
		return 2;
	}
}

void init(char board[ROW + 2][COL + 2], char set) {//初始化棋盘
	int x = 0;
	int y = 0;
	for (x = 0;x <= ROW + 1;x++) {
		for (y = 0;y <= COL + 1;y++) {
			board[x][y] = set;
		}
	}
}

void print(char visual[ROW + 2][COL + 2],int row, int col) {//打印棋盘

	int x = 0;
	int y = 0;
	printf("--------扫雷--------\n");
	for (x = 0;x <= row;x++)
		printf("%d ",x);
	printf("\n");
	for (x = 1;x <= row;x++) {
		printf("%d ",x);
		for(y = 1;y <= col;y++) {
			printf("%c ",visual[x][y]);
		}
		printf("\n");
	}
	printf("--------扫雷--------\n");
}

void plantboom(char mine[ROW + 2][COL + 2], char show[ROW + 2][COL + 2], int row, int col) {//种雷

	int i = 0;
	for (i = 0;i < count;i++) {
		
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (mine[x][y] == '0')
			mine[x][y] = '1';
		else
			i--;
	}
}

int count_boom(char mine[ROW + 2][COL + 2], char show[ROW + 2][COL + 2], int x, int y) {
//数排雷位置附近八个格子有多少个雷
	return(mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 48*8);

}

3.运行

1.踩中雷

2.排雷成功

        当全部雷都被确定后,就获胜。

4.总结

        《扫雷》游戏的实现是对数组基本知识的一个检测,我很顺利的就编码成功了。这给了我一定的信心和学习兴趣。

        本篇文章到此结束,求求赞赞。

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值