扫雷小游戏

发布于:2022-11-05 ⋅ 阅读:(332) ⋅ 点赞:(0)

test.c

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"//这里引用自定义头文件可以减少代码的重复.

#include"game.c"

#include<stdio.h>

void game()

{

    char Mine[ROWS][COLS] = { ' ' };

    char Show[ROWS][COLS] = { ' ' };

   

    InitBoard(Mine, ROWS, COLS, '0');//初始化

    InitBoard(Show, ROWS, COLS, '*');//初始化

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

    SetMine(Mine, ROW, COL);//设置雷

    DisplayBoard(Mine, ROW, COL);//打印雷

    FindMine(Mine,Show,ROW, COL);//排雷

}

void menu()

{

 system("color F1");

 system("title 扫雷小游戏");

 int number;

 printf("----------------------------------------------------\n");

  printf("--------欢迎来到扫雷小游戏--------\n");

  char s1[20],s2[20],s3[20],s4[20];

  printf("注册一个账号:\n");

  printf("输入注册的账号:\n");

  scanf("%s",s1);

  printf("输入注册的密码:\n");

  scanf("%s",s2);

  system("cls");

  printf("输入账号密码来登录:\n");

  scanf("%s",s3);

  scanf("%s",s4);

  while(1)

  {

    if(strcmp(s1,s3)==0 &&strcmp(s2,s4)==0)

    {

     

    printf("登陆成功\n");

    break;

  }

}

printf("1代表开始游戏 0代表退出游戏\n");

printf("请输入1或0\n");

}

void test()

{

    srand((unsigned)time(NULL));

    int input = 0;

    do

    {

         printf("\n");

         scanf("%d", &input);

         switch (input)

         {

         case 1:

             game();

             break;

         case 0:

             printf("退出游戏!");

             return;

         default:

             printf("选择错误,请重新选择");

             break;

         }

    } while (1);

}

int main()

{

    menu();

    test();

    return 0;

}

game.h

#pragma once

#include<stdio.h>

#include <time.h>

#include<stdlib.h>//引用的头文件

#define ROW 9

#define COL 9

#define ROWS ROW+2

#define COLS COL+2

#define EASY_COUNT 80//以供调整的值--代表雷的数量.

//菜单--选择--初始化--打印游戏内容--选择坐标--判断是否踩雷--计算落点周围雷的数量--选择坐标.....

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 Mine[ROWS][COLS], int row, int col);//设置棋子函数

void FindMine(char Mine[ROWS][COLS],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;

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

    {

         int j = 0;

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

         {

             Board[i][j] = set;

         }

    }

}

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

{

    int i = 0;

    printf("----------------------\n");

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

    {

         printf("%d ", i);

    }

    printf("\n");

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

    {

         int j = 0;

         printf("%d ", i);

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

         {

             printf("%c ",Board[i][j]);

         }

         printf("\n");

    }

    printf("----------------------\n");

}

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

{

    int count = EASY_COUNT;

    while (count)

    {

         int x = (rand() % row) + 1;

         int y = (rand() % col) + 1;

         if (Mine[x][y] != '1')

         {

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

             count--;

         }

    }

}

int GetMineCount(char Mine[ROWS][COLS],int x ,int y)

{

    return (Mine[x - 1][y - 1] +

         Mine[x - 1][y] +

         Mine[x - 1][y + 1] +

         Mine[x][y - 1] +

         Mine[x][y + 1] +

         Mine[x + 1][y - 1] +

         Mine[x + 1][y] +

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

}

void FindMine(char Mine[ROWS][COLS], char Show[ROWS][COLS], int row, int col)//设置棋子函数

{

    int win = 0;

    int x = 0;

    int y = 0;

   

    int time = 1;

    while (win < row * col - EASY_COUNT)

    {

         printf("请输入坐标:");

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

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

         {

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

             {

                  printf("很遗憾,排雷失败:(\n\n");

                  DisplayBoard(Mine, ROW, COL);

                 

             }

             else

             {

                  int count = GetMineCount(Mine, x, y);

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

                  DisplayBoard(Show, ROW, COL);

                  win++;

             }

         }

         else

         {

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

         }

    }

   

    if (win == row * col - EASY_COUNT)

    {

         printf("恭喜你,排雷成功: )\n\n ");

        

         printf("输入1可继续游戏,0可退出游戏");

    }

}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到