老程序员教你一天时间完成C语言扫雷游戏

目录
  • 扫雷游戏
  • 1.菜单
  • 2.初始化棋盘
  • 3.打印棋盘
  • 4.布置雷
  • 5.排查雷
  • 6.整体效果展示
  • 7.代码分享
    • 7.1 test.c
    • 7.2 game.c
    • 7.3 game.h
  • 总结

扫雷游戏

今天我们就要设计一款这样的游戏,首先需要设置棋盘,然后对棋盘进行随机布雷,最后在排雷。

1.菜单

首先制作一个简易菜单

int main() {
	int input;
	srand((unsigned int)time(NULL));
	do {
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input) {
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}

	} while(input);
	return 0;
}

效果如下:

2.初始化棋盘

首先需要设置两个二维数组,分别存放雷的信息和排查出雷的信息

	char mine[ROWS][COLS] = { 0 };//存放雷的信息
	char show[ROWS][COLS] = { 0 };//存放排查出雷的信息

然后对其进行初始化

//初始化棋盘

void InitBoard(char board[ROWS][COLS], int rows, int cols,char set) {
	for (int i = 0;i < rows;i++) {
		for (int j = 0;j < cols;j++) {
			board[i][j] = set;
		}
	}
}

3.打印棋盘

棋盘的打印可以直接遍历二维数组,并加上一些分割线

