C语言实现可选择棋盘大小的扫雷小游戏

此扫雷游戏程序可以在开始界面定义雷的个数


可以定义棋盘大小(只能正方形)


可以扫雷展开一片区域


可以标记雷来获得胜利


(本博客作为自己在某段时间自己的学习感想作为记录方式发出,所以内容比较硬核基本上没有讲解,如果能帮助读者当然是最好的,如果有哪里看不懂请在评论区提问或者私信我,如果提问多我会重新发表详细讲解


下面是程序

main.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
int EASY_COUNT = 0;
int	ROW=0;
int	COL=0;
int	ROWs=0;
int	COLs=0;
int main()
{	
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
		system("cls");
		menu();
		printf("请输入>");
		scanf("%d", &input);
		system("cls");
		switch (input)
		{
		case 1:
			system("cls");
			printf("请输入雷的个数>\n");
			scanf("%d", &EASY_COUNT);
			printf("请输入你想玩多大的正方形>\n");
			scanf("%d", &ROW);
			COL = ROW;
			ROWs = ROW + 2;
			COLs = ROW + 2;
			game();
			break;
		case 0:
			printf("欢迎下次来玩\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			Sleep(1000);
			break;
		}
	} while (input);
	system("pause");
	return 0;
}


 game.c

#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
int win = 0;
char** mine = '0';
char** show='0';
void game()
{
	mine = (char**)malloc(ROWs * sizeof(char*));
	for (int i = 0; i < ROWs; i++)
		mine[i] = (char*)malloc(ROWs * sizeof(char));
	show = (char**)malloc(ROWs * sizeof(char*));
	for (int i = 0; i < ROWs; i++)
		show[i] = (char*)malloc(ROWs * sizeof(char));
	initboardshow(ROWs, COLs,'*');
	initboardmine(ROWs, COLs,'0');
	setmine(ROW, COL);
	displayshow(ROW,COL);
	findmine(ROW, COL);
}
void menu()
{
	printf("*******************************\n");
	printf("*********   扫雷    ***********\n");
	printf("******1.play    0.exit   ******\n");
	printf("*********   扫雷    ***********\n");
	printf("*******************************\n");
}
void initboardshow( int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			show[i][j] = set;
		}
	}
}
void initboardmine( int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			mine[i][j] = set;
		}
	}
}
void setmine(int row, int col)
{
	int count = EASY_COUNT;
	while (count)
	{
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}
void displayshow(int row, int col)
{
	int i = 0;
	int j = 0;
	printf("---------扫雷----------\n");
	for (j = 0; j <= col; j++)
	{
		printf("%2d ", j);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%2d ", i);
		for (j = 1; j <= col; j++)
		{
			printf(" %c ", show[i][j]);
		}
		printf("\n");
	}
	printf("---------扫雷----------\n");
}
void displaymine(int row, int col)
{
	int i = 0;
	int j = 0;
	printf("---------扫雷----------\n");
	for (j = 0; j <= col; j++)
	{
		printf("%2d ", j);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		printf("%2d ", i);
		for (j = 1; j <= col; j++)
		{
			printf(" %c ", mine[i][j]);
		}
		printf("\n");
	}
	printf("---------扫雷----------\n");
}
void findmine(int row, int col)
{
	int x = 0,y=0,X=0,Y=0,WIN = 0,input=0;
	while (win < (row * col - EASY_COUNT) && WIN != EASY_COUNT)
	{
		system("cls");
		displayshow( ROW, COL);
		//displaymine(ROW, COL);
		printf("1:排查     2:标记>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		printf("请输入要排查的坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if (show[x][y] != '*')
			{
				printf("该坐标被排查过了\n");
				Sleep(1000);
				continue;
			}
			if (mine[x][y] == '1')
			{
				printf("很遗憾,你被炸死了\n");
				Sleep(1000);
				displaymine(ROW, COL);
				Sleep(3000);
				goto final;
			}
			else
			{
				find(x, y);
				system("cls");
				displayshow(ROW, COL);
			}
		}
		else
		{
			printf("坐标非法,重新输入\n");
			Sleep(1000);
		}
			break;
		case 2:
		printf("\n请输入要标记雷的坐标:>");
		scanf("%d %d", &X, &Y);
		if (X >= 1 && X <= row && Y >= 1 && Y <= col && (show[X][Y] == '*'))
		{
			show[X][Y] = '#';
			if (mine[X][Y] == '1')
				WIN++;
		}
		else
		{
			printf("坐标非法,重新输入\n");
			Sleep(1000);
		}
		break;
		default:
			printf("输入错误,请重新输入\n");
			Sleep(1000);
			break;
		}
	}
	if (win == (row * col - EASY_COUNT) || WIN== EASY_COUNT)
	{
		printf("恭喜你,排雷成功\n");
		displaymine(ROW, COL);
		Sleep(3000);
	}
	final:;
	}
