C 언어 지뢰 제거 게임(다 중 파일)

본 논문 의 사례 는 C 언어 가 지뢰 제거 게임 을 실현 하 는 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
게임 기능:
① 뇌 판 인쇄
② 랜 덤 브 레
③ 첫 번 째 지뢰 는 밟 아 도 죽지 않 는 다(리 브 레)
④ 확장 식 지뢰 제거
⑤ 주변 천둥 의 개 수 를 계산한다.
코드 포인트:
① 게임 을 하 는 뇌 판 은 실제 정 의 된 배열 보다 작다.
② memset 에서 배열 초기 화(바이트 단위 로 초기 화).
③ rand 함 수 는 뇌 판 에 랜 덤 위치 브 레(Sand 로 랜 덤 피 드 설정)를 줍 니 다.
④ 첫 번 째 단계 에서 천둥 을 밟 고 이 천둥 을 치 워 게이머 에 게 기 회 를 준다.
⑤ 지뢰 를 밟 은 후 상황 에 따라 확장 식 지뢰 배출 여 부 를 결정 한다.
⑥ 지뢰 배출 위치 주변 지뢰 의 개 수 를 되 돌려 주 고,지뢰 의 수량 에 따라 확장 지뢰 배출 여 부 를 결정 한다.
⑦ 입력 한 좌표 주변 에 천둥 이 치면 확장 식 천둥 을 치지 않 고 그 위치 에서 천둥 의 개 수 를 출력 한다.
⑨ 입력 한 좌표 주변 에 천둥 이 없 으 며 확장 식 지뢰 를 배출한다.
⑨ 확장 식 배 뢰 함수 의 형 삼 과 함수 재 귀 가 형 삼 에 미 친 영향 에 주의 하 세 요.
『9321』함수 재 귀 를 진행 하 는 판단 조건 에 주의 하 세 요.
1.game.h

#ifndef __GAME_H__
#define __GAME_H__

#define COLS 11
#define ROWS 11
#define MAX 10

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>

void Display(char arr[COLS][ROWS], int col, int row);
void set_mine(char mine[COLS][ROWS], int col, int row);
int get_mine_count(char mine[COLS][ROWS],int x,int y);
void reset_mine(char mine[COLS][ROWS], int col, int row, int x, int y);
void extend(char mine[COLS][ROWS], int x, int y, int* win, char show[COLS][ROWS]);

#endif //__GAME_H__
2.game.c

#include "game.h"

void Display(char arr[COLS][ROWS], int col, int row) //    
{
  int i = 0;
  int j = 0;
  printf(" ");
  for (i = 1; i < col-1; ++i) //         
  {
    printf("%2d ", i);
  }

  printf("
"); for (i = 1; i < col - 1; ++i) { printf("%d", i); // for (j = 1; j < row - 1; ++j) { printf("%2c ", arr[i][j]); } printf("
"); } } void set_mine(char mine[COLS][ROWS], int col, int row) // { int count = MAX; while (count) { int i = rand() % (col - 2) + 1; int j = rand() % (row - 2) + 1; if (mine[i][j] != '1') { mine[i][j] = '1'; count--; } } } void reset_mine(char mine[COLS][ROWS], int col, int row, int x, int y) // { mine[x][y] = '0'; int count = 1; while (count) { int i = rand() % (col - 2) + 1; int j = rand() % (row - 2) + 1; if ((mine[i][j] != '1') && (i != x) && (j != y)) { mine[i][j] = '1'; count--; } } } int get_mine_count(char mine[COLS][ROWS], int x, int y) // (x,y) int { return mine[x+1][y ] + mine[x+1][y-1] + mine[x ][y-1] + mine[x-1][y-1] + mine[x-1][y ] + mine[x-1][y+1] + mine[x ][y+1] + mine[x+1][y+1] -8 * '0'; } void extend(char mine[COLS][ROWS], int x, int y, int* win, char show[COLS][ROWS]) // { int i = -1; int j = -1; for (i = -1; i < 2; ++i) { for (j = -1; j < 2; ++j) { if ((i != 0) || (j != 0)) { if (x + i >= 1 && x + i <= COLS-2 && y + j >= 1 && y + j <= ROWS-2) { if (show[x + i][y + j] == '*') { int count = get_mine_count(mine, x + i, y + j); if (count != 0) { show[x + i][y + j] = count + '0'; (*win)++; } else if (0 == count) { show[x + i][y + j] = '0'; (*win)++; extend(mine, x + i, y + j, win, show); } } } } } } }
3.test.c

#include "game.h"


void game()
{
  int x = 0;
  int y = 0;
  int win = 0;  //           
  srand((unsigned int)time(NULL));       //     
  char mine[COLS][ROWS] = { '0' };
  memset(mine, '0', COLS*ROWS*sizeof(mine[0][0])); //  memset               ‘0'

  char show[COLS][ROWS] = { '0' };
  memset(show, '*', COLS*ROWS*sizeof(show[0][0]));  //               ‘*'
  Display(show,COLS,ROWS);

  printf("
"); set_mine(mine, COLS, ROWS); // , MIX Display(mine, COLS, ROWS); while ( win<( (COLS-2)*(ROWS-2)-MAX ) ) // { printf(" :"); scanf_s("%d%d", &x, &y); if ((x >= 1) && (x <= COLS-2) && (y >= 1) && (y <= ROWS-2)) { if (show[x][y] == '*') { if (mine[x][y] == '1') { if (0 == win) // , , { reset_mine(mine,COLS,ROWS,x,y); int count = get_mine_count(mine, x, y); if (count != 0) // , { show[x][y] = count + '0'; win++; system("cls"); Display(show, COLS, ROWS); } else { show[x][y] = '0'; win++; extend(mine, x, y, &win, show); system("cls"); Display(show, COLS, ROWS); } } else { printf(" , !
"); // , Display(mine, COLS, ROWS); break; } } else { int count = get_mine_count(mine, x, y); if (count != 0) // , { show[x][y] = count + '0'; win++; system("cls"); Display(show, COLS, ROWS); } else { show[x][y] = '0'; win++; extend(mine, x, y, &win, show); system("cls"); Display(show, COLS, ROWS); } } } else { printf(" ,
"); } } else { printf(" ,
"); } } if (win == ((COLS - 2)*(ROWS - 2)) - MAX) { printf(" ,
"); Display(mine, COLS, ROWS); } } void menu() { printf("*******************************
"); printf("***** 1. play 2. exit*****
"); printf("*******************************
"); } void test() { do { menu(); int input = 0; printf(" :"); scanf_s("%d", &input); switch (input) { case 1: game(); break; case 2: exit(0); break; default: printf("
"); break; } } while (1); } int main() { test(); }
지뢰 해제 에 성공 하 다.

지뢰 해제 실패

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

좋은 웹페이지 즐겨찾기