1. 程式人生 > >C語言編程 簡單展開掃雷遊戲

C語言編程 簡單展開掃雷遊戲

signed clu 輸入 退出 break unsigned show fine you

源代碼如下

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<time.h>
#define amu 10
#define Lshu 10
void menu()//菜單
{
    printf("*************************************\n");
    printf("****** 歡 迎 來 到 掃 雷 遊 戲 ******\n");
    printf("******  1.開始遊戲    0.退出  *******\n");
    printf("*************************************\n");
    printf("請輸入選擇\n");
}
void Show( char show[][amu + 2])//打印圖像
{
    int i, s;
    system("cls");
    printf("   0  1  2  3  4  5  6  7  8  9 \n");
    for (i = 0; i <= 9; i++)
    {
        printf("\n");
        printf("%d", i);
        for (s = 1; s <= 10; s++)
        {
                printf("%3c", show[i+1][s]);
        }
        printf("\n");
    }
}
int getnum(char mine[][amu+2], int i, int j)//所選坐標周圍的雷數量
{
    return mine[i - 1][j - 1] + mine[i - 1][j] +         mine[i - 1][j + 1] + mine[i][j - 1] +         mine[i][j + 1] + mine[i + 1][j - 1] +         mine[i + 1][j] + mine[i + 1][j + 1] - 8 * ‘0‘;
}
void fullmine(char mine[][amu + 2], int sta, int end)//埋雷
{
    int sum = 0, n, m;
    srand((unsigned int)time(NULL));
    while (1)
    {
        n = rand() % (end - sta + 1) + sta;
        m = rand() % (end - sta + 1) + sta;
        if (mine[n][m] == ‘0‘)
        {
            mine[n][m] = ‘1‘;
            sum++;
        }
        if (sum == Lshu)
        {
            return;
        }
    }

}
int judge(char mine[][amu + 2], int n, int m)//判斷是否踩雷
{
    if (mine[n][m] != ‘1‘)
    {
        return 1;
    }
    return 0;
}
void game(char show[][amu + 2], char mine[][amu + 2], int sta, int end)
{
    int sum = 0, n, m,p;
    Show(show);
    fullmine(mine, sta, end);
    while (1)
    {
        printf("請輸入要選擇的坐標\n");
        scanf("%d%d", &n, &m);
        n++; m++;
        if (n >=1 && n <= amu && m >= 1 && m <= amu)
        {
            p = judge(mine, n, m);
            if (p == 1)
            {
                sum = getnum(mine, n, m);
                show[n][m] = sum + ‘0‘;
                if (mine[n-1][m] == ‘0‘)//坐標周圍展開
                {
                    show[n-1][m] = ‘\0‘;
                }
                if (mine[n][m + 1] == ‘0‘)
                {
                    show[n][m + 1] = ‘\0‘;
                }
                if (mine[n + 1][m] == ‘0‘)
                {
                    show[n + 1][m] = ‘\0‘;
                }
                if (mine[n + 1][m+1] == ‘0‘)
                {
                    show[n + 1][m+1] = ‘\0‘;
                }
                if (mine[n - 1][m+1] == ‘0‘)
                {
                    show[n - 1][m+1] = ‘\0‘;
                }
                if (mine[n + 1][m-1] == ‘0‘)
                {
                    show[n + 1][m-1] = ‘\0‘;
                }
                if (mine[n-1][m-1] == ‘0‘)
                {
                    show[n-1][m-1] = ‘\0‘;
                }
                if (mine[n ][m-1] == ‘0‘)
                {
                    show[n ][m-1] = ‘\0‘;
                }
            }
            else
            {
                break;
            }
            Show(show);
        }
        else
        {
            printf("輸入坐標不正確\n");
        }
    }
}
int main()
{
    int input, sta = 1, end = 10;
    char mine[amu + 2][amu + 2];
    char show[amu + 2][amu + 2];
    memset(show, ‘#‘, sizeof(show));
    memset(mine, ‘0‘, sizeof(mine));
    menu();
    scanf("%d", &input);
    if (input == 1)
    {
        game(show, mine, sta, end);//遊戲進程
    }
    else
    {
        return 0;
    }
    Show(mine);
    printf("Game Over\n You Lost\n");
    system("pause");
    return 0;
} 

C語言編程 簡單展開掃雷遊戲