C 언어 지뢰 해제 고전 게임 실현
5397 단어 C 언어지뢰 를 제거 하 다
지뢰 해제 게임 을 실현 하 다.
삼자 기 게임 과 유사 하여 후기 에 코드 에 대한 읽 기,이해 와 지도 크기 와 지뢰 의 수량 변경 을 편리 하 게 하기 위해 먼저\#define 으로 식별 자 를 정의 하여 상수(지도의 크기,지뢰 의 개수 등)를 표시 합 니 다.
#define MAX_ROW 9
#define MAX_COL 9
#define mineNumber 10
게임 생 성 절차1.맵 만 들 기
여기 서 쇼 맵 은 게이머 들 에 게 보 여 주 는 지 도 를 표시 합 니 다.mineMap 은 지뢰 를 저장 하 는 지 도 를 표시 합 니 다(게이머 들 에 게 보 여주 지 않 고 게이머 들 이 지뢰 를 밟 았 는 지,그리고 게이머 들 이 선택 한 위치 주변 에 지뢰 가 얼마나 있 는 지 후기 판단 하 는 데 사 용 됩 니 다).
char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };
2.지도 초기 화코드 내용 에서 보 듯 이 memset 에 사용 되 었 습 니 다.메모리 에 있 는 모든 바이트 를 구체 적 인 값 으로 설정 합 니 다.
void init(char showMap[MAX_ROW][MAX_COL],
char mineMap[MAX_ROW][MAX_COL]) {
// showMap '*'
// ( )
/*for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
showMap[row][col] = '*';
}
}*/
// (memset , string.h)
//memset:
//memset(' ', ' ', ' ')
memset(showMap, '*', MAX_ROW*MAX_COL);
memset(mineMap, '0', MAX_ROW*MAX_COL);
// ,
srand((unsigned int)time(0));
int mineCount = 0; //
while (mineCount < mineNumber) {
//
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
//
if (mineMap[row][col] == '1') {
continue;
}
mineMap[row][col] = '1';
//
mineCount++;
}
}
3.지도 인쇄
void print(char theMap[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", theMap[row][col]);
}
printf("
");
}
}
4.플레이어 가 펼 쳐 야 할 위 치 를 선택이 부분 에서:
(1)유 저 는 펼 치고 싶 은 위치(row col)를 입력 합 니 다.
(2)합 법성 판정 을 실시한다.게이머 가 입력 한 좌표 가 규범 에 부합 되 는 지 판단 한다.
(3)현재 위치 가 펼 쳐 졌 는 지 판단 하기;
(4)현재 위치 에 뇌 가 있 는 지 판단:즉,유저 의 아웃 여 부 를 판단 합 니 다.
// ,
int row = 0;
int col = 0;
printf(" (row col):");
scanf("%d %d", &row, &col);
//
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
printf(" , :
");
continue;
}
// ( '*')
if (showMap[row][col] != '*') {
printf(" , !
");
continue;
}
//
if (mineMap[row][col] == '1') {
printf(" , !");
break;
}
5.지도 업데이트여기 서,우 리 는 유저 가 입력 한 내용 에 따라 지도(showMap)를 업데이트 해 야 합 니 다.포함:
(1)주변 지뢰 수량 계산
위의 그림 에서 보 듯 이 중심 위치(row,col)는 게이머 들 이 선택 한 위치 이 고 주변의 위 치 는 위의 그림 에서 보 듯 이 그들의 좌 표를 표시 할 수 있다.주변 에 지뢰 개수 가 얼마나 있 는 지 를 집계 해 야 하기 때문에 순환 을 통 해 주변 위치 에 저 장 된 내용 을 판단 할 수 있다.
또한 순환 과정 에서 좌 표 는 경 계 를 넘 지 않 고 이 3*3 의 범 위 를 초과 해 서 는 안 된다 는 것 을 주의해 야 한다.(중간 유저 의 위 치 는 건 너 뛰 어야 합 니 다).
// showMap, 0 ,
void update(char showMap[MAX_ROW][MAX_COL],
char mineMap[MAX_ROW][MAX_COL], int row, int col) {
//
int count = 0;
for (int r = row - 1; r <= row + 1; r++) {
for (int c = col - 1; c <= col + 1; c++) {
//
if (r < 0 || r >= MAX_ROW || c < 0 || c >= MAX_COL) {
continue;
}
//
if (r == row && c == col) {
continue;
}
// '1' , +1
if (mineMap[r][c] == '1') {
count++;
}
}
}
//showMap[row][col] char ,count int ,
// C ,
//'0' ASCII 48, '1','2'...
// ,
showMap[row][col] = '0' + count;
}
마지막 으로 이 showMap[row][col]='0'+count;주의 가 필요 하 다.우리 의 목적 은 주위 지뢰 의 수량 을 유저 가 선택 한 위치(row,col)에 할당 하 는 것 이기 때문에 우 리 는 그들 간 의 연관 성 을 고려 해 야 한다.
(row,col)은 char 형 이 고 count 는 int 형 입 니 다.직접 값 을 부여 할 수 없 을 것 입 니 다.그러나 C 언어 에서 우 리 는 위 에서 쓴 방식 으로 값 을 부여 할 수 있 습 니 다(row,col).
ASCII 에서'0'의 10 진 수 는 48,'0'다음 에 한 번 은 문자 형의'1','2',...............................................................
(주:이런 할당 방식 은 C 언어 에서 만 가능 하고 다른 언어 는 안 됩 니 다)
6.승 부 를 판정한다
유저 가 이미 모든 위 치 를 펼 쳤 는 지 판단:
(1)모든 위 치 를 펼 쳤 습 니 다:승 리 를 판정 하고 절차 가 끝 났 습 니 다.
(2)모든 위 치 를 완전히 펼 치지 않 음:순환 고리 2-6.
//openedCount 。
if (openedCount == MAX_ROW * MAX_COL - mineNumber) {
printf(" , !");
break;
}
이상 은 아마 내 가 지뢰 제거 게임 의 사고,코드 와 주의해 야 할 점 을 쓰 고 있 는 것 이다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.