탈출 게임 구현 실습
1. 10*10 크기의 맵을 만든다 (2차원 배열)
2. (0,0) 위치에 플레이어(O)가 존재한다
3. 탈출지점(E)이 존재하며, 탈출지점은 (0,0)을 제외한 나머지에 랜덤으로 뜨게한다
4. WASD 키입력을 통해 플레이어를 이동시킨다
5. O가 E에 도달하면 "탈출에 성공했습니다" 후 프로그램 종료
system("cls"); 를 사용하면 system("cls") 전에 콘솔창에 출력되어 있던것을 전부 지워준다
먼저 std:: 를 생략하기 위해 맨 위에 using namespace std; 사용
1. 10*10 크기의 맵을 만든다 (2차원 배열)
맵에 #을 가로로10개, 이를 세로 10줄로 만들 목적이기 때문에 상단에 문자형 변수인 char를 선언, char map [10][10] 의 공간을 설정해준다
for 반복문을 사용하여 가로로 #이 10개 입력되면 줄바꿈 후 다시 가로로 #이 10개, 총 10회 반복되는 코드를 짰고
이를 map[10][10] 의 공간에 #이 각각 입력되게 하였다 ( map[length][width] (0,1)일때 세로로0칸 가로로 1칸이고 싶기때문에 가로를 뒤쪽으로 배치)
2. (0,0) 위치에 플레이어(O)가 존재한다
int player_width , int player_length 를 각각 선언하여 플레이어의 가로, 세로 좌표를 (0,0) 으로 설정하고
map 배열에 넣었고 이를 맵 반복문(#)이 설정된 후 설정되게 하여 (0,0) 자리에 #이 배치된걸 O로 덮었다
3. 탈출지점(E)이 존재하며, 탈출지점은 (0,0)을 제외한 나머지에 랜덤으로 뜨게한다
int exit_width , int exit_length 를 각각 선언하여 탈출구의 가로, 세로 좌표를 (0,0) 으로 설정하고
탈출구를 랜덤으로 뜨게 하기위해 srand(time(NULL)) 을 사용 후, 가로세로 좌표를 최소 0, 최대 9로 설정하기위해 10으로 나눈 나머지 수를 사용하였다.
탈출지점을 제외하기 위해선 가로나 세로중 하나를 9의 나머지로 설정후 +1을 하면 될 것 같다
이를 map 배열에 넣었고 맵 반복문(#)이 설정된 후 설정되게 하여 탈출구(랜덤) 자리에 #이 배치된걸 E로 덮었다
이렇게 1, 2, 3을 설치한 모습을 for 반복문을 사용 후 cout으로 콘솔창에 출력되게 하였다
4. WASD 키입력을 통해 플레이어를 이동시킨다
_getch() 를 사용하기위해 맨 위에 #include <conio.h> 를 쓰고 int key = _getch(); 선언 후
조건문 switch를 사용하였다
조건은 _getch() 로 키를 입력 받았을 때,
그 키가 w 라면 player의 y좌표를 한칸 감소 시킨걸 player_y 에 대입한다
이때 10 * 10 맵 밖으로 나가지 못하게 하기위해 player_y 가 1보다 작다면 ++ 연산자를 사용 후 break 를 걸어
1 미만으로는 제자리 걸음을 하게 만들었다.
나머지 a, s, d 또한 마찬가지로 설정한 후 switch문을 닫아주었다.
5. O가 E에 도달하면 "탈출에 성공했습니다" 후 프로그램 종료
마지막으로 if 조건문을 사용하여 탈출구의 length와 플레이어의 length가 일치할 때, 그리고 탈출구의 width와 플레이어의 width가 일치할 때 탈출에 성공했습니다 라는 문구가 출력되게 하였고
맵의 설치부터 출력, 좌표가 바뀌는 과정을 탈출 전까지 계속해서 반복하기 위해 while (1) 반복문으로 크게 묶어주었으며 if 조건문이 완성됐을 때 break를 걸어 멈출 수 있게 하였다
또한 맵 출력 전에 system("cls") 를 사용하여 key를 누를때마다 출력된 맵이 삭제되고 새로운 맵을 출력하여 마치 키를 누를때마다 움직이는것 처럼 보이게 설정 하였다
'메타버스 1기' 카테고리의 다른 글
4/18 버전 관리 시스템과 Git 명령어, 연습 (0) | 2022.04.18 |
---|---|
4/15 복습과제 (0) | 2022.04.15 |
4/13 배열, _getch(), 두 가지 게임 만들기 (0) | 2022.04.14 |
4/12 제어문 - 조건문과 반복문 (0) | 2022.04.13 |
4/11 스플랜더 변수타입 , 연산자와 난수 (0) | 2022.04.11 |