C9——扫雷

   扫雷小游戏

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAX_ROW 9
#define MAX_COL 9
#define MINE_COUNT 10

void Init(char show_map[MAX_ROW][MAX_COL],
    char mine_map[MAX_ROW][MAX_COL]){
    //把show_map中每个元素都设为*
    for (int row = 0; row < MAX_ROW; ++row){
        for (int col = 0; col < MAX_COL; ++col){
            show_map[row][col] = '*';
        }
    }
    //把mine_map中每个元素都设为0
    for (int row = 0; row < MAX_ROW; ++row){
        for (int col = 0; col < MAX_COL; ++col){
            mine_map[row][col] = '0';
        }
    }

//在mine_map上随机找出10个位置作为地雷
    int mine_count = MINE_COUNT;
    while (mine_count>1){
        int row = rand()%MAX_ROW;
        int col = rand()%MAX_COL;
        if (mine_map[row][col] == '1'){
                continue;
                //++mine_count;
        }
        mine_map[row][col] = '1';
        --mine_count;
    }
}
void PrintMap(char map[MAX_ROW][MAX_COL]){
    printf(" |");
    for (int col = 0; col < MAX_COL; ++col){
        printf("%d", col);
    }
    printf("\n"); 
    for (int col = 0; col < MAX_COL-6; ++col){
        printf("----");
    }
    printf("\n");
    for (int row = 0; row < MAX_ROW; ++row){
        printf("%d|", row);
        for (int col = 0; col < MAX_COL; ++col){
            printf("%c", map[row][col]);
        }
        printf("\n");
    }
}


void UpdateShowMap(int row,int col,
    char mine_map[MAX_ROW][MAX_COL],
    char show_map[MAX_ROW][MAX_COL]){
    int count = 0;
    if (row - 1 >= 0 && col - 1 >= 0
        && mine_map[row - 1][col - 1] == '1'){
        ++count;
    }
    if (row - 1 >= 0
        && mine_map[row - 1][col] == '1'){
        ++count;
    }
    if (row - 1 >= 0
        && col + 1<MAX_COL
        &&mine_map[row - 1][col + 1] == '1'){
        ++count;
    }
    if (col - 1 >= 0
        &&mine_map[row ][col - 1] == '1'){
        ++count;
    }
    if (col + 1<MAX_COL
        && mine_map[row][col + 1] == '1'){
        ++count;
    }
    if (row + 1 <MAX_ROW && col - 1 >= 0
        && mine_map[row + 1][col - 1] == '1'){
        ++count;
    }
    if (row + 1 <MAX_ROW
        && mine_map[row + 1][col] == '1'){
        ++count;
    }
    if (row + 1 <MAX_ROW && col + 1 <MAX_ROW
        && mine_map[row + 1][col + 1] == '1'){
        ++count;
    }
    show_map[row][col] = count + '0';
}


void Game(){                        //Game表示一局游戏
    char show_map[MAX_ROW][MAX_COL];//创建两个二位数组作为地图
    char mine_map[MAX_ROW][MAX_COL];
    Init(show_map, mine_map);//对两个地图进行初始化
    int blank_count = 0;
    while (1){
        system("cls");//清屏
        //PrintMap(mine_map);//打印地图
        printf("\n");
        PrintMap(show_map);
        printf("请输入要翻开的位置(row col):");//提示玩家输入,并进行校验
        int row = 0;
        int col = 0;
        scanf("%d %d", &row, &col);
        if (row < 0 || row >= MAX_ROW
            || col < 0 || col >= MAX_COL){
            printf("您的输入的坐标有误!\n");
            continue;
        }
        if (show_map[row][col] != '*'){
            printf("输入的坐标已经翻开!\n");
            continue;
        }
        if (mine_map[row][col] == '1'){   
            system("cls");
            PrintMap(mine_map);//判断是否踩雷
            printf("很遗憾,你踩雷了!\n");
            return;
        }
        ++blank_count;
        if (blank_count == MAX_ROW*MAX_COL - MINE_COUNT){             //判断是否游戏胜利
            printf("扫雷成功!\n");
            return;
        }
        UpdateShowMap(row, col, mine_map, show_map);//告诉玩家当前位置有几个雷
    }
}


int Menu()
{
    printf("*******************************\n");
    printf("*************1.开始游戏********\n");
    printf("*************0.结束游戏********\n");
    printf("*******************************\n");
    printf("请输入您的选择\n");
    int choice = 0;
    scanf("%d", &choice);
    return choice;
}
int main(){
    srand((unsigned int)time(0));//获取时间戳
    while (1){
        int choice = Menu();
        if (choice == 1){
            Game();
        }
        else if (choice == 0){
            printf("再见\n");
            break;
        }
        else{
            printf("您的输入有误!\n");
        }
    }
    system("pause");
    return 0;
}
 

发布了20 篇原创文章 · 获赞 10 · 访问量 1383

猜你喜欢

转载自blog.csdn.net/JM624235197/article/details/89433746
C9
今日推荐