void PrintBoard(char board[ROWS][COLS], int row, int col) {
	printf("--------扫雷--------\n");
	for (int i = 0;i <= 9;i++) {
		printf("%d ", i);
	}
	printf("\n");

	for (int i = 1;i < row+1 ;i++) {
		printf("%d ", i);
		for (int j = 1;j < col+1;j++) {
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------------------\n");

}

打印出来的棋盘如下

4.布置雷

棋盘打印出来了,接下来就是在棋盘上随机布雷

void SetMine(char board[ROWS][COLS], int row, int col) {
	int count = EASY_COUNT;
	while (count) {
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (board[x][y] != '1') {
			board[x][y] = '1';
			count--;
		}
	}
}

5.排查雷

排查雷采用玩家输入坐标,对比观察该坐标是否有雷并给出提示,提示显示该坐标周围有几个雷或者是否被炸死

//排查雷
int GetMineCount(char board[ROWS][COLS],int x,int y) {
	int count=0;
	for (int i = x - 1;i <= x + 1;i++) {
		for (int j = y - 1;j <= y + 1;j++) {
			count += (board[i][j]-'0');
		}
	}
	return count;
}

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
	int x, y,win=0;
	while (win<row*col-EASY_COUNT) {
		printf("请输入坐标\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col) {
			if (mine[x][y] != '1') {
				int count = GetMineCount(mine,x,y);
				show[x][y] = count + '0';
				PrintBoard(show, ROW, COL);
				win++;
			}
			else {
				printf("很遗憾,你被炸死了\n");
				PrintBoard(mine, ROW, COL);
				break;
			}
		}
		else {
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == row * col - EASY_COUNT) {
		printf("恭喜你,排雷成功\n");
		PrintBoard(mine, ROW, COL);
	}

}

6.整体效果展示

7.代码分享

7.1 test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu() {
	printf("*********************************\n");
	printf("*********    1. play   **********\n");
	printf("*********    0. exit   **********\n");
	printf("*********************************\n");
}
void game() {
	char mine[ROWS][COLS] = { 0 };//存放雷的信息
	char show[ROWS][COLS] = { 0 };//存放排查出雷的信息
	//初始化棋盘
	InitBoard(mine, ROWS, COLS,'0');
	InitBoard(show, ROWS, COLS,'*');
	//打印棋盘
	//PrintBoard(mine, ROW, COL);
	PrintBoard(show, ROW, COL);

	//布置雷
	SetMine(mine, ROW, COL);
	//PrintBoard(mine, ROW, COL);

	//排查雷
	FindMine(mine, show, ROW, COL);

}
int main() {
	int input;
	srand((unsigned int)time(NULL));
	do {
		menu();
		printf("请选择:\n");
		scanf("%d", &input);
		switch (input) {
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}

	} while(input);
	return 0;
}

7.2 game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"

//初始化棋盘

void InitBoard(char board[ROWS][COLS], int rows, int cols,char set) {
	for (int i = 0;i < rows;i++) {
		for (int j = 0;j < cols;j++) {
			board[i][j] = set;
		}
	}
}

//打印棋盘

void PrintBoard(char board[ROWS][COLS], int row, int col) {
	printf("--------扫雷--------\n");
	for (int i = 0;i <= 9;i++) {
		printf("%d ", i);
	}
	printf("\n");

	for (int i = 1;i < row+1 ;i++) {
		printf("%d ", i);
		for (int j = 1;j < col+1;j++) {
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("--------------------\n");

}

//设置雷

void SetMine(char board[ROWS][COLS], int row, int col) {
	int count = EASY_COUNT;
	while (count) {
		int x = rand() % 9 + 1;
		int y = rand() % 9 + 1;
		if (board[x][y] != '1') {
			board[x][y] = '1';
			count--;
		}
	}
}

//排查雷
int GetMineCount(char board[ROWS][COLS],int x,int y) {
	int count=0;
	for (int i = x - 1;i <= x + 1;i++) {
		for (int j = y - 1;j <= y + 1;j++) {
			count += (board[i][j]-'0');
		}
	}
	return count;
}

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col) {
	int x, y,win=0;
	while (win<row*col-EASY_COUNT) {
		printf("请输入坐标\n");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col) {
			if (mine[x][y] != '1') {
				int count = GetMineCount(mine,x,y);
				show[x][y] = count + '0';
				PrintBoard(show, ROW, COL);
				win++;
			}
			else {
				printf("很遗憾,你被炸死了\n");
				PrintBoard(mine, ROW, COL);
				break;
			}
		}
		else {
			printf("坐标非法,请重新输入\n");
		}
	}
	if (win == row * col - EASY_COUNT) {
		printf("恭喜你,排雷成功\n");
		PrintBoard(mine, ROW, COL);
	}

}

7.3 game.h

#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10

//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set);
//打印棋盘
void PrintBoard(char board[ROWS][COLS], int row, int col);
//设置雷
void SetMine(char board[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char board1[ROWS][COLS], char board2[ROWS][COLS], int row, int col);

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 用C语言实现简单扫雷小游戏

    前言 今天学习了制作简易扫雷游戏,代码如下 提示:以下是本篇文章正文内容,下面案例可供参考 一.函数头文件(函数声明) 代码如下(示例): #pragma once #define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2 #define EASY_COUNT 10 #include<stdlib.h> #include<time.h> //初始化棋盘 void initboard(char board[RO

  • 用C语言简单实现扫雷小游戏

    本文实例为大家分享了C语言简单实现扫雷小游戏的具体代码,供大家参考,具体内容如下 设计思路 1. 定义两个二维数组,一个存放炸弹信息,一个隐藏信息后向玩家展示. 2. 玩家每一次选择都要判断是否踩到炸弹,如果踩雷,将结束游戏,否则继续游戏. 3.玩家每一次判断后要将新棋盘展示给玩家,且将该位置附近雷的个数展示出来. 4.最后如果玩家找到所有非雷区时,玩家获胜. 首先,我们设计一个简单的主函数 方便玩家自由选择进入游戏与退出游戏 int main() { int input = 0; srand(

  • C语言版扫雷小游戏

    本文实例为大家分享了C语言版扫雷小游戏的具体代码,供大家参考,具体内容如下 一.游戏功能 1.显示该点周围雷的个数 2.第一次下子,不炸死 3.坐标周围没雷,可以实现展开 二.效果展示 三.设计思路 这里由于博主目前能力有限,所以这里就用输入坐标的形式来进行排雷. 要想实现上方游戏功能其实也不难,总体思路就是:我们用几个算法模块来模拟游戏规则,实现上方的功能,然后用函数来调用各个模块使游戏跑起来. 接下来我们就来看看如何用C语言代码来实现游戏吧! 四.游戏实现步骤 1.游戏菜单 首先我们需要打印

  • C语言编程实现扫雷游戏

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 在我们熟知的扫雷中,我们点击小方块,小方块要么出现数字,要么遇到地雷.我打算,使用数组的方式来完成扫雷游戏.使用一个数组用来生成随机地雷,使用另外一个数组,用来进行游戏,该数组可以先将所有的元素都初始化为'*',表示没有被扫雷的坐标点. 以下是代码部分. 这是test.c文件 #define _CRT_SECURE_NO_WARNINGS 1 //扫雷游戏 #include "game.h" void game

  • C语言实现简易扫雷游戏详解

    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 一.想要达到的游戏功能: 大家如果想编写一个游戏,应具备以下的步骤: 1:了解游戏的规则 2:   知道游戏应该实现哪些功能 3:根据这些功能构建出游戏的基本框架 4:如何将整个游戏拆分成一个个模块,进行模块化编程 我们拿到一个任务,尤其是编写像扫雷这对于初学者有难度的问题时,应该做到先理清思路,再进行代码编写,现在我们来讲一下扫雷游戏预期实现的功能. 1:要有一个游戏菜单能让玩家选择进入游戏还是退出游戏. 2:程序

  • 老程序员教你一天时间完成C语言扫雷游戏

    目录 扫雷游戏 1.菜单 2.初始化棋盘 3.打印棋盘 4.布置雷 5.排查雷 6.整体效果展示 7.代码分享 7.1 test.c 7.2 game.c 7.3 game.h 总结 扫雷游戏 今天我们就要设计一款这样的游戏,首先需要设置棋盘,然后对棋盘进行随机布雷,最后在排雷. 1.菜单 首先制作一个简易菜单 int main() { int input; srand((unsigned int)time(NULL)); do { menu(); printf("请选择:\n");

  • 老程序员教你一天时间完成Java迷宫小游戏

    目录 效果图 实现思路 迷宫算法(网上参考的) 相关图示说明 代码实现 创建窗口 创建菜单及菜单选项 绘制迷宫的每个单元 计算并打通迷宫 绘制起点终点 加入键盘移动监听 收尾 总结 效果图 实现思路 1.创建运行窗口. 2.创建菜单. 3.绘制迷宫的每个单元. 4.通过算法计算迷宫路径,并打通路径,形成迷宫. 5.绘制起点终点. 6.添加键盘事件控制起点方块移动. 7.收尾. 迷宫算法(网上参考的) 1.将起点作为当前迷宫单元并标记为已访问 2.当还存在未标记的迷宫单元,进行循环 1).如果当前

  • 老程序员教你一天时间完成C++俄罗斯方块游戏

    目录 一.主要文件 二.界面设计 三.方块设计 四.设计思路 设计思路如下: 五.总结 首先,看下效果图: 图1 游戏运行过程 下面详细讲解下制作过程. 一.主要文件 文件包含三个:tetris.cpp.tetris.h.main.cpp,各个文件的用途如下: tetris.cpp 文件:函数实现: tetris.h : 类和函数声明: main.cpp : 主函数: 二.界面设计 bool vis[100][100]; // 用于标记坐标 int Co[100][100]; // 坐标的颜色

  • 如何成为一个优秀的jsp程序员

    在网上看到很多问题是关于如何学习jsp的,正好网上看到一篇关于学习jsp的文章,就摘了一部分翻译过来,希望能对大家学习jsp有点指 导. 一个普通的错误是把JSP当作简化的 Java.它不是,(事实上, JSP 是简化的 servlets .)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP .JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术.如果你已经知道 Java , HTML 和 Javascript,这意味着 JSP 将确实是简单的. 需要成为一个成功的 JSP 程序

  • 成为一个成功Jsp程序员的九步

    如何成为一个成功的Jsp程序员?一个普通的错误是把JSP当作简化的 Java.它不是,(事实上, JSP 是简化的 servlets .)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP .JSP 是一个衔接技术,并且成功地连接你需要理解的另外的技术.如果你已经知道 Java,HTML 和 Javascript,这意味着 JSP 将确实是简单的. 需要成为一个成功的 JSP 程序员可以参考这个时间表.请注意下列: *忽略你已经熟悉的步骤. *训练的时间只是代表学习好足够的基础时间,这样才

  • 为什么Java是程序员受欢迎的语言这几个原因你该清楚

    Java一直稳居程序员很受欢迎的编程语言的榜首,是企业中使用最广泛的编程语言.同样也是广大有志青年加入程序员行列中,想要学习的一门语言,java语言为什么有如此大的魔力呢? 任何一个从事开发的人员,你在问他:想学习编程,学习哪种语言会比较好呢?他的回答肯定是"java语言".那么为什么会产生这样的结果呢?总结大概有这么几方面的原因: 1. Java有着25年的独立开发史 Java是源自一个"Oak"语言,从1995年正式改名为Java,一直运行到今天,已经有25年的

  • 每个程序员都应该学习使用Python或Ruby

    如果你是个学生,你应该会C,C++和Java.还会一些VB,或C#/.NET.多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaScript知识.总体上说,我们很难发现会有学生显露出掌握超出这几种语言范围外的语言的才能.这真让人遗憾,因为还有很多种编程语言,它们能让你成为一个更好的程序员. 在这篇文章里,我将会告诉你,为什么你一定要学习Python或Ruby语言. 跟C/C++/Java相比 - Python/Ruby能让你用少的多的多的代码写出相同的程序.有人计算过,Pyt

  • 8种类型极品程序员,不知你属于哪一种?

    在日常工作里肯定会发现很多有趣的事情,极品程序员所做的事就是很有意思的.事实上,现在所讨论的极品程序员主要是从他们的判断力.行为举止.个人态度和匪夷所思的工作方式上来判断的,有的时候这些程序员一味的只是追求文档上的内容,而不擅于用分析方式来解决问题. 几乎每一个软件开发者多多少少都会出现头脑短路的现象,也就是说,下面所列举的各种极品程序员类型,总有一款是属于你的. 1. 钟爱型程序员:万般宠爱集于一种技术 这种类型的程序员所遇到的致命错误就是:只钟爱一种技术,对别的技术不来电.其实这不是什么值得

  • 最有价值的50道java面试题 适用于准入职Java程序员

    下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最新版本,去掉了EJB 2.x等无用内容,补充了数据结构和算法相关的题目.经典面试编程题.大型网站技术架构.操作系统.数据库.软件测试.设计模式.UML等内容,同时还对很多知识点进行了深入的剖析,例如hashCode方法的设计.垃圾收集的堆和代.Java新的并发编程.NIO.2等,相信对准备入职的Ja

  • 一个合格的程序员应该读过哪些书(偏java)

    很多程序员响应,他们在推荐时也写下自己的评语. 以前就有国内网友介绍这个程序员书单,不过都是推荐数 Top 10的书. 其实除了前10本之外,推荐数前30左右的书籍都算经典,笔者整理编译这个问答贴,同时摘译部分推荐人的评语. 下面就按照各本书的推荐数排列. 1.<代码大全> 史蒂夫·迈克康奈尔 推荐数:1684 "优秀的编程实践的百科全书,<代码大全>注重个人技术,其中所有东西加起来, 就是我们本能所说的"编写整洁的代码".这本书有50页在谈论代码布局

随机推荐