IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 2021-09-18扫雷小游戏 -> 正文阅读

[C++知识库]2021-09-18扫雷小游戏

说明:

1、扫雷小游戏,可以让大家更好的掌握对C语言的学习

2、让我们更加牢记使用变量(int 、char)和二维数组,函数声明和使用,加深影响

3、掌握C语言的分支结构(if - else 和switch语句)和循环结构(while 和for()的使用)

代码实现:

头文件:game.h

#ifndef _WINMINE_H
#define _WINMINE_H

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9  //定义界面长宽
#define COL 9 //...............
#define ROWS ROW+2
#define COLS COL+2
#define EASYCOUNT 10  //定义雷的个数, 即游戏难度,也可以运用再测试,、
 //初始化扫雷棋盘
void InitBoard(char board[ROWS][COLS],int rows, int cols,char set);
void DispalyBoard(char board[ROWS][COLS],int row, int col);
void SetMine(char mine[ROWS][COLS],int row,int col);
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int ros,int col);

#endif

主代码:game.c

#include <stdio.h>
#include "../include/winmine.h"

#define _CRT_SECURE_NO_WARNINGS 1
//数组初始化,设计展示界面
void InitBoard(char bord[ROWS][COLS],int rows,int cols,char set)
{
	int i = 0;
	int j = 0;
	for(i = 0;i < rows;i++)
	{
		for(j= 0;j < cols;j++)
		{
			bord[i][j] = set;// 可以更改为各种字符
		}
	}
}
//打印数组函数
void DispalyBoard(char board[ROWS][COLS],int row,int col)
{
	int i = 0;
	int j = 0;
	for(i = 0;i <= row;i++)
	{
		printf("%-2d",i);
	}
	printf("\n");
	for(i = 1;i <= row;i++)
	{
		printf("%d",i);
		for(j = 1;j <= col;j++)
		{
			printf("%2c",board[i][j]);
		}
		printf("\n");
	}
}
//布置雷的函数
void SetMine(char mine[ROWS][COLS],int row,int col)
{
	int count = EASYCOUNT; //难度
	while(count)
	{
		int x = rand() % row + 1;
		int y = rand() %col + 1;
		if(mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}
//返回值:在玩家输入坐标是,给坐标有没有雷,如果没有返回周围一圈的雷数

int GetmineCount(char mine[ROWS][COLS],int x,int y)
{
	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][y + 1] \
			+ mine[x + 1][y + 1] + mine[x - 1][y + 1] - 8 *'0');
}
void FindMine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	while(win - row*col-EASYCOUNT)
	{
		printf("请输入要排查的坐标:\n");
		scanf("%d%d",&x,&y);
		if(x >= 1 && x <= row && y >= 1 && y <= col)
		{
			if(mine[x][y] == '1')
			{
				printf("很不幸,你被打死了\n");
				DispalyBoard(mine,row,col);
				break;
			}
			else
			{
				int count = GetmineCount(mine,x,y);
				show[x][y] = count + '0';
				DispalyBoard(show, row,col);
				win++;
			}
			if(win == row*col - EASYCOUNT)
			{
				printf("恭喜你已经通关了!!!!\n");
				DispalyBoard(mine,row,col);
			}
		}
		else
		{
			printf("请你注意输入范围,请重新输入:\n");
		}
	}

}

主函数:main.c

#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS 1
#include "../include/winmine.h"
 //void menu()
menu()
{
	printf("*******************\n");
	printf("1--------------play\n");
	printf("*******************\n");
	printf("2---------------out\n");
	printf("-1-------------exit\n");
	printf("*******************\n");
	printf("请输入选项\n");
}
//void game()
game()
{
	//雷的信息存储
	//1.布置好雷的信息
	char mine[ROWS][COLS] = {0};
	//2.排查出雷的信息
	char show[ROWS][COLS] = {0};
	//初始化
//	InitBoard(mine,ROWS,COLS,'0');
//	InitBoard(show,ROWS,COLS,'*');
	InitBoard(mine,ROWS,COLS,'0');
	InitBoard(show,ROWS,COLS,'*');

	//打印棋盘:
	DispalyBoard(mine,ROWS,COLS);
	DispalyBoard(mine,ROWS,COLS);
	//布置雷的位置
	SetMine(mine,ROW,COL);
	//打印布置好的雷
	DispalyBoard(mine,ROW,COL);
	//DispalyBoard(mine,show,ROW,COL);
	FindMine(mine,show,ROW,COL);
}
//void test()
test()
{
	srand((unsigned)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请根据菜单选择:>\n");
		scanf("%d",&input);
		switch(input)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏:>\n");
			break;
		default:
			printf("输入错误,请重新输入:\n");
			break;
		}
	}while(input);
}
int main()
{
	test();
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:48:45  更:2021-09-19 07:48:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 12:33:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计