C 언어 지뢰 제거 게임 실현(주석 상세 설명 포함)

본 논문 의 사례 는 C 언어 가 지뢰 제거 게임 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
머리말
1.게임 규칙 소개
지뢰 를 제거 하 는 것 은 매우 전형 적 인 게임 이다.바둑판 에는 천둥 인지 안전 구역 인지 확실 하지 않 은 칸 이 많다.클릭 한 후에 천둥 이 없 으 면 이 구역 에 주변 8 개의 격자 천둥 의 수 를 표시 하고 천둥 이 있 으 면 게임 이 끝난다.오늘 은 c 언어 로 1 단계 지뢰 제거 하 는 방법 을 여러분 과 공유 하 겠 습 니 다.
2.기본 적 인 사고 절차 소개
1.사용자 대화 메뉴 만 들 기
2.쇼 만 들 기Mines 바둑판 은 천둥 을 묻 고 초기 화 하 는 데 쓰 인 다.
3.쇼 만 들 기Table 바둑판 은 사용자 와 대화 하고 초기 화 하 는 데 사 용 됩 니 다.
4.유저 가 검색 하고 싶 은 좌 표를 선택
5.게임 종료 여부 판정
6.지뢰 를 밟 지 않 으 면 방금 스 캔 한 구역 에 주변 8 개 구역 의 지뢰 수 를 표시 하고 게임 을 계속 합 니 다.
7.계속 지뢰 해제
8.게임 종료 여부 판정

9.비 뇌 영역 을 모두 스 캔 하면 게임 종료
효과 전시




3.코드 구현
1.사용자 대화 메뉴(Menu 함수)

