栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【初始C语言】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【初始C语言】

扫雷!相信大家都玩过,而且非常有趣同时!!必须带着脑子去玩,我们需要根据给出的信息判断下一步我们应该点开哪个空白的位置,同时给确定是雷的地方做上标记!

那么,今天呢 博主就带领大家来设计这样一个扫雷小游戏吧扫雷游戏涉及的知识大部分是C语言数组部分的知识点,对数组的学习很有帮助!

部分代码设计也清晰易懂,所以我就没有特别详细讲解,需要花费一定的时间去阅读,非常容易理解!

老规矩,看完后,麻烦一键三连啦!非常感谢小伙伴们的支持!你们的支持是我前进的最大动力!鸞鸞

正文开始: 目录展示:

一:设计菜单

二、游戏界面

初始化棋盘:

展示棋盘:

療布置雷的界面:

用户排雷:

判断雷存在的条件:

三:游戏结果演示

 四:源码提供

game.h

索game.c

寧test.c


二、游戏界面

✈️✈️设计完菜单后我们需要来设计这个游戏的进行界面啦,我们需要设计两个棋盘,一个棋盘是给用户看到的界面,另一个棋盘是我们用来设计随机雷的分布情况:

初始化棋盘:
void init_board(char arr[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++)
        {
            arr[i][j] = set;
        }
    }
}
展示棋盘:
void show_board(char arr[ROWS][COLS], int row, int col)
{
    int i = 0;
    int j = 0;
    printf("------------扫雷------------n");
    for (i = 0; i <= col; i++)
    {
        printf("%d ", i);
    }
    printf("n");

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

}
布置雷的界面:
void set_mine(char mine[ROWS][COLS], int row, int col)
{
    int count = EASY_COUNT;
    int x = 0;
    int y = 0;
    while (count)
    {
        x = rand() % row + 1;
        y = rand() % col + 1;
        if (mine[x][y] == '0')
        {
            mine[x][y] = '1';//布置雷
            count--;
        }
    }
}
用户排雷:
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 >= 1 && x <= row && y >= 1 && y <= col)
        {
            if (mine[x][y] == '1')
            {
                printf("很遗憾,被炸死了n");
                show_board(mine, ROW, COL);
                break;
            }
            else
            {
                int count = get_mine_count(mine, x, y);
                show[x][y] = count + '0';
                show_board(show, ROW, COL);
                win++;
            }
        }
        else
        {
            printf("坐标非法,重新输入n");
        }
    }
    if (win == row * col - EASY_COUNT)
    {
        printf("恭喜你,排雷成功n");
        show_board(mine, ROW, COL);
    }
}
判断雷存在的条件:

这个时候我们用户开始排雷了,但是用户知道哪个地方有雷没雷,那么怎么让我们的电脑也判断呢?我们知道我们设计的是某个位置周围八个位置有没有雷,那么我们直接判断法,直接返回这八个位置-8*‘0’的结果,直接看用户排雷第一个else部分的代码,进行我们的判断雷的位置:

int get_mine_count(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 + 1][y + 1] +
        mine[x][y + 1] +
        mine[x - 1][y + 1] - 8 * '0';
}
三:游戏结果演示

这里方便起见,我们直接演示一个被炸死的结果:黎黎

 ⛵⛵四:源码提供

那么,这里呢也是把源代码都给大家,希望对大家有所帮助,谢谢支持!

⛴️game.h
#include 
#include 
#include 

#define ROW 9
#define COL 9

#define ROWS ROW+2
#define COLS COL+2

#define EASY_COUNT 10


//
void init_board(char arr[ROWS][COLS], int rows, int cols, char set);

//ӡ
void show_board(char arr[ROWS][COLS], int row, int col);

//
void set_mine(char mine[ROWS][COLS], int row, int col);

//Ų
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
⛴️game.c
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"

void init_board(char arr[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++)
        {
            arr[i][j] = set;
        }
    }
}

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

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

}

//布置雷

void set_mine(char mine[ROWS][COLS], int row, int col)
{
    int count = EASY_COUNT;
    int x = 0;
    int y = 0;
    while (count)
    {
        x = rand() % row + 1;
        y = rand() % col + 1;
        if (mine[x][y] == '0')
        {
            mine[x][y] = '1';//布置雷
            count--;
        }
    }
}

int get_mine_count(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 + 1][y + 1] +
        mine[x][y + 1] +
        mine[x - 1][y + 1] - 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 >= 1 && x <= row && y >= 1 && y <= col)
        {
            if (mine[x][y] == '1')
            {
                printf("很遗憾,被炸死了n");
                show_board(mine, ROW, COL);
                break;
            }
            else
            {
                int count = get_mine_count(mine, x, y);
                show[x][y] = count + '0';
                show_board(show, ROW, COL);
                win++;
            }
        }
        else
        {
            printf("坐标非法,重新输入n");
        }
    }
    if (win == row * col - EASY_COUNT)
    {
        printf("恭喜你,排雷成功n");
        show_board(mine, ROW, COL);
    }
}
️test.c
#define _CRT_SECURE_NO_WARNINGS
//1. 标记
//2. 展开一片
#include "game.h"
void menu()
{
	printf("******************************n");
	printf("*********  1. play    ********n");
	printf("*********  0. exit    ********n");
	printf("******************************n");
}

void game()
{
	//扫雷游戏的实现
	//mine数组是用来存放布置好的雷的信息
	char mine[ROWS][COLS] = { 0 };//'0'
	//show数组是用来存放排查出的雷的信息
	char show[ROWS][COLS] = { 0 };//'*'

	//初始化棋盘
	init_board(mine, ROWS, COLS, '0');
	init_board(show, ROWS, COLS, '*');
	//打印棋盘
	//show_board(mine, ROW, COL);
	//布置雷
	set_mine(mine, ROW, COL);
	show_board(show, ROW, COL);
	//排查雷
	find_mine(mine, show, ROW, COL);
}

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

	return 0;
}

最后,也是对自己的激励,没有攻克不了的难关,贵在坚持,珍惜时间,继续前行!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/996987.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号