鹏哥C语言——扫雷2021-08-16

这个程序实际上还是比较冗长的,体现了我编程上的一些缺点;另外自动展开功能也没有实现,这个以后使用递归可以解决。

#1 源文件

//头文件 supportingGame.h
#include <stdio.h>
#include <malloc.h>
#include <time.h>
#include <stdlib.h>
//一场游戏。需要:1.雷区(int[][]);2.地雷数目(int);3.死亡与否(int)
struct oneGame {//一个问题就是这个二维数组其实是不定的,在创建结构体时又不能进行动态内存分配。
	char* mineField = NULL;//退而求其次,不能创建动态分配的二维数组,就创建一个指针。用这个指针指向并且操作二维数组。
	int mines = 0;
	int deadOrNot = 1;//1表示没死,0表示挂了
	char* workDone = NULL;//用于表示已经完成的工作,大小和mineField一致。0代表没有完成,1代表完成。

};

int menu();//欢迎界面和模式选择。返回选择的模式。
//1:初级模式(9*9,10);2.中级模式(16*16,40);3.高级模式(16*30,99)4.自定义模式
//自定义不在menu中进行,而在game()中实现

int game(int);//读入游戏模式,返回是否愿意进行下一个游戏
void generateMineField(int row, int col, int mines, oneGame* thisGame);//读入行列和雷的数目,用于初始化oneGame对象和生成雷区。
//由下列几项功能组成:1.生成雷区的二维数组,提供给oneGame对象;给oneGame.mines赋值(初始化oneGame对象)
//2.随机分配地雷埋藏的位置(x,y)。并且在雷区这个二维数组的相应位置赋值为'#'。generateMine();
//3.根据地雷埋藏的位置,生成数字,用于提示。generateNumber();基本原理是数字检测旁边8个方块的地雷数目。
void generateMine(int row0, int col0, int mines, oneGame* thisGame);//在指定数组生成雷
void generateNumber(int row0, int col0, int mines, oneGame* thisGame);
//int displayMineField();
//展示一个简单的扫雷界面。行列标注(不然数起来麻烦),剩余雷的数目,死亡与否,花费时间,雷区组成。
void displayMineField(oneGame*, int row, int col);//每一次扫雷打印一份界面
//扫一次雷。(对workDone数组中的一个元素加以改变)。并且判断有无死亡或是游戏胜利(游戏结束)。
void sweepFieldOnce(oneGame* thisGame, int row, int col);

//源文件supportingGame.cpp
#include "supportingGame.h"

int menu() {
	char mode = 0;
	printf("*******************************\n");
	printf("****Welcome to MineSweeper!****\n");
	printf("*******************************\n");
	printf("**Please choose the game mode**\n");
	printf("#1.primary######\n");
	printf("#2.middle#######\n");
	printf("#3.advanced#####\n");
	printf("#4.user-defined#\n");
	printf("Your choice>:	");
	//这个容错机制(%d)只能对数字容错,改为%c之后能对字符容错
	while (1) {
		scanf("%c", &mode);//这时往往还有字符在缓冲区中,比如\n,会引发一些意想不到的问题。
		/*scanf("%*[^\n]%*c");*///这段代码的意思有待探究,但是使用getchar就可以解决缓冲取的问题
		while (getchar()!='\n') {

		}
		switch (mode) {
		case '1': printf("primary mode starts!\n"); return 1;
		case '2': printf("middle mode starts!\n"); return 2;
		case '3': printf("advanced mode starts!\n"); return 3;
		case '4': printf("define yourself!\n"); return 4;
		default: 
			printf("Wrong input! Again>:	");
			break;
		}

	}
	return -1;
}
int game(int mode) {
	oneGame thisGame;
	int row = 0;
	int col = 0;
	int mines = 0;
	//游戏生成阶段,
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值