Menu(){
 printf("########################
"); printf("# 1. Play 0.Exit #
"); printf("########################
"); }
2.게임 함수

void Game()
{
 srand((unsigned long)time(NULL)); //       

 char show_board[ROW][COL];   
 char mines_board[ROW][COL];

 memset(show_board, WHAT, sizeof(show_board));//             
 memset(mines_board, '0', sizeof(mines_board));//           

 SetMines(mines_board, ROW, COL);//  

 int count = (ROW - 2)*(COL - 2) - NUM;    //             

 while (count){
  system("cls");
  ShowBoard(show_board, ROW, COL);
  printf("             ");
  int x = 0;
  int y = 0;
  scanf("%d %d", &x, &y);
  if (x < 1 || x > ROW-2 || y < 1 || y > COL-2){ //       
   printf("    !
"); continue; } if (show_board[x][y] != WHAT){ printf(" ,
"); continue; } if (mines_board[x][y] == '1'){ system("cls"); ShowBoard(mines_board, ROW, COL); printf(" ! !
"); break; } show_board[x][y] = CountMines(mines_board, x, y); count--; } }
1.memset 함수 직접 정의 showboard 함수 와 2 차원 배열 을 전체 WHAT 매크로 정의*로 초기 화 합 니 다.
2.먼저 사용자 에 게 바둑판 을 보 여주 고 사용 자 는 좌 표를 입력 하여 불법 적 인 판단 을 한다.
3.사용자 가 입력 한 좌 표를 뇌 가 놓 인 바둑판 에 가 져 다 주 고,이 구역 에 뇌 가 있 으 면 게임 이 끝나 고,반대로 계속
4.게임 승리 조건 은 모든 비 뇌 영역 을 스 캔 하 는 것 입 니 다.
3.방 뢰 함수(SetMines 함수)

void SetMines(char board[][COL], int row, int col){ //    
 int count = NUM;
 while (count){
  int x = rand() % (row - 2) + 1;
  int y = rand() % (col - 2) + 1;
  if (board[x][y] == '0'){
   board[x][y] = '1';
   count--;
  }
 }
}
랜 덤 피 드 를 사용 하여 1 부터 바둑판 크기 의 너비-2 의 랜 덤 수 를 생 성 합 니 다.이 랜 덤 수 로 구 성 된 좌 표 는 천둥 을 치 며 순환 횟수 는 천둥 의 숫자 입 니 다.난수 가 똑 같이 생 성 될 수 있 기 때문에 불법 적 인 판단 을 해 야 바둑판 이라는 위치 에 천둥 이 없 을 때 만 천둥 을 칠 수 있다.
4.지뢰 해제 전시 패 널(Showboard 함수 와 ShowLine 함수)

void ShowBoard(char board[][COL], int row, int col){//      
 printf("     ");
 for (int i = 1; i <= (col - 2); i++){  //      
  printf("%d   ", i);
 }
 printf("
"); ShowLine(col);// for (int i = 1; i <= (row - 2); i++){ printf("%-3d|", i); for (int j = 1; j <= (col - 2); j++){ printf(" %c |", board[i][j]); } printf("
"); ShowLine(col); } } void ShowLine(int col){ // , for (int i = 0; i <= (col - 2); i++){ printf("----"); } printf("
"); }
5.주변 뇌 개수 집계(CountMines 함수)

CountMines(char board[][COL], int x, int y){ //        
 return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + \
  board[x][y + 1] + board[x + 1][y + 1] + board[x + 1][y] + \
  board[x + 1][y - 1] + board[x][y - 1] - 7 * '0';//      ,          ‘0'
}
배열 에 저 장 된 것 은 문자'0'이 고 주변 은 8 개의 숫자 이기 때문에-8*'0'은 뇌 수의 int 값 을 되 돌려 줄 수 있 습 니 다.숫자 도 인쇄 할 수 있 기 때문에+'0'입 니 다.그렇지 않 으 면 숫자 로 된 ASCLL 코드 의 값 을 인쇄 할 수 있 습 니 다.최종 결 과 는-7*'0'입 니 다.
6.mine 함수

int main()
{
 int quit = 0;
 int select = 0;
 while (!quit){
  Menu();
  printf("    ");
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   break;
  case 0:
   quit = 1;
   break;
  default:
   printf("    ,   !
"); break; } } printf("byebye!
"); system("pause"); return 0; }
총 코드

#ifndef __Test_H__
#define __Test_H__

#include<stdio.h>
#include<Windows.h>
#include <stdlib.h>
#include <time.h>
#define WHAT '*'
#define NUM  20
#define COL  10
#define ROW  10
void Game();
#pragma warning(disable:4996)
#endif       //       

int main()
{
 int quit = 0;
 int select = 0;
 while (!quit){
  Menu();
  printf("    ");
  scanf("%d", &select);
  switch (select){
  case 1:
   Game();
   break;
  case 0:
   quit = 1;
   break;
  default:
   printf("    ,   !
"); break; } } printf("byebye!
"); system("pause"); return 0; } void Game() { srand((unsigned long)time(NULL)); // char show_board[ROW][COL]; char mines_board[ROW][COL]; memset(show_board, WHAT, sizeof(show_board)); memset(mines_board, '0', sizeof(mines_board)); SetMines(mines_board, ROW, COL); int count = (ROW - 2)*(COL - 2) - NUM; // while (count){ system("cls"); ShowBoard(show_board, ROW, COL); printf(" "); int x = 0; int y = 0; scanf("%d %d", &x, &y); if (x < 1 || x > ROW-2 || y < 1 || y > COL-2){ // printf(" !
"); continue; } if (show_board[x][y] != WHAT){ printf(" ,
"); continue; } if (mines_board[x][y] == '1'){ system("cls"); ShowBoard(mines_board, ROW, COL); printf(" ! !
"); break; } show_board[x][y] = CountMines(mines_board, x, y); count--; } } CountMines(char board[][COL], int x, int y){ // return board[x - 1][y - 1] + board[x - 1][y] + board[x - 1][y + 1] + \ board[x][y + 1] + board[x + 1][y + 1] + board[x + 1][y] + \ board[x + 1][y - 1] + board[x][y - 1] - 7 * '0';// , ‘0' } void ShowBoard(char board[][COL], int row, int col){// printf(" "); for (int i = 1; i <= (col - 2); i++){ printf("%d ", i); } printf("
"); ShowLine(col);// for (int i = 1; i <= (row - 2); i++){ printf("%-3d|", i); for (int j = 1; j <= (col - 2); j++){ printf(" %c |", board[i][j]); } printf("
"); ShowLine(col); } } oid SetMines(char board[][COL], int row, int col){ // int count = NUM; while (count){ int x = rand() % (row - 2) + 1; int y = rand() % (col - 2) + 1; if (board[x][y] == '0'){ board[x][y] = '1'; count--; } } } void ShowLine(int col){ for (int i = 0; i <= (col - 2); i++){ printf("----"); } printf("
"); } Menu(){ // printf("########################
"); printf("# 1. Play 0.Exit #
"); printf("########################
"); }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기