int get_mine_count(int x, int y)
{
	if (x >= 1 && x <= ROW && y >= 1 && y <= COL)
	{
	  return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] +
		mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');
	}
}
void find(int x, int y)
{
	if ( x >= 1 && x <= ROW && y >= 1 && y <= COL )
	{
		int n = get_mine_count(x, y);
		show[x][y] = n + '0';
		win++;
		if(show[x+1][y+1]=='*'&& mine[x+1][y+1] !='1')
			find(x + 1, y + 1);
		if (get_mine_count(x - 1, y - 1) == 0 && show[x - 1][y - 1] == '*' && mine[x - 1][y -1] != '1')
			find( x - 1, y - 1);		
		if (get_mine_count(x + 1, y) == 0 && show[x + 1][y ] == '*' && mine[x + 1][y ] != '1')
			find( x + 1, y );
		if (get_mine_count(x, y + 1) == 0 && show[x][y + 1] == '*' && mine[x][y + 1] != '1')
			find( x, y + 1);		
		if (get_mine_count(x - 1, y) == 0 && show[x - 1][y ] == '*' && mine[x -1][y ] != '1')
			find( x - 1, y);
		if (get_mine_count(x, y - 1) == 0 && show[x ][y -1] == '*' && mine[x][y-1] != '1')
			find(x , y - 1);
		if (get_mine_count(x + 1, y - 1) == 0 && show[x + 1][y - 1] == '*' && mine[x + 1][y - 1] != '1')
			find( x+1, y - 1);
		if (get_mine_count(x - 1, y + 1) == 0 && show[x - 1][y + 1] == '*' && mine[x - 1][y + 1] != '1')
			find( x - 1, y + 1);
	}
}


 game.h

#pragma once
void menu();
extern int EASY_COUNT;
extern int	ROW;
extern int	COL;
extern int	ROWs;
extern int	COLs;
extern char** mine;
extern char** show;
#include<stdio.h>
#include<windows.h>
#include<time.h>
void game();
void displaymine(int row, int col);
void setmine( int row, int col);
void initboardshow(int rows, int cols, char set);
void displayshow( int row, int col);
void findmine( int row, int col);
void initboardmine(int rows, int cols, char set);
int get_mine_count(int x, int y);
void find( int x, int y);

Nafladajty
关注 关注
  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
C语言自定义棋盘大小的三子棋小游戏(具体步骤及代码)
meorch的博客
09-24 851
可自定义棋盘大小C语言三子棋小游戏,包含具体步骤、思路及代码。
C语言——扫雷游戏实现(超详解)
2301_80004913的博客
11-08 7536
扫雷游戏想必大家应该都玩过吧,这个游戏的目标呢就是在一个 9x9 的棋盘上找出所有没有地雷的格子,而不踩到地雷。当然这个9×9只是一个初级玩法,棋盘大小和雷的数量是可以随便设置的,有那种电脑满屏的模式,但是我没去尝试过,一般玩的都是初级9×9的模式,而本篇文章也主要说的是9×9扫雷游戏的实现扫雷游戏网页版 - Minesweeper。
新手c语言实现可一键更改棋盘大小的三子棋程序
nnnggglo的博客
10-20 243
c语言实现一键更改棋盘大小的三子棋程序
扫雷游戏(可改变大小和雷的个数)欠缺版
weixin_74284832的博客
03-05 121
扫雷游戏(可改变大小和雷的个数)欠缺版
【第一次写博客】可修改棋盘大小的三子棋游戏
qq_65163863的博客
11-23 494
可修改棋盘大小的三子棋游戏
扫雷游戏【C语言实现
d123458rh的博客
01-21 331
目录 前言: 一:扫雷游戏规则介绍 二:进行环境配置 三:编写思路 四:实现各种功能并处理逻辑关系 4.1主函数部分 4.1-1打印菜单 4.1-2选择是否继续游戏 4.2游戏函数部分 4.2-1定义数组部分 4.2-2初始化棋盘函数 4.2-3打印棋盘函数 4.2-4布置雷函数 4.2-5排查雷函数 五:各文件中所有代码 5.1 test.c文件中代码
C语言经典小游戏扫雷(超详解释+源码)
qq_73121173的博客
08-08 2135
关于C语言扫雷的超详解及源码!
C语言简单实现扫雷游戏(完整代码)
Sun_F_Z的博客
01-20 1026
扫雷游戏完整代码
C语言实现扫雷小游戏
qq_52592775的博客
01-23 4121
这不进来康康,那可真是可惜liao
c语言实现扫雷
qq_49123751的博客
01-13 210
可修改行列,雷的个数,可标记雷,可修改允许的最大标记数
可以自定义棋盘长度和宽度,以及几子相同获胜的多子棋
weixin_41375649的博客
05-21 511
先说明一下,定义几个宏。可以自定义棋盘长度和宽度,以及几子相同获胜。 #define ROW 10//棋盘长度 #define COL 10//棋盘宽度 #define MODEL 5//几个子相同获胜 首先,创建一个数组board,用initboard()初始数组 void initboard(char Board[ROW][COL], int row, int col)//初始数组 ...
扫雷
冷月
04-27 533
game.h #ifndef __GAME_H__ #define __GAME_H__ #include #include #include #include #define ROWS 11 #define COLS 11 #define ROW (ROWS-2) #define COL (COLS-2) #define MAX 10 //void game();//设计
11.可以连片展开的扫雷小游戏(可以同过宏定义改变扫雷棋盘大小和雷的个数)
qq_43808700的博客
07-29 469
这个扫雷游戏最大的两个成功之处是 一可以宏定义更改ROW和COL以及EASY_COUNT的值,ROW和COL是扫雷棋盘的行和列大小,而EASY_COUNT修改的是雷的总个数 二可以实现一整片区域都没有雷的时候成片展开如下图: 输入2 4坐标以(2 ,4)坐标处及周围没有雷便连片展开 InitBoard //初始化扫雷棋盘全部初始化为字符’0’ SetMine //随机设置雷(用了...
C语言制作扫雷小游戏(简易版)
m0_72453879的博客
01-07 619
C语言制作扫雷小游戏(简易版)
【优化】C语言实现三子棋(二)
qq_73156831的博客
11-12 1078
【优化】三子棋——任意棋盘大小、胜利条件
C语言小游戏】“扫雷”教学
qq_67405610的博客
08-14 937
大家好,今天给大家带来C语言小游戏扫雷教学,希望大家能喜欢。
使用C语言实现自定义难度游戏——扫雷
weixin_42438990的博客
05-24 1625
game.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include<Windows.h> #define H 9 #define L 9 #define H2 H+...
力扣 16.最接近的三数之和
qq_51352130的博客
09-16 398
设 s=nums[i]+nums[j]+nums[k],为了判断 s 是不是与 target 最近的数,我们还需要用一个变量 minDiff 维护 ∣s−target∣ 的最小值。分类讨论:如果 s=target,那么答案就是 s,直接返回 s。如果 s>target,那么如果 s−target<minDiff,说明找到了一个与 target 更近的数,更新 minDiff 为 s−target,更新答案为 s。然后和三数之和一样,把 k 减一。
【百日算法计划】:每日一题,见证成长(016)
最新发布
码上一元
09-18 324
百日算法计划:环形链表
C语言详解:简易扫雷小游戏实现与关键代码
本文档详细介绍了如何使用C语言实现一款简易版的扫雷小游戏扫雷游戏的核心功能包括雷阵初始化、随机布雷以及计算雷的数量。首先,游戏的主体部分是通过二维字符数组`mine`表示雷阵,而`show`数组用于显示雷的位置...
写文章

