掃雷遊戲

遊戲規模:10×10的棋盤遊戲,20個雷。
程序實現:1.爲玩家提供遊戲界面如圖。

掃雷遊戲
2。在該界面上,玩家通過輸入座標開始掃雷,若遇見雷則提示遇見雷,視圖界面該位置上修改爲不同圖標表示雷,若沒有遇見,改位置上要顯示周圍一圈雷的個數,直到無雷的地方都被選擇,則本局遊戲結束。
3.結束一輪遊戲後要返回初始界面,由玩家決定要不要再玩一局。

程序代碼:

mine_clear.h:(頭文件)

#ifndef   _MINE_CLEAR_
#define   _MINE_CLEAR_

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <time.h>
#define ROW 12
#define COL 12
#define MINE_NUM 20
#define TOTAL 100

void ShowUI();
void Game();
void Set_mine();
void Show_Board();
int Calculat_Mine_Number();

#endif

main.c:(主函數)

#define _CRT_SECURE_NO_WARNINGS 1
#include "mine_clear.h"
int main()
{
    int select;

    do{
        ShowUI();
        scanf("%d", &select);
        switch (select)
        {
        case 1:Game(); break;
        case 0:printf("bey...\n"); break;
        default:printf("Please input right number:"); break;
        }
    } while (select);

    system("pause");
    return 0;
}

mine_clear.c:(子函數)

#define _CRT_SECURE_NO_WARNINGS 1
#include "mine_clear.h"
void ShowUI()
{
    printf("#################################\n");
    printf("#### 1.PLAY           2.EXIT ####\n");
    printf("#################################\n");
    printf("Please make a choice by select a number:");
}
static int Get_Randnumber(int star,int end)
{
    return rand() % (end - star + 1) + star;
}
void Set_mine(char mine_board[][COL])
{
    srand((unsigned int)time(NULL));
    int row,col;
    int mine_number = MINE_NUM;
    while (mine_number)
    {
        row = Get_Randnumber(1, ROW - 2);
        col = Get_Randnumber(1, COL - 2);
        if ('0'==mine_board[row][col])
        {
            mine_board[row][col] = '1';
            mine_number--;
        }
    }
}

void Show_Board(char show_board[][COL])
{
    int i = 1;
    int j = 1;
    int t = 1;
    printf("   ");
    for (; i <= COL - 2; i++)
    {
        printf("%d ", i);
    }
    printf("\n");
    for (i=1; i <= COL - 4; i++)
    {
        printf("---");
    }
    printf("\n");
    for (i = 1; i <= ROW-2; i++)
    {
        printf("%2d|", i);
        for (j = 1; j <= COL - 2; j++)
        {
            printf("%c|",show_board[i][j]);
        }
        printf("\n");
        for (t=1; t <= COL - 4; t++)
        {
            printf("---");
        }
        printf("\n");
    }

}

int Calculat_Mine_Number(char mine_board[][COL], int row, int col)
{
    return mine_board[row - 1][col - 1] + mine_board[row - 1][col] + mine_board[row - 1][col + 1] + mine_board[row][col - 1] + mine_board[row][col + 1]+ mine_board[row + 1][col - 1] + mine_board[row + 1][col] + mine_board[row + 1][col + 1]-8*'0';
}

void Game()
{
    char mine_board[ROW][COL];
    char show_board[ROW][COL];
    int row, col;
    int count=0;
    memset(mine_board, '0', sizeof(mine_board));
    memset(show_board, '*', sizeof(show_board));
    Set_mine(mine_board);
    while (1)
    {
        Show_Board(show_board);
        printf("plese input your pose:");
        scanf("%d%d", &row, &col);
        if ('0' == mine_board[row][col])
        {

            show_board[row][col] = Calculat_Mine_Number(mine_board,row,col)+'0';
            count++;
        }
        else if ('1' == mine_board[row][col])
        {
            printf("oh~~no,you meet a mine...\n");
            show_board[row][col] = '@';
            continue;
        }
        if (MINE_NUM == (TOTAL - count))
        {
            printf("wow~~you win!!!!\n");
            break;
        }

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章