C 언어 는 간이 판 지뢰 제거 게임 을 실현 한다.

본 논문 의 사례 는 C 언어 가 간단 한 지뢰 제거 의 구체 적 인 코드 를 공유 하여 여러분 께 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
성명
이번 지뢰 제거 게임 은 여러 파일 로 작 성 됩 니 다.우선,사용자 정의 헤더 파일 mine.h,지뢰 제거 프로그램 에 필요 한 헤더 파일,상수,모든 함수 에 대한 설명 이 있 습 니 다.그 다음 에 주 함수 test.c 를 만 들 고 자신 이 좋아 하 는 방식 으로 게임 의 프레임 워 크 를 구축 합 니 다.마지막 으로 사용자 정의 함수 mine.c 를 만 들 고 각종 기능 을 작성 합 니 다.
디자인 아이디어
1.먼저 주 함 수 를 쓰 고 전체 게임 절 차 를 정리한다.

int main()
{
 int quit = 0;
 do{
 int select = 0;
 Menu();
 scanf("%d", &select);
 switch (select){
 case 1:
 Game();
 printf("Game Over ... Again?
"); break; case 2: quit = 1; printf("Bye ...
"); break; default: printf("Error ... Please Select Again!
"); break; } } while (!quit); system("pause"); return 0; }
2.주 함수 의 수요 에 따라 먼저 메뉴 함수 Menu()를 작성 합 니 다.이 함 수 는 간단 합 니 다.printf 만 있 으 면 됩 니 다.메뉴 의 모양 도 자체 적 으로 디자인 합 니 다.

static void Menu()
{
 printf("===========================
"); printf("| |
"); printf("| 1.Play |
"); printf("| 2.Exit |
"); printf("===========================
"); printf(" Please Select:"); }
3.Game()함 수 를 작성 합 니 다.이 함수 에서 우 리 는 지뢰 제거 게임 의 모든 내용 을 실현 할 것 입 니 다.마찬가지 로 이 함수 에 먼저 큰 프레임 워 크 를 쓰 고 필요 한 함 수 를 구축 한 다음 에 우리 의 수요 에 따라 mine.c 에서 우리 가 필요 로 하 는 모든 사용자 정의 함 수 를 설계 합 니 다.

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

 char board[ROW][COL];
 char mine[ROW][COL];

 InitBoard(board, ROW, COL, ' '); //' '
 InitBoard(mine, ROW, COL, '0'); //'0'

 SetMine(mine, ROW, COL);
 //ShowBoard(board, ROW, COL);
 //ShowBoard(mine, ROW, COL);

 int count = (ROW - 2)*(COL - 2) - NUM;
 do{
 system("cls");
 int x = 0;
 int y = 0;
 ShowBoard(board, ROW, COL);
 printf("         -> ");
 scanf("%d %d", &x, &y);
 if (x < 1 || x > 10 || y < 1 || y > 10){//[1,10]
 printf("          ,     ...
"); Sleep(1000); continue; } if (board[x][y] != ' '){ printf(" , ...
"); Sleep(1000); continue; } if (mine[x][y] == '0'){ count--; char num = GetNum(mine, x, y); board[x][y] = num; } else{ printf(" (%d, %d), !
", x, y); break; } } while (count > 0); char *result = NULL; if (count > 0){ result = "** , ! **
"; } else{ result = "** , , ! **
"; } printf("-------------------------------
"); printf("%s", result); printf("-------------------------------
"); ShowBoard(mine, ROW, COL); }
4.뇌 판 을 만 들 려 면 뇌 판 스 캔 을 기록 해 야 합 니 다.지뢰 해제 판 넬 은 정 의 된 매크로 를 통 해 크기 를 정의 합 니 다.주의해 야 할 것 은 특정한 좌표 주위 에 지뢰 가 몇 개 있 는 지 계산 할 때 그의 주위 8 개의 칸 을 스 캔 해 야 하기 때문에 2 차원 배열 에 한 바퀴 더 정의 하여 내부 와 같은'0'으로 초기 화 시 켜 스 캔 할 때 그 칸 을 포함 하지 않 는 다 는 것 이다.

void InitBoard(char board[][COL], int row, int col, char elem)
{
 int i = 0;
 for (; i < row; i++){
 int j = 0;
 for (; j < col; j++){
 board[i][j] = elem;
 }
 }
}

void ShowBoard(char board[][COL], int row, int col)
{
 int i = 1;
 printf(" ");
 for (; i <= col - 2; i++){
 printf(" %-2d|", i);
 }
 printf("
"); for (i = 1; i <= col - 2; i++){ printf("%3s", "----"); } printf("---
"); for (i = 1; i <= row - 2; i++){ printf("%2d|", i); int j = 1; for (; j <= col - 2; j++){ printf(" %-2c|", board[i][j]); } printf("
"); for (j = 1; j <= col - 2; j++){ printf("%3s", "----"); } printf("---
"); } } char GetNum(char mine[][COL], int x, int y) { return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + \ mine[x][y - 1] + mine[x][y + 1] + \ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 7 * '0'; }
5.마지막 으로 우 리 는 함 수 를 하나 가지 고 랜 덤 으로 지뢰 의 위 치 를 배치 해 야 한다.그러면 SetMine 함수 가 있다.

void SetMine(char mine[][COL], int row, int col)
{
 int n = NUM;
 while (n){
 int x = rand() % (row - 2) + 1;
 int y = rand() % (col - 2) + 1;
 if (mine[x][y] == '1'){
 continue;
 }

 mine[x][y] = '1';
 n--;
 }
}
랜 덤 이기 때문에 rand()라 이브 러 리 함수 가 필요 하지만 rand 를 호출 하기 전에 Game()에 한 마디 써 야 합 니 다.

srand((unsigned long)time(NULL));
소스 코드
mine.h

#ifndef _MINE_H_
#define _MINE_H_

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

#pragma warning(disable:4996)

#define ROW 10
#define COL 10

#define NUM 10

void Game();
void InitBoard(char board[][COL], int row, int col, char elem);
void SetMine(char mine[][COL], int row, int col);
void ShowBoard(char board[][COL], int row, int col);
char GetNum(char mine[][COL], int x, int y); 

#endif
mine.c

#include "mine.h"

void InitBoard(char board[][COL], int row, int col, char elem)
{
 int i = 0;
 for (; i < row; i++){
 int j = 0;
 for (; j < col; j++){
 board[i][j] = elem;
 }
 }
}
void SetMine(char mine[][COL], int row, int col)
{
 int n = NUM;
 while (n){
 int x = rand() % (row - 2) + 1;
 int y = rand() % (col - 2) + 1;
 if (mine[x][y] == '1'){
 continue;
 }

 mine[x][y] = '1';
 n--;
 }
}
void ShowBoard(char board[][COL], int row, int col)
{
 int i = 1;
 printf(" ");
 for (; i <= col - 2; i++){
 printf(" %-2d|", i);
 }
 printf("
"); for (i = 1; i <= col - 2; i++){ printf("%3s", "----"); } printf("---
"); for (i = 1; i <= row - 2; i++){ printf("%2d|", i); int j = 1; for (; j <= col - 2; j++){ printf(" %-2c|", board[i][j]); } printf("
"); for (j = 1; j <= col - 2; j++){ printf("%3s", "----"); } printf("---
"); } } char GetNum(char mine[][COL], int x, int y) { return mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1] + \ mine[x][y - 1] + mine[x][y + 1] + \ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] - 7 * '0'; } void Game() { srand((unsigned long)time(NULL)); char board[ROW][COL]; char mine[ROW][COL]; InitBoard(board, ROW, COL, ' '); //' ' InitBoard(mine, ROW, COL, '0'); //'0' SetMine(mine, ROW, COL); //ShowBoard(board, ROW, COL); //ShowBoard(mine, ROW, COL); int count = (ROW - 2)*(COL - 2) - NUM; do{ system("cls"); int x = 0; int y = 0; ShowBoard(board, ROW, COL); printf(" -> "); scanf("%d %d", &x, &y); if (x < 1 || x > 10 || y < 1 || y > 10){//[1,10] printf(" , ...
"); Sleep(1000); continue; } if (board[x][y] != ' '){ printf(" , ...
"); Sleep(1000); continue; } if (mine[x][y] == '0'){ count--; char num = GetNum(mine, x, y); board[x][y] = num; } else{ printf(" (%d, %d), !
", x, y); break; } } while (count > 0); char *result = NULL; if (count > 0){ result = "** , ! **
"; } else{ result = "** , , ! **
"; } printf("-------------------------------
"); printf("%s", result); printf("-------------------------------
"); ShowBoard(mine, ROW, COL); }
test.c

#include "mine.h"

static void Menu()
{
 printf("===========================
"); printf("| |
"); printf("| 1.Play |
"); printf("| 2.Exit |
"); printf("===========================
"); printf(" Please Select:"); } int main() { int quit = 0; do{ int select = 0; Menu(); scanf("%d", &select); switch (select){ case 1: Game(); printf("Game Over ... Again?
"); break; case 2: quit = 1; printf("Bye ...
"); break; default: printf("Error ... Please Select Again!
"); break; } } while (!quit); system("pause"); return 0; }
총결산
전체적으로 말 하면 코드 를 작성 할 때 뚜렷 한 사고방식 을 가지 고 프레임 워 크 를 구축 하고 그 세부 사항 을 세분 화하 고 필요 한 것 을 작성 해 야 한다.코드 는 간단 하지만 클래식 합 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.
더 많은 재 미 있 는 클래식 게임 을 통 해 주 제 를 실현 하고 여러분 에 게 공유 합 니 다.
C++클래식 게임 모음
python 클래식 게임 모음
python 러시아 블록 게임 집합
JavaScript 클래식 게임 을 계속 합 니 다.
자바 클래식 게임 모음
javascript 고전 게임 모음
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기