C 언어 지뢰 해제 고전 게임 실현

C 언어 는 지뢰 제거 게임 을 실현 하 므 로 여러분 이 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
지뢰 해제 게임 을 실현 하 다.
삼자 기 게임 과 유사 하여 후기 에 코드 에 대한 읽 기,이해 와 지도 크기 와 지뢰 의 수량 변경 을 편리 하 게 하기 위해 먼저\#define 으로 식별 자 를 정의 하여 상수(지도의 크기,지뢰 의 개수 등)를 표시 합 니 다.

#define MAX_ROW 9
#define MAX_COL 9
#define mineNumber 10
게임 생 성 절차
1.맵 만 들 기
여기 서 쇼 맵 은 게이머 들 에 게 보 여 주 는 지 도 를 표시 합 니 다.mineMap 은 지뢰 를 저장 하 는 지 도 를 표시 합 니 다(게이머 들 에 게 보 여주 지 않 고 게이머 들 이 지뢰 를 밟 았 는 지,그리고 게이머 들 이 선택 한 위치 주변 에 지뢰 가 얼마나 있 는 지 후기 판단 하 는 데 사 용 됩 니 다).

char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
2.지도 초기 화
코드 내용 에서 보 듯 이 memset 에 사용 되 었 습 니 다.메모리 에 있 는 모든 바이트 를 구체 적 인 값 으로 설정 합 니 다.

void init(char showMap[MAX_ROW][MAX_COL],
    char mineMap[MAX_ROW][MAX_COL]) {
 // showMap     '*'
  //    (  )
   /*for (int row = 0; row < MAX_ROW; row++) {
    for (int col = 0; col < MAX_COL; col++) {
     showMap[row][col] = '*';
    }
   }*/

 //    (memset  ,        string.h)
 //memset:                     
 //memset('          ', '      ', '        ')
 memset(showMap, '*', MAX_ROW*MAX_COL);
 memset(mineMap, '0', MAX_ROW*MAX_COL);
 //     ,      
 srand((unsigned int)time(0));
 int mineCount = 0;     //       
 while (mineCount < mineNumber) {
  //                
  int row = rand() % MAX_ROW; 
  int col = rand() % MAX_COL;
  //               
  if (mineMap[row][col] == '1') {
   continue;
  }
  mineMap[row][col] = '1';
  //       
  mineCount++;
 }
}
3.지도 인쇄

void print(char theMap[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
  for (int col = 0; col < MAX_COL; col++) {
   printf("%c", theMap[row][col]);
  }
  printf("
"); } }
4.플레이어 가 펼 쳐 야 할 위 치 를 선택
이 부분 에서:
(1)유 저 는 펼 치고 싶 은 위치(row col)를 입력 합 니 다.
(2)합 법성 판정 을 실시한다.게이머 가 입력 한 좌표 가 규범 에 부합 되 는 지 판단 한다.
(3)현재 위치 가 펼 쳐 졌 는 지 판단 하기;
(4)현재 위치 에 뇌 가 있 는 지 판단:즉,유저 의 아웃 여 부 를 판단 합 니 다.

 //      ,        
 int row = 0;
 int col = 0;
 printf("       (row col):");
 scanf("%d %d", &row, &col);
 
 //     
 if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
  printf("    ,     :
"); continue; } // ( '*') if (showMap[row][col] != '*') { printf(" , !
"); continue; } // if (mineMap[row][col] == '1') { printf(" , !"); break; }
5.지도 업데이트
여기 서,우 리 는 유저 가 입력 한 내용 에 따라 지도(showMap)를 업데이트 해 야 합 니 다.포함:
(1)주변 지뢰 수량 계산

위의 그림 에서 보 듯 이 중심 위치(row,col)는 게이머 들 이 선택 한 위치 이 고 주변의 위 치 는 위의 그림 에서 보 듯 이 그들의 좌 표를 표시 할 수 있다.주변 에 지뢰 개수 가 얼마나 있 는 지 를 집계 해 야 하기 때문에 순환 을 통 해 주변 위치 에 저 장 된 내용 을 판단 할 수 있다.
또한 순환 과정 에서 좌 표 는 경 계 를 넘 지 않 고 이 3*3 의 범 위 를 초과 해 서 는 안 된다 는 것 을 주의해 야 한다.(중간 유저 의 위 치 는 건 너 뛰 어야 합 니 다).

//    showMap,     0         ,       
void update(char showMap[MAX_ROW][MAX_COL], 
     char mineMap[MAX_ROW][MAX_COL], int row, int col) {
 //            
 int count = 0;
 for (int r = row - 1; r <= row + 1; r++) {
  for (int c = col - 1; c <= col + 1; c++) {
   //             
   if (r < 0 || r >= MAX_ROW || c < 0 || c >= MAX_COL) {
    continue;
   }
   //           
   if (r == row && c == col) {
    continue;
   }
   //       '1' ,    +1
   if (mineMap[r][c] == '1') {
    count++;
   }
  }
 }
 //showMap[row][col] char  ,count int  ,      
 // C   ,              
 //'0' ASCII       48,       '1','2'...
 //        ,                  
 showMap[row][col] = '0' + count;
}
마지막 으로 이 showMap[row][col]='0'+count;주의 가 필요 하 다.
우리 의 목적 은 주위 지뢰 의 수량 을 유저 가 선택 한 위치(row,col)에 할당 하 는 것 이기 때문에 우 리 는 그들 간 의 연관 성 을 고려 해 야 한다.
(row,col)은 char 형 이 고 count 는 int 형 입 니 다.직접 값 을 부여 할 수 없 을 것 입 니 다.그러나 C 언어 에서 우 리 는 위 에서 쓴 방식 으로 값 을 부여 할 수 있 습 니 다(row,col).
ASCII 에서'0'의 10 진 수 는 48,'0'다음 에 한 번 은 문자 형의'1','2',...............................................................

(주:이런 할당 방식 은 C 언어 에서 만 가능 하고 다른 언어 는 안 됩 니 다)
6.승 부 를 판정한다
유저 가 이미 모든 위 치 를 펼 쳤 는 지 판단:
(1)모든 위 치 를 펼 쳤 습 니 다:승 리 를 판정 하고 절차 가 끝 났 습 니 다.
(2)모든 위 치 를 완전히 펼 치지 않 음:순환 고리 2-6.

//openedCount              。
if (openedCount == MAX_ROW * MAX_COL - mineNumber) {
   printf("       ,      !");
   break;
  }
이상 은 아마 내 가 지뢰 제거 게임 의 사고,코드 와 주의해 야 할 점 을 쓰 고 있 는 것 이다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기