C 언어 지뢰 제거 게임 실현(주석 상세 설명 포함)
8813 단어 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("########################
");
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.