热门文章

  • c语言strtok用法详细解释 12151
  • C语言字符串函数strstr的详细解释 3343
  • C语言字符串函数strcat的详细解释 1877
  • C语言字符串函数strerror的详细解释 1038
  • C语言前缀法解释以及部分应用 998

最新评论

  • c语言strtok用法详细解释

    Nafladajty: 一开始找没找到0但是找到了分隔符

  • c语言strtok用法详细解释

    一个C语言学习者: 我也想问,是不是找到\0了自动返回本次开始寻找时的首地址,如果它一开始找.没找到,为啥会返回h的首地址,哎,头好大

  • c语言strtok用法详细解释

    不爱吃鱼的虎: 看了一圈讲strtok的,每一个讲出来

  • c语言strtok用法详细解释

    不爱吃鱼的虎: 我就想问最后那个test怎么走出来的

  • C语言实现可选择棋盘大小的扫雷小游戏

    初阶牛: 游戏不错 学到了

最新文章

  • C语言前缀法解释以及部分应用
  • C语言字符串函数strerror的详细解释
  • C语言字符串函数strcat的详细解释
2023年4篇
2022年3篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家玻璃钢雕塑雕刻制作过程宜良玻璃钢仿真雕塑赛奥玻璃钢金属不锈钢雕塑巍山玻璃钢雕塑厂江苏人物玻璃钢雕塑价位都匀玻璃钢雕塑厂哪家好玻璃钢小羊动物雕塑定制广东玻璃钢透光雕塑公司江苏常用商场美陈售价景观玻璃钢花盆制作玻璃钢雕塑卡通批发代理山东商场美陈批发价大理市玻璃钢雕塑设计哪里有卖阜阳定制玻璃钢雕塑浙江特色商场美陈批发价抽象玻璃钢彩绘雕塑绥化玻璃钢美人鱼雕塑河北节庆商场美陈哪里有仿生玻璃钢蚂蚁雕塑福州玻璃钢雕塑订做宁德玻璃钢果蔬雕塑兴宁玻璃钢胸像雕塑广东高质量玻璃钢雕塑供应商佛山三水玻璃钢人像雕塑南京江宁美陈商场长春小区玻璃钢雕塑定做上海玻璃钢花盆组合玻璃钢剪纸雕塑怎样制作过程西藏玻璃钢动物雕塑邯郸仿真玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化