C语言简单实现扫雷

C语言简单实现扫雷

Game.h 文件

#define _CRT_SECURE_NO_WARNINGS
#ifndef __GAME_H__
#define __GAME_H__

#define  COLS 11
#define  ROWS 11
#define MAX 10
#define ABC 1

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>

void set_mine(char arr1[COLS][ROWS]);
void print(char arr1[COLS][ROWS],int col,int row);
int get_mine(char arr1[COLS][ROWS],int x, int y);


#endif

Game.c 文件

#include "game.h"
void set_mine(char arr1[COLS][ROWS])
{   
    char a = 0;  
    char b = 0;  
    int count=0;
    srand((unsigned)time(NULL)); 
    while(count<MAX)  
    {  
        a = rand()%9 + 1;  
        b = rand()%9 + 1;  
        if(arr1[a][b]!= 1+'0')  
        {  
            arr1[a][b]=1+'0';             
            count++;  
        }  
    }  
}  
void print(char arr1[COLS][ROWS],int col,int row)                       
{  
    int i = 0;        
    int j = 0; 
    printf("   ");
    for(i=1;i<col-1;i++)
    {
      printf(" %d ",i);
    }
    printf("\n");
    for(i=1;i<col-1;i++)
    {  
       printf(" %d ",i);
       for(j=1;j<row-1;j++)
       {
         printf(" %c ",arr1[i][j]);
       }
       printf("\n");
    }      
}

int get_mine(char arr1[COLS][ROWS],int x, int y)
{
  return arr1[x-1][y-1]
         +arr1[x-1][y]
         +arr1[x-1][y+1]
         +arr1[x][y-1]
         +arr1[x][y+1]
         +arr1[x+1][y-1]
         +arr1[x+1][y]
         +arr1[x+1][y+1]
         -8*'0';
}

test.c 文件

#include "game.h"
void mnue()
{
  printf("**************************************\n");
  printf("**                                  **\n");
  printf("**          1.开始   0.退出         **\n");
  printf("**                                  **\n");
  printf("**************************************\n");
}

void game()
{  
    char arr[COLS][ROWS] = {0};
    char show[COLS][ROWS] = {0};
    int x = 0;
    int y = 0;
    int i = 0;
    int j = 0;
    int temp = 0;
    int ret = 0;
    int count = 1;
    memset(arr,'0',sizeof(arr[0][0])*COLS*ROWS);
    memset(show,'*',sizeof(show[0][0])*COLS*ROWS);  
    set_mine(arr);
    print(show,COLS,ROWS);
    while(ret<(COLS-2)*(ROWS-2)-MAX)
    {   
        printf("请输入你想查找的坐标:>");
        scanf("%d%d",&x,&y);
        if((x>=1)&&(x<=9)&&(y>=1)&&(y<=9))
        { 
          if((count==1)&&(arr[x][y]=='1'))
          {
             set_mine(arr);
             print(arr,COLS,ROWS);
             count++;
          }
          else 
          {
            if((count!=1)&&(arr[x][y]=='1'))
              {
                 printf("你被炸死了!\n");
              }
              else 
              {  
               ret++;
               for(i=x-ABC;i<x+ABC;i++)
               {
                  for(j=y-ABC;j<y+ABC;j++)
                  {
                    temp = get_mine(arr,i,j);
                    show[i][j] = temp+'0';                      
                  }
               }
                print( show,COLS,ROWS);
             }
          }
        }
        else
        {
            printf("输入错误!请重新输入:>");
        }     
    }
    if(ret == (COLS-2)*(ROWS-2)-MAX)
    {
      printf("恭喜您!排雷成功。\n");
    }
}

void main()
{  int input = 0;

    do
    {   mnue();
        printf("请输入你的选择:>");
        scanf("%d",&input);
        switch(input)
        {
          case 1:
            game();
            break;
          case 0:
            break;
          default:
              printf("输入错误!请重新输入:>");
            break;      
        }


    }while(input);

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值