C 언어 구현 천둥 제거 게임 상세 정보

본고의 실례는 여러분에게 C언어로 천둥 제거 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다.

하나.기능 구현


먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑판의 범위나 위치를 초과하기 전에 천둥을 제거했을 때 다시 입력하라는 메시지가 표시됩니다.사용자가 정확한 좌표를 입력할 때, 입력 위치에 천둥이 없으면 현재 위치 주변에 몇 개의 천둥이 있는지 표시하고, 모든 천둥을 찾아낸 후에 메뉴를 다시 표시합니다.입력한 위치에 천둥이 치면 게임이 끝나고 메뉴를 다시 표시합니다.

2.분석 및 소개


먼저 프로그램을 작성하기 전에 우리는 바둑판을 알 때 2차원을 알아야 하기 때문에 여기는 2차원 수조로 바둑판 상태를 저장해야 한다.여기에서 우리는 사용자에게 보여주는 바둑판, 컴퓨터가 무작위로 천둥을 치는 바둑판을 원하기 때문에 우리는 두 개의 2차원 그룹을 정의해야 한다.그리고 우리는 기능에 따라 한 걸음 한 걸음 프로그램을 작성하기만 하면 된다. 다음과 같다.

셋.코드 작성


우선 주 함수main()의 작성을 확정하고 주요 논리를 확정한다. 먼저 메뉴를 표시하여 사용자가 게임을 할지 안 할지 선택할 수 있도록 하고 다음에 사용자의 선택에 대해 게임을 할지 판단할 수 있다.코드 블록은 다음과 같습니다.

int main(){
 int quit = 0;    // 
 while (!quit){
 Menu();// 
 int select = 0;
 scanf("%d", &select);
 switch (select){   // switch 
  case 1:
   Game();   // 
   break;
  case 2:
   quit = 1;
   printf("Byebye
"); break; default: printf(" ,
"); break; } } return 0; }
메뉴 함수 Menu() 코드:

void Menu(){
 printf("#####################
"); printf("##1.Play 2.Exit##
"); printf("#####################
"); printf("Please input you select:"); }
사용자가 게임을 선택할 때 게임 () 함수는 주요 게임 논리의 작성이다. 먼저 바둑판을 초기화한 다음에 컴퓨터가 무작위로 천둥을 치고 바둑판을 보여줌으로써 사용자가 천둥을 제거하는 좌표값을 입력하도록 한다.이때 입력 좌표값이 바둑판의 범위를 초과했는지, 이미 천둥을 쓸었는지, 사용자가 입력한 좌표에 천둥이 있으면 게임이 끝난다.천둥이 없으면 주변 천둥의 개수를 계산해 표시하고 천둥을 쓸어버릴 때까지 위의 조작을 한다.

void Game(){
 srand((unsigned long)time(NULL));
 char show_board[LIN][COL];
 char mine_board[LIN][COL];
 //memset(show_board, '*', sizeof(show_board));
 //memset(mine_board, '0', sizeof(mine_board));// 
 Init_board(show_board, mine_board, LIN, COL);// 
 Mines_borad(mine_board, LIN, COL);// 
 int times = LIN*COL - MINE;// 
 do{
  
  Shows_board(show_board, LIN, COL);// 
  int x = 0;
  int y = 0;
  printf("please input <x,y>");
  scanf("%d %d", &x, &y);
  if (x<1 || x>10 || y<1 || y>10){
   printf(" , 
"); continue; } if (show_board[x][y] != '*'){ printf(" ,
"); continue; // , } if (mine_board[x][y] == '1'){ printf("game over!
"); Shows_board(mine_board, LIN, COL); // break; } int count = Count_game(mine_board, x, y); // show_board[x][y] = count+'0'; // '0' times--; system("cls"); } while (times>0); }
먼저 바둑판 초기화 Init_board (), 처음에 사용자에게 표시된 바둑판에'*'를 초기화하고,'0'을 천둥칠 바둑판에 초기화합니다.

void Init_board(char board1[][COL], char board2[][COL],int lin, int col){
 int i = 0;
 for (; i < lin; i++){
  int j = 0;
  for (; j < col; j++){     // , 。 *, 0  0->    1-> 
   board1[i][j] = '*';
   board2[i][j] = '0';
  }
 }
 
}
재컴퓨터 랜덤 매뢰Mines_borad(), 이때 랜덤 수 씨앗(Game 함수에 이미 심어진)을 이용하여 랜덤으로 바둑판 X, Y 좌표를 생성합니다. 만약에 매뢰 바둑판이 이 위치에 천둥이 없으면 문자'1'을 이 위치에 부여합니다.'0'문자는 천둥을 대표하고,'1'문자는 천둥을 대표한다.

void Mines_borad(char board[][COL], int lin, int col){
 int i = 0;
 while (i<MINE){  //MINE 
  int x = rand() % (lin - 2) + 1;
  int y = rand() % (col - 2) + 1;       // 
  if (board[x][y] == '0'){
   board[x][y] = '1';
   i++;
  }
 }
 
}
이후 바둑판을 Shows_board(), 지뢰 제거 좌표를 입력하라는 메시지를 표시합니다.뒤에 지뢰 제거 위치에 지뢰가 있으면 지뢰 묻기 바둑판을 보여 줍니다.

Shows_board(char board[][COL], int lin, int col){
 int i = 1;
 printf("   ");    // 
 for (; i < lin - 1; i++){
  printf("%d|", i);
 }
 printf("
"); for (i = 0; i < lin-4; i++){ printf("---"); } printf("
"); for (i = 1; i < lin - 1; i++){ printf("%2d|", i); int j = 1; for (; j < col - 1; j++){ printf("%c|", board[i][j]); } printf("
"); int k = 0; for (; k < col - 4; k++){ printf("---"); } printf("
"); } }
마지막으로 지뢰 제거 위치에 지뢰가 없으면 주변 지뢰의 개수를 사용자에게 표시해야 한다.계수 방식: 주위 문자를 모두 합쳐서 주위가 모두 문자'0'인 경우를 뺀다.'1'문자는 천둥이 있음을 나타내기 때문에,'1'문자는'0'문자와 ascll 만 1씩 차이가 나는데, 이 방법으로 상쇄한 후에 천둥 수를 얻었다.

int Count_game(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][y + 1] + board[x + 1][y - 1] + board[x + 1][y] + board[x + 1][y + 1] - 8 * '0';         // 
}
전체 코드는 위에서 말한 바와 같이 사용할 때 다중 파일 인코딩 방식 때문에 함수, 변수와 헤더 파일에 대한 설명이 필요하다.

#ifndef _GAME_H_
#define _GAME_H_
 
 
#include<stdio.h>
#include<time.h>
#include<string.h>
 
 
#define LIN 12   // , 10*10, 12*12 。
#define COL 12
#define MINE 20  // 
 
 
void Init_board(char board1[][COL], char board2[][COL], int lin, int col);
void Mines_borad(char board[][COL], int lin, int col);
void Shows_board(char board[][COL], int lin, int col);
int Count_game(char board[][COL], int lin, int col);
void Game();
 
 
#endif
이로써 C 언어로 작성된 지뢰 제거 코드로 끝났습니다. 응용하고 싶으면 됩니다. 결함이 있으면 많은 비판을 바랍니다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기