扫雷游戏(简易版)

头文件

#pragma once

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

#define ROW 12
#define COL 12

#define NUM 20
#define BOOM '1'

extern void Game();

我们的主函数

int main()
{
    srand((unsigned long)time(NULL));//srand ()函数用来设置算法的种子,time (NULL)返回当前的时间
                                    //如果想在一个程序中生成随机数序列,需要至多在生成随机数之前设置一次随机种子
    int quit = 0;
    while (!quit) {
        Menu();
        int select = 0;
        scanf("%d", &select);
        switch (select) {
        case 1:
            Game();
            break;
        case 2:
            quit = 1;
            break;
        default:
            printf("数入有误,重新选择!\n");
            break;
        }
    }
    printf("BeyBey!\n");
    return 0;
 }

1.函数菜单

void Menu()
{
    printf("#######################\n");
    printf("####    1. PLAY    ####\n");
    printf("####    2. EXIT    ####\n");
    printf("#######################\n");
    printf("please Select:");
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_20,color_FFFFFF,t_70,g_se,x_16

2.游戏的框架:

void Game()
{
    char show_board[ROW][COL];
    char mine_board[ROW][COL];
    memset(show_board, '*', sizeof(show_board));
    memset(mine_board, '0', sizeof(mine_board));
    SetMines(mine_board, ROW, COL);
    int total = (ROW - 2) * (COL - 2) - NUM;//目标(找完到不是雷的地方)
    int clear = 0;
    while (1) {
        system("cls");//清屏处理
        int x = 0;
        int y = 0;
        ShowBoard(show_board, ROW, COL);
        printf("请输入坐标<x,y>");
        scanf("%d %d", &x, &y);
        if (!(x >= 1 && y <= ROW - 2) && (y >= 1 && y <= COL - 2)) {
            //判断扫雷的位置
            printf("扫雷的位置有问题!\n");
            continue;
        }
        if (show_board[x][y] != '*') {
            //防止重复输入已被排过的地方
            printf("扫雷的地方已被排除!\n");
            continue;
        }
           //判断你输入的坐标是否有雷
        if (mine_board[x][y] == '1') {
            ShowBoard(mine_board, ROW, COL);
            printf("对不起,你被炸死了!\n");
            continue;
        }
        else {
            int count = CountMine(mine_board, x, y);
            show_board[x][y] = count + '0';
            clear++;
        }
        if (clear >= total) {
            printf("恭喜你,通关成功!\n");
            break;
        }
    }
}

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_13,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAVGhlRGV2aWNl,size_20,color_FFFFFF,t_70,g_se,x_16

3.

void SetMines(char board[][COL], int row, int col)
{
    int i = 1;
    while (i < NUM) {
        int _x = rand() % (row - 2) + 1;
        int _y = rand() % (col - 2) + 1;
        if (board[_x][_y] == BOOM) {
            continue;
        }
        board[_x][_y] = BOOM;
        i++;
    }
}

4.显示面板

void ShowBoard(char board[][COL], int row, int col)
{
    printf(" ");
    for (int i = 1; i <= row - 2; i++) {
        printf("%4d", i);
    }
    printf("\n ");
    for (int k = 1; k <= col - 2; k++) {
        printf("----");
    }
    printf("\n");
    for (int i = 1; i <= row - 2; i++) {
        printf("%2d|", i);
        for (int j = 1; j <= col - 2; j++) {
            printf(" %c |", board[i][j]);
        }
        printf("\n ");
        for (int k = 1; k <= col - 2; k++) {
            printf("----");
        }
        printf("\n");
    }
}

5.

static int CountMine(char board[][COL], int x, int y)
{
    //显示你输入坐标周围八个坐标有几个雷
    return board[x - 1][y - 1] + board[x - 1][y] + \
        board[x - 1][y + 1] + board[x][y - 1] + \
        board[x][y + 1] + board[x + 1][y - 1] + \
        board[x + 1][y] + board[x + 1][y + 1] - 8 * '0';
}

 

 

 

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值