如何用C语言写出简易的扫雷程序

来源:互联网 发布:vm虚拟机安装mac 编辑:程序博客网 时间:2024/06/07 09:35

简易扫雷

重点内容:用C语言实现简易扫雷


要求:怎么也得有个图形界面吧,随机雷区。


1.头部分

#ifndef AA__AA#define AA__AA#define  _CRT_SECURE_NO_WARNINGS 1#define ROW 11#define COL 11#define DEFAULT 10#include  <stdio.h>#include <string.h>#include <stdlib.h>#include<time.h>#include <Windows.h>void menu();void init_board(char mine[ROW][COL], char show[ROW][COL]); void display_board(char show[ROW][COL]);void set_mine(char mine[ROW][COL]); int get_mine(char mine[ROW][COL], int x, int y);void mine_sweep(char mine[ROW][COL],char show[ROW][COL]); void game();#endif

2.函数部分

void menu(){    printf("****************扫雷**************\n");    printf("         1:玩游戏  0: 退出        \n");    printf("**********************************\n");}void init_board(char mine[ROW][COL], char show[ROW][COL]){    int i = 0;    int j = 0;    for (i = 1; i <ROW - 1; i++)    {        for (j = 1; j < COL - 1; j++)        {            mine[i][j] = '0';        }    }    for (i = 1; i <ROW - 1; i++)    {        for (j = 1; j < COL - 1; j++)        {            show[i][j] = '*';        }    }}void display_board(char show[ROW][COL]){    int i, j;    printf("  ");    for (i = 1; i < COL - 1; i++)        printf("%d ", i);    printf("\n");    for (i = 1; i < ROW - 1; i++)    {        printf("%d ", i);        for (j = 1; j < COL - 1; j++)        {            printf("%c ", show[i][j]);        }        printf("\n");    }}void set_mine(char mine[ROW][COL]){    int x = 0;    int y = 0;    int count = DEFAULT;    srand((unsigned)time(NULL));    while (count)    {        x = rand() % (ROW - 2) + 1;        y = rand() % (COL - 2) + 1;        if (mine[x][y] == '0')        {            mine[x][y] = '1';            count--;        }    }}int get_mine(char mine[ROW][COL], int x, int y){    int count = 0;    if (mine[x - 1][y - 1] == '1')        count++;    if (mine[x - 1][y] == '1')        count++;    if (mine[x - 1][y + 1] == '1')        count++;    if (mine[x][y - 1] == '1')        count++;    if (mine[x][y + 1] == '1')        count++;    if (mine[x + 1][y - 1] == '1')        count++;    if (mine[x + 1][y] == '1')        count++;    if (mine[x + 1][y + 1] == '1')        count++;    return count;}void mine_sweep(char mine[ROW][COL], char show[ROW][COL]){    int x = 0;    int y = 0;    int count = 0;    while (count != (ROW - 2)*(COL - 2) - DEFAULT)    {        printf("请输入坐标:");        scanf("%d%d", &x, &y);        if (x <= 9 && y <=9)        {            if (mine[x][y] == '1')            {                printf("踩到雷了:\n");                printf("地雷在棋盘的位置:\n");                display_board(mine);                return;            }            else             {                int ret = 0;        ret = get_mine(mine, x, y);                 if (ret == 0)                {                    show[x - 1][y - 1] = ' ';                    show[x-1 ][y] = ' ';                    show[x-1][y + 1] = ' ';                    show[x][y]=' ';                    show[x][y -1] = ' ';                    show[x][y +1] = ' ';                    show[x +1][y - 1] = ' ';                    show[x+1][y] = ' ';                    show[x +1][y+1] = ' ';                    x++; y++;                }                else                    show[x][y] = ret + '0';                display_board(show);            }            printf("扫雷成功\n");        }        else            printf("输入错误,请重新输入:\n");        count++;        continue;    }}void game(){    char mine[ROW][COL];    char show[ROW][COL];    init_board(mine, show);    display_board(show);    set_mine(mine);    display_board(mine);    mine_sweep(mine, show);}

3.执行部分

int main(){    int input = 1;    menu();    while (input)    {        printf("开始游戏:\n");        printf("请选择:");        scanf("%d", &input);        switch (input)        {        case 0:            printf("退出程序\n");            break;        case 1:            game();            break;        default:            printf("错误指令请重新选择:\n");            break;        }    }    return 0;}

运行附图

附上库函数使用注意事项

原创粉丝点击