C 언어 는 간이 판 지뢰 제거 게임 을 실현 한다.
10650 단어 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 고전 게임 모음
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 구현 천둥 제거 게임 상세 정보먼저 작은 메뉴를 표시하고 게임을 할지 여부를 선택하십시오.사용자가 종료를 선택하면 프로그램 실행이 끝나고, 사용자가 게임을 선택하면 지뢰 제거 위치 좌표를 입력하라는 메시지가 표시됩니다.사용자가 입력한 좌표가 바둑...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.