ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言学习记录——십오 扫雷

2022-01-14 15:58:13  阅读:136  来源: 互联网

标签:COLS 记录 int mine C语言 char 扫雷 printf row


game.h

#define ROW 9

#define COL 9

#define ROWS ROW + 2

#define COLS COL + 2

#define EASY_COUNT 80

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);

void DisplayBoard(char board[ROWS][COLS], int row, int col);

void SetMine(char board[ROWS][COLS], int row, int col);

void FindMine(char mine[ROW3][COL3], char show[ROWS][COLS], int row, int col);

game.c

#define _CRT_SECURE_NO_WARNINGS 1

#include "game.h"

void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)

{

    int i = 0;

    int j = 0;

    for(i = 0; i < row; i++)

    {

        for(j = 0;j < col; j++)

        {

            board[i][j] = '0';

        }

    }

}

void DisplayBoard(char board[ROWS][COLS], int row, int col)

{

    int i = 0;

    int j = 0;

    //打印列号

    for(i = 0 ; i <= col; i++)

    {

        printf("%d ", i);

    }

    printf("\n");

    for(i = 1; i <= row; i++)

    {

        printf("%d ", i);

        for(j = 1; j <= col; j++)

        {

            printf("%c ", board[i][j])

        }

        printf("\n");

    }

}

void SetMine(char board[ROW][COL], int row, int col)

{

    int  count = EASY_COUNT;

    while(count)

    {

        int x = rand() % row + 1;

        int y = rand() % col + 1;

        if(board[x][y] == '0')

        {

            board[x][y] = '1';

            count--;

        }  

    }

}

int get_mine_count(char mine[ROWS][COLS], int x, int y)

{

    return mine[x - 1][y] +

    mine[x - 1][y - 1] +

    mine[x][y - 1] +

    mine[x + 1][y - 1] +

    mine[x +1][y] +

    mine[x + 1][y + 1] +

    mine[x][y + 1] +

    mine[x -1][y + 1] - 8 * '0';

}

void FindMine(char mine[ROW3][COL3], char show[ROWS][COLS], int row, int col)

{

    int x = 0;

    int y = 0;

    int win = 0;

    //9*9 - 10=71.排完所有雷要结束游戏

    while(win < row * col - EASY_COUNT)

    {

        printf("请输入排查雷的坐标: >");

        scanf("%d%d", &x, &y);

        if(x >= 1 && x <= row && y >= 1 && y <= col)

        {

            //坐标合法

            //踩雷或不是雷

            if(mine[x][y] == '1')

            {

                printf("很遗憾,你被炸死了\n");

                DisplayBoard(mine, row, col);

                break;

            }

            else

            {

                //计算x,y周围几个雷,引入一个函数,定义

                int count = get_mine_count(mine, x, y);

                show[x][y] = count + '0';

                DisplayBoard(show, row, col);

                win++;

            }

        }

        else

        {

            printf("输入坐标非法,请重新输入!\n");

        }

    }

    if(win == row*col - EASY_COUNT)

    {

        printf("排雷成功\n");

        DisplayBoard(mine, row, col);

    }

}

test.c

#include "game.h"

void menu()

{

    printf("**************************************\n");

    printf("********* 1. play   0. exit **********\n");

    printf("**************************************\n");

}

void game()

{

  char mine[ROWS][COLS] = { 0 }; //布置好的雷的信息

  char show[ROWS][COLS] = { 0 }; //排查出的雷的信息

  InitBoard(mine, ROWS, COLS, '0'); //初始化数组

  InitBoard(show, ROWS, COLS, '*')

  //DisplayBoard(mine, ROW, COL); 打印棋盘

  DisplayBoard(mine, ROW, COL);

  //布置雷

  SetMine(mine, ROW, COL);

  //DisplayBoard(mine, ROW, COL);

  //扫雷,排查雷

  FindMine(mine, show, ROW, COL);


 

}

void test()

{

    int input = 0;

    srand((unsigned int)time(NULL));

   

    do

    {

        menu();

        printf("请选择: >");

        scanf("%d", &input);

        switch(input)

        {

            case 1:

            game();

            break;

            case 0:

            printf("退出游戏\n");

            break;

            default:

            printf("选择错误,重新选择!\n");

            break;

        }    

    } while (input);

}

int main()

{

    test();

    return 0;

}

结束。

标签:COLS,记录,int,mine,C语言,char,扫雷,printf,row
来源: https://blog.csdn.net/kongqizyd146/article/details/122430733

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有