소코반 게임 질문입니다
조회수 487회
#include <Turboc.h>
#include <conio.h>
#include <ctype.h>
void DRAWSCREEN();
void MOVEDOLL(int ch);
#define MAXSTAGE 3//전체 맵 수
#define RIGHT 77
#define LEFT 75
#define UP 72
#define DOWN 80
int x, y;
int nx, ny;//현재의 x,y좌표
int nstage;//현재의 스테이지
char arstage[18][21];//각 스테이지를 복사할 배열
int nmove;//움직인 총 횟수
char ARSTAGE[MAXSTAGE][18][21] = {
{
"####################",
"####################",
"####################",
"##### ############",
"#####O ############",
"##### O############",
"### O O ###########",
"### # ## ###########",
"# # ## ##### ..##",
"# O O @ ..##",
"##### ### # ## ..##",
"##### ##########",
"####################",
"####################",
"####################",
"####################",
"####################",
"####################"
},
{
"####################",
"####################",
"####################",
"####################",
"####.. # ######",
"####.. # O O ####",
"####.. #O#### ####",
"####.. @ ## ####",
"####.. # # O #####",
"######### ##O O ####",
"###### O O O O ####",
"###### # ####",
"####################",
"####################",
"####################",
"####################",
"####################",
"####################"
},
{
"####################",
"####################",
"####################",
"####################",
"########## @####",
"########## O#O #####",
"########## O O#####",
"###########O O #####",
"########## O # #####",
"##.... ## O O ###",
"###... O O ###",
"##.... ############",
"####################",
"####################",
"####################",
"####################",
"####################",
"####################"
},
};
int main() {
int ch;
nstage = 0;
nmove = 0;
for (;;) {
memcpy(arstage, ARSTAGE[nstage], sizeof(arstage));
for (y = 0; y < 18; y++) {
for (x = 0; x < 21; x++) {
if (arstage[y][x] == '@') {
nx = x;
ny = y;
}
}
}
for (; 2;) {
clrscr();
DRAWSCREEN();
ch = _getch();
if (ch == 0 || ch == 0xE0) {
ch = _getch();
MOVEDOLL(ch);
}
else {
ch = tolower(ch);
if (ch == 'n') {
if (nstage < MAXSTAGE - 1) {
nstage++;
break;
}
}
else if (ch == 'p') {
if (nstage > 0) {
nstage--;
break;
}
}
else if (ch == 'q') {
exit(0);
}
}
}
}
}
void DRAWSCREEN() {
for (y = 0; y < 18; y++, puts("")) {
for (x = 0; x < 21; x++) {
_putch(arstage[y][x]);
}
}
gotoxy(40, 5);
printf("종료 하실려면 q");
gotoxy(40, 7);
printf("다음 스테이지 n 이전 스테이지 p");
gotoxy(40, 9);
printf("총 이동 횟수 : %d\n", nmove);
}
void MOVEDOLL(int ch) {
int dx = 0, dy = 0;
switch (ch) {
case RIGHT:
dx += 1;
break;
case LEFT:
dx -= 1;
break;
case UP:
dy -= 1;
break;
case DOWN:
dy += 1;
break;
}
if (arstage[ny + dy][nx + dx] != '#') {
if (arstage[ny + dy][nx + dx] == ' ' || arstage[ny + dy][nx + dx] == '.') {
arstage[ny + dy][nx + dx] = '@';
arstage[ny][nx] = ' ';
}
else if (arstage[ny + dy][nx + dx] == 'O'&&arstage[ny+dy*2][nx+dx*2]!='O') {
if (arstage[ny + dy * 2][nx + dx * 2] == '.' || arstage[ny + dy * 2][nx + dx * 2] == ' ') {
arstage[ny + dy * 2][nx + dx * 2] = 'O';
arstage[ny + dy][nx + dx] = '@';
arstage[ny][nx] = ' ';
}
}
if (ARSTAGE[nstage][ny][nx] == '.' && arstage[ny][nx] == ' ') {
arstage[ny][nx] = '.';
}
nx += dx;
ny += dy;
nmove++;
}
}
처음으로 만들어본 게임이라 정말 이상하지만 혼자서 해결을 못하겠어서 질문드립니다
아마도 문제가
MOVEDOLL()
함수에서인것 같은데
예를들어서 (VC++에서 만들었어요) 실행을 해보면 OO@ 이러한 상황에서(@ 이아이가 말) 원래는 못움직여야 정상인데 말이 뚫고 지나가버리네요 조건문은 나름 잘 짯다고 생각했었는데... 다시봐도 어디서 오류가 난건지 못찾겠습니다 ㅠ
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
댓글 입력