C 언어 는 간단 한 지뢰 제거 소스 코드 를 실현 한다.

소 뇌 는 모두 가 잘 아 는 작은 게임 으로 오늘 우 리 는 c 언어 로 간단 한 버 전의 소 뇌 를 실현 할 것 이다.
필요 한 기능
1.첫 번 째 순간 에 폭사 하지 않도록 보증한다.
2.입력 한 좌표 주위 에 천둥 이 없 으 면 주위 좌 표를 바로 펼 칠 수 있다.
3.입력 한 좌표 주변 에 천둥 이 쳤 을 때 주변 에 천둥 이 몇 개 있 는 지 표시
주의 사항
1.두 개의 배열 을 정의 해 야 한다.하 나 는 게이머 에 게 지뢰 를 보 여 주 는 상황 이 고 하 나 는 지뢰 를 저장 해 야 한다.
2.정 의 된 배열 의 크기 는 지뢰 제거 게임 의 바둑판 의 실제 크기 보다 크 고 배열 의 경 계 를 넘 지 않도록 해 야 한다.
(예 를 들 어 지뢰 를 제거 하 는 바둑판 이 99 일 때 우 리 는 1111 의 배열 을 정의 하여 배열 의 경 계 를 넘 지 않도록 해 야 한다)
3.코드 를 파일 로 나 눌 수 있 습 니 다.
코드 구현
서 류 를 나누다
코드 를 game.c,game.h,test.c 파일 에 각각 기록 하면 코드 를 더욱 조리 있 게 할 수 있 습 니 다.
test.c 는 주로 게임 의 주요 프레임 워 크 를 씁 니 다.
game.c 필요 한 함수 구현
game.h 필요 한 함수 정의

두 배열 을 초기 화 합 니 다.

//board-        
//set-      (    '1'    ,'0'     ;            '*')
void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)
{
 int i;
 int j;
 for (i = 0; i < rows; i++)
 {
  for (j = 0; j < cols; j++)
  {
   board[i][j] = set;
  }
 }
}
인쇄 기능

//  
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{
 int i;
 int j=1;
 printf("-----------------------------
");// , for (i = 0; i <= row; i++) {// printf("%d ", i); } printf("
"); for (i = 1; i <= row; i++) { printf("%d ", i);// for (j = 1; j <= col; j++) { printf("%c ", board[i][j]); } printf("
"); } printf("-----------------------------
"); }
천둥 을 치다

//   
//count-       
void SetMineBoard(char board[ROWS][COLS], int row, int col, int count)
{
 while (count)
 {
  int x = rand() % row + 1;
  int y = rand() % col + 1;
  if (board[x][y] == '0')
  {
   board[x][y] = '1';
   count--;
  }
 }
}
지뢰 를 제거 하 다

//   
//num-    
void FineMine(int row, int col, int num)
{
 int flag = 1;
 int a = 1;
 while (flag)
 {
  printf("       :");
  int x;
  int y;
  scanf("%d%d", &x, &y);
  if (a == 1)//             ,          
  {
   a--;
      safe(x, y,ROW,COL);//    ,          
  }

  if (x >= 1 && x <= row&&y >= 1 && y <= col)//    
  {
   if (mine[x][y] != '1')//        ,          
   {
    int count = GetMineCount(x, y);//        
    show[x][y] = count + '0';
    if (show[x][y] == '0')
    {//       ,             
     open_mine(x, y);//        
     int z = count_show_mine(row, col);
     if (z == num)
     {
      printf("         ,    
"); DisplayBoard(show, ROW, COL);// break; } } DisplayBoard(show, ROW, COL);// } else { printf(" ,
"); DisplayBoard(mine, ROW, COL);// flag = 0; } } else { printf(" , "); } } }
첫 번 째 순간 에 폭사 하지 않 을 것 을 보증 합 니 다.

//            
void safe(int x, int y, int row, int col)
{
 int q = 1;
 if (mine[x][y] == '1')
 {//      ,        
  mine[x][y] = '0';
  while (q)
  {
   int a = rand() % row + 1;
   int b = rand() % col + 1;
   if (mine[a][b] == '0'&&a!=x&&b!=y)
   {
    q--;
    mine[a][b] = '1';
   }
  }
 }
}
주변 에 천둥 이 몇 개 있 는 지 통계 하기;

//    (x,y)      ;
int GetMineCount(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 open_mine(int x, int y)//        
{
 if (mine[x - 1][y - 1] == '0')
 {
  show[x - 1][y - 1] = GetMineCount(x - 1, y - 1) + '0';//         
 }
 if (mine[x - 1][y] == '0')
 {
  show[x - 1][y] = GetMineCount(x - 1, y) + '0';//         
 }
 if (mine[x - 1][y + 1] == '0')
 {
  show[x - 1][y + 1] = GetMineCount(x - 1, y + 1) + '0';//         
 }
 if (mine[x][y - 1] == '0')
 {
  show[x][y - 1] = GetMineCount(x, y - 1) + '0';//         
 }
 if (mine[x][y + 1] == '0')
 {
  show[x][y + 1] = GetMineCount(x, y + 1) + '0';//         
 }
 if (mine[x + 1][y - 1] == '0')
 {
  show[x + 1][y - 1] = GetMineCount(x + 1, y - 1) + '0';//         
 }
 if (mine[x + 1][y] == '0')
 {
  show[x + 1][y] = GetMineCount(x + 1, y) + '0';//         
 }
 if (mine[x + 1][y + 1] == '0')
 {
  show[x + 1][y + 1] = GetMineCount(x + 1, y + 1) + '0';//         
 }
}
승 리 를 판단 하 다

//           ,         
int count_show_mine(int row,int col)
{
 int count = 0;
 int i = 0;
 int j = 0;
 for (i = 1; i <= row - 2; i++)
 {
  for (j = 1; j <= col - 2; j++)
  {
   if (show[i][j] == '*')
   {
    count++;
   }
  }
 }
 return count;
}
효과 전시
1.인쇄 와 배치
첫 번 째 배열 은 게이머 들 이 게임 에서 본 배열 이 고 두 번 째 배열 은 천둥 을 저장 하 는 배열 이 며 게임 에서 두 번 째 배열 은 인쇄 되 지 않 습 니 다.

2.safe 함수 검사
첫 번 째 배열 은 원래 천둥 을 저장 하 는 배열 입 니 다.이때(1,7)위 치 는 천둥 이 있 는 것 을 볼 수 있 습 니 다.그러나 우리 가(1,7)좌 표를 입력 할 때 safe 함수 의 기능 으로 인해(1,7)위치의 천둥 이 다른 곳 으로 이동 합 니 다.

3.위의 그림 에서 알 수 있 듯 이(2,8)저 장 된 천둥 이 있 습 니 다.이때 우 리 는 입력(2,8)(첫 번 째 입력 이 아 닙 니 다)하고 게임 이 끝 납 니 다.

4.기능 전개
첫 번 째 배열 은 뇌 를 배치 한 후에 인쇄 된 배열 입 니 다.우 리 는(3,3)위치 와 주변 에 뇌 가 없 는 것 을 볼 수 있 습 니 다.그래서 우 리 는 입력(3,3)을 하면 주변 8 개의 위치 도 검색 되 는 것 을 볼 수 있 습 니 다.

이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기