首页 > 其他分享 >【C语言版】扫雷游戏

【C语言版】扫雷游戏

时间:2023-09-23 11:11:20浏览次数:42  
标签:COLS ROWS 游戏 int mine C语言 扫雷 printf ROW


 思路

  1. 设置两个数组
  2. 初始化两个数组
  3. 打印数组
  4. 设置雷
  5. 排查雷

game.h

#pragma once
#define ROW 9 //定义行为9
#define COL 9 //定义列为9
#define ROWS ROW+2 //排查雷时防止溢出
#define COLS COL+2
#define EASY_COUNT 10 //初步设有10个雷
void InitBoard(char board[ROWS][COLS], int rows,int cols, char set);//初始化
void Display_Board(char board[ROWS][COLS], int row, int col);//打印数组
void Set_mine(char mine[ROWS][COLS],  int row, int col);//设置雷
#include<stdlib.h>
#include<time.h>
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//排查雷
#include<stdio.h>

【C语言版】扫雷游戏_C语言


game.c

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			board[i][j] = set;
		}
	}

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

		int j = 0;
		for (j = 1; j <= col; j++)
		{

			printf("%c ", board[i][j]);

		}
		printf("\n");
	}
	printf("-------扫雷游戏-------\n");

}
void Set_mine(char mine[ROWS][COLS],  int row, int col)
{
	int x = 0;
	int y = 0;
	int count = 0;
	while (count <= EASY_COUNT)
	{
		x = rand() % row + 1;
		y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
		}
		count++;

	}
}
int  Get_minecount(char mine[ROWS][COLS],int x, int y)
{
	return
		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] +
		mine[x - 1][y] - 8 * '0';

}
void Find_mine(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- EASY_COUNT)
	{
		printf("请输入你找到坐标:>");
		scanf("%d%d", &x, &y);
		if (x <= row && x >= 1 && y <= col && y >= 1)
		{
			if (mine[x][y] == '1')
			{
				printf("********你被炸死了*******\n");
				printf("结果如下:>\n");
				Display_Board(mine, ROW, COL);
				break;

			}
			else
			{
				int count=Get_minecount(mine,x, y);
				show[x][y] = count + '0';
				win++;
				Display_Board(show, ROW, COL);

			}
		}
		else
		{
			printf("输入坐标非法,请重新输入:>\n");
			Display_Board(show, ROW, COL);

		}
	}
	if (win == row * col - EASY_COUNT)
	{
		printf("恭喜你找到了!!!!\n");
	}
}

【C语言版】扫雷游戏_#define_02


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()
{
	//创建数组
	int mine[ROWS][COLS] = { 0 };
	int show[ROWS][COLS] = { 0 };
	//初始化
	InitBoard(mine, ROWS, COLS, '0');
	InitBoard(show, ROWS, COLS, '*');
	//打印数组
	Display_Board(show, ROW, COL);
	//Display_Board(mine, ROW, COL);
	//布置雷
	Set_mine(mine,  ROW, COL);
	//排查雷
	Find_mine(mine, show, ROW, COL);


}
int main()
{
	int input = 0;
	do
	{
		srand((unsigned int)time(NULL));
		menu();
		printf("请输入:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
		{
			game();
			break;
		}
		case 0:
		{
			printf("退出游戏");
			break;
		}
		default:
			printf("请重新输入:>\n");
		}
	} while (input);
	return 0;
}

【C语言版】扫雷游戏_#include_03



【C语言版】扫雷游戏

标签:COLS,ROWS,游戏,int,mine,C语言,扫雷,printf,ROW
From: https://www.cnblogs.com/ips9999/p/17724021.html

相关文章

  • 【C语言版】扫雷游戏
     思路设置两个数组初始化两个数组打印数组设置雷排查雷game.h#pragmaonce#defineROW9//定义行为9#defineCOL9//定义列为9#defineROWSROW+2//排查雷时防止溢出#defineCOLSCOL+2#defineEASY_COUNT10//初步设有10个雷voidInitBoard(charboard[ROWS][COLS],in......
  • C语言 堆区空间,malloc
    @TOC前言一、堆区空间的理解:前面测试,普通的数组变量默认最大不能申请1M的空间,甚至远少于1M的空间,毕竟程序中的其他变量也需要使用空间。总共就1M,要省着用。想要使用更大的,没有限制的空间,C语言给我们提供了方式:如下:malloc//申请空间,理论上物理内存有多大,就能申请多大,当然并不能,......
  • 理解C语言中的void类型的指针
    1.void类型指针简介void类型的指针又被称为泛型指针,通用型指针void类型的指针:指针指向的内存地址中的数据的类型未知其他所有类型的指针都可以转换为void类型的指针,而且不需要强制类型转换(编译器会隐式/自动类型转换)void类型的指针也可以转换为任意类型的指针,需要强制类型转......
  • C语言中的函数指针以及模拟面向对象
    函数指针的概念顾名思义,函数指针就是指向函数的指针,该指针的值是函数的入口。下面的代码时函数指针的一个基本实例。#include<stdio.h>intmax_(inta,intb);intmax1_(int(*func_p)(int,int),inta,intb);intmain(){inta=10,b=20;//定义一个函......
  • 七天学会C语言-第七天(结构体)
    1.定义结构体例1:把一个学生的信息(包括学号、姓名、性别、住址等4项信息)放在一个结构体变量中,然后输出这个学生的信息。#include<stdio.h>structStudent{intstudent_id;charname[30];chargender;charaddress[60];};intmain(){struc......
  • C语言学习-- ~ 按二进制取位 前置后置++ 关系操作符 逻辑操作符
    #include<stdio.h>//~按二进制取位intmain(){inta=10;intb=~a;/*~按二进制取位如101--~=010*/printf("%d\n%d\n",a,b);/*运行a=10b=-11在二进制里的最高位表示符号位,0为正1为负(3=000…………011)源码......
  • C语言学习-- ~ 按二进制取位 前置后置++ 关系操作符 逻辑操作符
    #include<stdio.h>//~按二进制取位intmain(){inta=10;intb=~a;/*~按二进制取位如101--~=010*/printf("%d\n%d\n",a,b);/*运行a=10b=-11在二进制里的最高位表示符号位,0为正1为负(3=000…………011)源码......
  • 【三子棋】——玩家VS电脑(C语言实现)
    (文章目录)前言三子棋是黑白棋的一种。三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉、一条龙、井字棋等。将正方形对角线连起来,相对两边依次摆上三个双方棋子,只要将自己的三个棋子走成一条线,对方就算输了。但是,有很多时候会出现和棋的情况。:pig:好了话不多说,现在我就带大家......
  • c语言双指针法--原地删除数组中的元素
     27.移除元素-力扣(LeetCode) intremoveElement(int*nums,intnumsSize,intval){intleft=0;intright=0;while(right<numsSize){if(nums[right]!=val){nums[left]=nums[right];left++;}......
  • c语言-关键字static
    局部变量:运行周期=函数的运行周期全局变量:运行周期=整个程序的运行周期(程序可以是多个.c文件组成)static可以修饰:1、局部变量(函数内定义的)2、全局变量(函数外定义的) 3、函数1.修饰局部变量->静态局部变量:开辟存储空间。在编译的过程中,会在数据区为该变量开辟空间,并对其进行......