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);

}
相關文章
相關標籤/搜索