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

C基础扫个雷儿~

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

C基础扫个雷儿~

 1.功能实现思路,我们需要给用户展示扫雷界面,需要埋雷,需要统计用户选择展开位置周围雷的总数目,并在显示界面展示给用户看,需要判断输赢,可重复/退出游戏

2.我们可以通过设置成两种扫雷界面,不给用户看到具体埋雷的那个界面

3.可以通过使用rand进行随机埋雷,需引用头文件stdlib.h,rand的使用前需用srand((unsigned int)time(NULL))

4.time时间戳函数,time(NULL)用来获取系统现在时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数(使用需引用头文件time.h),srand实现随机数需要先给他一个随机值,此处srand函数(需要引用头文件stdlib.h),(unsigned int)是将time转换为无符号整形。

5.真正产生随机数是不可能的,只能产生伪随机数。

6.srand函数的使用是为了rand()使用做准备。rand()用来实现随机埋雷。

#define _CRT_SECURE_NO_WARNINGS
#include
#define ROW 9
#define ROWS ROW+2//统计雷数用
#define RANK 9
#define RANKS RANK+2//统计雷数用
#define mine 9
#include
#include

void meau();
void initialize(char chess[ROWS][RANKS],char set);
void print(char chess[ROWS][RANKS]);
void Mine(char mine1[ROWS][RANKS]);
void begscan(char show[ROWS][RANKS], char chess[ROWS][RANKS]);

//功能实现
#include "mine.h"
void meau()
{
    printf("----------------------n");
    printf("------1.开始游戏------n");
    printf("------0.退出游戏------n");
    printf("----------------------n");
}

 
void initialize(char chess[ROWS][RANKS],char set)//初始化11
{
    int i;
    int j;
    for (i = 0; i < ROWS; i++)
    {
        for (j = 0; j < RANKS; j++)
        {
            chess[i][j]=set;
        }
    }
}
void print(char chee[ROWS][RANKS])//打印雷盘
{
    int i;
    int j;

    printf("--------扫雷--------n");

    for (i = 0; i <=ROW; i++)
    {
        printf("%d ", i);
    }
    printf("n");            
    for (i = 1; i <= ROW; i++)
    {
        printf("%d ", i);
        for (j = 1; j <=RANK; j++)
        {
            printf("%c ", chee[i][j]);
        }
        printf("n");
    }
    printf("--------扫雷--------n");
}

void Mine(char mine1[ROWS][RANKS])//随机埋雷
{
    int x;
    int y;
    int count = mine;

    while (count)
    {
        x = rand() % ROW+1;
        y = rand() % RANK+1;
        if (mine1[x][y] == '0')
        {
            mine1[x][y] = '1';//雷
            count--;
        }
        
    }
}

int minenumber(char chess[ROWS][RANKS], int x, int y)
{

    return chess[x - 1][y] +
        chess[x - 1][y - 1] +
        chess[x][y - 1] +
        chess[x + 1][y - 1] +
        chess[x + 1][y] +
        chess[x + 1][y + 1] +
        chess[x][y + 1] +
        chess[x - 1][y + 1]-8*'0';


}



void begscan(char show [ROWS][RANKS],char chess[ROWS][RANKS])
{
    int i;
    int j;
    int num=0;
    while (num 0 && j > 0)//考虑用户习惯没有0 0输入的概念
        {
            if (chess[i][j] == '1')
            {
                printf("你输了n");
                print(chess);
                break;

            }
            else
            {
                int count=minenumber(chess, i, j);//统计周围雷数
                show[i][j] = count + '0';//  转型;
                print(show);
                num++;
            }
        }
        else
        {
            printf("坐标输入错误请重新输入");
        }
    }
    if (num == ROW * RANK - mine)
    {
        printf("你赢了n");
        print(chess);
    }
}

//测试
#include"mine.h"
void game()
{
    char chess[ROWS][RANKS] = { 0 };
    char show[ROWS][RANKS] = { 0 };
    
    initialize(chess,'0');//初始化存放布置好的雷的信息
    initialize(show,'*');//初始化存放排查出的雷的信息
    Mine(chess);//埋雷
    print(show);//打印棋盘
    begscan(show,chess);//找雷
    
}


int main()
{
    int input = 0;
    srand((unsigned int)time(NULL));
    do
    {
        meau();
        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/832797.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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