C 언어 콘 솔 지뢰 제거 게임 실현

C 언어 는 콘 솔 의'지뢰 제거'게임 을 실현 한다.

기 존의 게임 경험 에 따 르 면 우 리 는 먼저 지뢰 제거 게임 의 승리 규칙 을 확정 할 수 있다.지뢰 가 아 닌 모든 지역 을 뒤 져 야 승리 라 고 할 수 있다.
그 다음 에 우 리 는 전체 프로그램의 디자인 방향 을 확정 해 야 한다.
1.우선,우 리 는 9*9 의 2 차원 수 를 정의 합 니까?아니면 펼 치지 않 은 상태 그룹 을 정의 합 니까?첫 번 째 배열 은 뇌 구 맵 의 전개 상황 을 나타 내 는 데 사 용 됩 니 다.즉,각 소 그룹 요소 의 위치 상 태 는 전개 상태 인지 전개 되 지 않 은 상태 인지,쇼 맵()이 라 고 명명 되 었 습 니 다.두 번 째 배열 은 지뢰 의 분포 상황 을 나타 내 는 데 사 용 됩 니 다.소 조 의 모든 요소 위 치 는 지뢰 인지 아 닌 지 를 표시 합 니 다.우 리 는 minMap()이 라 고 명명 합 니 다.
2.두 개의 지 도 를 초기 화하 고 지 도 를 출력 합 니 다.
3.유 저 는 2 차원 배열 의 좌 표를 입력 하여 위 치 를 입력 하고 지도 위 치 를 펼 칩 니 다.
4.유저 가 입력 한 위치 가 합 법 적 인지 판단 합 니 다.
5.유저 가 입력 한 위치 에 지뢰 가 있 는 지 판단 하고 지뢰 가 있 으 면 게임 종료 선언;지뢰 가 없 으 면 게임 을 계속 합 니 다.
6.게임 을 계속 하면 플레이어 가 입력 한 위치 에 근처 지뢰 의 개수 가 표 시 됩 니 다.
첫 번 째 단 계 는 구조 menu()함 수 를 통 해 간단 한 상호작용 메뉴 와 게이머 의 상호작용 을 구축 하여 게임 을 시작 할 지 여 부 를 판단 합 니 다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//   
#define MAX_ROW 9
#define MAX_COL 9
#define DEFAULT_MINE_COUNT 10

int menu() {
 printf("======================
"); printf(" 1.
"); printf(" 0.
"); printf("======================
"); printf(" : "); int choice = 0; scanf("%d", &choice); return choice; } int main() { srand((unsigned int)time(0)); while (1) { int choice = menu(); if (choice == 1) { game();// game() . } else if (choice == 0) { printf("Goodbye!
"); break; } else { printf(" !
"); } } system("pause"); return 0; }
두 번 째 단 계 는 첫 번 째 단계 에서 호출 된 game()함 수 를 구성 합 니 다.game()함 수 는 핵심 기능 함수 로 그 주요 임 무 는 기본 절 차 를 완성 하 는 것 입 니 다.
1.init()함 수 를 구축 하고 2 차원 배열 을 초기 화 합 니 다.쇼 맵 을 초기 화하 고 배열 의 모든 요 소 를*로 설정 합 니 다.mineMap 을 초기 화하 고'0'으로 설정 한 다음 에 랜 덤 으로 N 개의'1'을 생 성 합 니 다.이곳 의'1'은 지뢰 를 의미 합 니 다.N 의 값 은 DEFAULT 입 니 다.MINE_COUNT,즉 지뢰 의 수량 이다.

void init(char showMap[MAX_ROW][MAX_COL],
 char mineMap[MAX_ROW][MAX_COL]) {
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 showMap[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW; row++) {
 for (int col = 0; col < MAX_COL; col++) {
 mineMap[row][col] = '0';
 }
 }
 int n = DEFAULT_MINE_COUNT;
 while (n > 0) {
 //         . 
 int row = rand() % MAX_ROW;
 int col = rand() % MAX_COL;
 if (mineMap[row][col] == '1') {
 //            ,          ,   
 //       . 
 continue;
 }
 mineMap[row][col] = '1';
 n--;
 }
}
2.printMap()함 수 를 구축 합 니 다.이 함 수 는 지 도 를 인쇄 하고 표시 하 는 것 을 책임 집 니 다.주의해 야 할 것 은 대부분의 경우 showMap 을 인쇄 하지만 Gameover 에 서 는 mineMap 을 인쇄 해 야 합 니 다.

void printMap(char theMap[MAX_ROW][MAX_COL]) {
 //        ,             。
 //                    。
 printf(" |");
 for (int col = 0; col < MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("
"); printf("--+------------------
"); for (int row = 0; row < MAX_ROW; row++) { printf(" %d|", row); for (int col = 0; col < MAX_COL; col++) { printf("%c ", theMap[row][col]); } printf("
"); } }
3.updateShowMap()함 수 를 구축 하여 현재 입력 한(row,col)의 위치 에 따라 현재 위치 주위 에 몇 개의 천둥 이 있 는 지 계산 하고 쇼 맵 에 업데이트 합 니 다.

void updateShowMap(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) {
 //   (row, col)     ,      。
 continue;
 }
 if (mineMap[r][c] == '1') {
 count++;
 }
 }
 }
 //    count          (row, col )            。
 //         showMap    。
 //       count        ,  : count   2,       '2' (ASCII 50)
 showMap[row][col] = count + '0';
}
마지막 으로,우 리 는 아래 의 기능 함 수 를 통합 하면 우리 의 game()함 수 를 얻 을 수 있다.

void game() {
 // 1.         。(    )。
 char showMap[MAX_ROW][MAX_COL] = { 0 };
 char mineMap[MAX_ROW][MAX_COL] = { 0 };
 init(showMap, mineMap);
 int openedBlockCount = 0;
 while (1) {
 printMap(mineMap);
 printf("=================================
"); printMap(showMap); // 2. , 。 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; } // 3. . , GameOver。 if (mineMap[row][col] == '1') { printf("GameOver!
"); // , 。 printMap(mineMap); break; } // 4. , , 。 updateShowMap(showMap, mineMap, row, col); // 5. , // 。 openedBlockCount++; if (openedBlockCount == MAX_ROW * MAX_COL - DEFAULT_MINE_COUNT) { printf(" !
"); printMap(mineMap); break; } } }
캡 처 실행:
1.게임 시작:

2.좌표 불법 알림 입력:

3.좌표 위 치 를 입력 하면 펼 쳐 집 니 다.

4.게임 종료.

더 많은 재 미 있 는 클래식 게임 을 통 해 주 제 를 실현 하고 여러분 에 게 공유 합 니 다.
C++클래식 게임 모음
python 클래식 게임 모음
python 러시아 블록 게임 집합
JavaScript 클래식 게임 을 계속 합 니 다.
자바 클래식 게임 모음
javascript 고전 게임 모음
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기