请选择 进入手机版 | 继续访问电脑版

C【练习】(扫雷小游戏)

[复制链接]
林雨宣 发表于 2020-12-31 18:58:05 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本页详细解读 C语言控制台小步伐 扫雷小游戏。实现使用控制台小步伐,完成扫雷小步伐(1.0)!!!

话不多说直接贴上效果图接下来开始叙述怎么做出结果
这里我在实现的过程中按照先写骨架,再写功能,最后补全(不敷专业的叙述)
Main()

负担小步伐的焦点运行,使扫雷可以正常的运行 且能在每一盘游戏之后可以选择继续游戏大概退出。
  1. int main(){        srand((unsigned int)time(NULL));        while (1){                int choice = Meau();                if (choice){                        Game();                }                else{                        break;                }        }        system("pause");        return 0;}
复制代码
1.为什么这里要使用srand,后面会说
2.while 循环的使用包管我的游戏在结束时可以循环选择
3.int Choice 为我的功能做了一个选择开关这里也可以使用 switch 取代
Game()

Game()函数作为扫雷的主体,主要作用实现扫雷的主体实现,可以完成棋盘的初始化、用户的输入、输入坐标的判断、棋盘为用户的展示
  1. void Game(){        int Blank_Count = 0;  //纪录空缺格个数        char out_map[ROW+2][COL+2];    //给人看的舆图        char mine_map[ROW+2][COL+2];        //地雷的舆图        Init(out_map,mine_map);                                                        //初始化舆图                while (1){                system("cls");                Display_Map(out_map);     //展示舆图(地雷被隐藏)                int row, col;                printf("输入检测的坐标:");                scanf("%d %d", &row, &col);                if (rowROW || COLCOL){                        printf("坐标非法,重新输入:\n");                        continue;                }    //查抄坐标是否正当                //查验是否踩到地雷                if (mine_map[row][col] == '1'){                        printf("踩到地雷GG\n");                        break;          //直接结束Game()                }                //验证是否扫雷乐成                ++Blank_Count;                if (Blank_Count == ROW*COL - MINE_COUNT){                        printf("胜利!!!\n");                        break;                }                //更新舆图                Update_Out_Map(out_map,row,col,mine_map);        }        Display_Map(mine_map);}
复制代码
1.使用char 范例初始化 out_map[ROW+2][COL+2]、mine_map[ROW+2][COL+2]一个作为给用户展示的棋盘一个作为存储地雷信息的棋盘
2.while 的作用在游戏中实现 用户输入、棋盘检测、舆图打印 循环操作
3.if(rowROW || COLCOL) 判断用户输入坐标的正当 不正当则重新输入,包管用户输入的坐标在[1,9]上
4.界说有地雷的地方为‘1’,if (mine_map[row][col] == ‘1’),如果挂掉就 Display_Map 打印所有信息棋盘
5.当在世走到这一步证明之前都是正确操作没有踩雷所以 空缺格子数量 ++Blan_Count
6,将这里的所有信息更新进入舆图信息,
Init()

按照Game()提供的思路我们固然先初始化数组
分两种情况
out_map 为用户展示的舆图固然初始化全为空格
mine_map 地雷我在这里界说两种情况0/1 初始化无雷全为0
  1. int Init(char out_map[ROW+2][COL+2], char mine_map[ROW+2][COL+2]){        //out_map初始化全为 空格        for (int row = 0; row < ROW + 2; row++){                for (int col = 0; col < COL + 2; col++){                        out_map[row][col] = &#39; &#39;;                }        }         // 2.把mine_map初始化全是 &#39;0&#39;        for (int row = 0; row < ROW + 2; row++){                for (int col = 0; col < COL + 2; col++){                        mine_map[row][col] = &#39;0&#39;;                }        }        //3.随机种地雷        int mine_count = MINE_COUNT;        while (mine_count>0){                int row = rand() % ROW + 1;                int col = rand() % COL + 1;                if (mine_map[row][col] == &#39;1&#39;){                        continue;                }                else{                        mine_map[row][col] = &#39;1&#39;;                        --mine_count;                }        }        return 0;}  
复制代码
1.通过 #define MINE_COUNT界说地雷数作为限制条件
2.while(mine_count) 种雷的限制条件
3.接纳随机数种雷 rand%ROW+1;
%ROW的效果为0-8 但是为了适应我们的棋盘所以+1
4.注意在种雷时 的种种影响 比如 该位置不能有雷
Display_Map()


打印舆图
按照我们的需求打印整个map
我这里放 代码方便 以后使用
void Display_Map(char out_map[ROW+2][COL+2]){
//打印舆图 与对应坐标
printf(" ||");
//打印列坐标
for (int i = 1; i
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )