안녕하세요
이번 강좌에서는 잠긴 문과 열쇠 아이템을 추가해보도록 하겠습니다.
기존 코드를 수정하는 부분이 많으니 잘 확인하시길 바랍니다.
[ 목차 ]
1. 맵 데이터 수정하기
2. drawMap 함수 수정하기
3. move 함수 수정하기
4. drawUI 함수 수정하기
[1 맵 데이터 수정하기]
game.c 소스코드의 맵 데이터를 수정할겁니다.
열쇠 아이템과 잠긴문을 맵 데이터에 추가할 예정입니다.
저는 위와같이 수정하였습니다.
k는 열쇠아이템의 위치, l(소문자 L)은 잠긴문의 위치입니다.
이부분에 대해서는 여러분들이 원하는 문자로 하셔도 됩니다.
제가 수정한 맵을 출력한다면 예상결과는 아래와 같습니다.
위와같은 맵이 출력될 예정입니다.
맵 데이터를 수정하였으니 drawMap 함수를 수정해봅시다.
[2 drawMap 함수 수정하기]
맵 데이터에 새로운 k, l 를 추가하였으니 맵 출력부분에도 k, l에 대한 부분을 추가해야겠죠?
빨간색으로 묶어둔 부분을 추가하였습니다.
k일 경우 저는 노란색 *로 출력할 것이고
l일 경우 갈색 +로 출력할 예정입니다.
(출력결과)
위와같이 잘 출력되었네요
여러분들도 한번 컴파일 후 실행시켜보고 정상적으로 출력되는지 확인해보세요
[3 move 함수 수정하기]
출력부분은 마무리하였으니 내부적인 제어를 해보도록 하겠습니다.
맵 데이터 제어는 move 함수 내에서 진행됩니다.
먼저 move 함수를 수정하기 전에 gLoop(게임루프) 함수 안에 새로운 변수를 추가합니다.
열쇠아이템의 갯수를 저장할 변수를 하나 선언해주고 0으로 초기화해줍시다.
저는 key라는 이름의 변수를 선언하였습니다.
변수를 선언하였으면 game.h 로 가서 move함수와 drawUI 함수의 매개변수를 수정합니다.
맨 마지막 매개변수로 int* 자료형을 추가해줍니다.
추가를 마쳤으면 game.c 소스코드의 move 함수를 수정합시다.
먼저 함수의 매개변수에 아까 추가한 int* 형 변수를 하나 추가해줍니다. (124행 참조)
저는 int* key로 추가했습니다.
그리고 아래로 내려오셔서 else if 문으로 k, l에 대한 제어를 추가합니다.
139~152행이 k, l에 대한 제어부분입니다.
만저 k 부분을 살펴보자면, 이동할 위치에 k(열쇠)가 있으면 먼저 *key += 1 로 열쇠의 갯수를 1 증가시킵니다.
그리고 tempMap(맵 데이터 복사한 임시배열)의 열쇠가 있던 위치의 데이터를 0으로 설정합니다.
그리고 마지막으로 gotoxy 로 이동할 위치(열쇠가 있는 위치)로 이동하여 공백을 출력합니다(지우기)
열쇠를 습득하였으니 갯수를 1증가시키고,
맵 데이터에 있던 열쇠데이터(k)를 0으로 설정하여 빈칸으로 만든다음에
마지막으로 보이는 부분을 공백으로 출력하여 지워버리는 모습입니다.
이해가 안가실수도 있는데 직접 코드로 짜고 실행시켜보면서 확인해보시면 금방 이해하실 수 있을겁니다.
아래 l에 대한 부분은 k부분과 동일합니다.
if문 하나가 추가되어있는데요
열쇠가 0개 이상(1개라도 있을때만)일때만 문을 없애는 부분입니다.
플레이어는 0인 부분만 움직일 수 있으므로 열쇠가 있으면
*key -= 1로 갯수를 1개 줄이고(열쇠 사용)
문이 있던 위치의 데이터를 0으로 설정하여 플레이어가 지나갈 수 있게 만든 부분입니다.
위 상태로 코드를 작성하고 실행시켜보시면 아직 에러가 발생하며 컴파일이 안될것입니다.
현재는 함수의 매개변수를 추가하고 기능을 더하기만 했지만, 함수를 호출하는 부분은 수정하지 않았기 때문입니다.
아래의 마지막 챕터를 마치면 정상적으로 동작할것입니다.
[3 drawUI 함수 수정하기]
아까 위에서 move 함수의 매개변수를 수정할 때 drawUI 함수도 함께 수정했었습니다.
이어서 game.c 소스코드의 drawUI 함수를 수정해봅시다.
먼저 함수의 매개변수를 추가해줍니다.
저는 key라는 이름으로 정했습니다.
163행처럼 수정해줍니다.
이제 맵 하단에 위치와 더불어 열쇠가 몇개있는지 사용자에게 보여줄 수 있게되었습니다.
마지막으로 함수 호출부분을 수정합시다.
게임 루프로 이동하면됩니다.
drawUI, move 함수 호출하는 부분의 마지막 인자로 key 변수의 메모리 주소를 넘겨줍시다.
(key 변수는 move함수 수정하기 챕터의 처음에서 추가한 변수입니다)
위 사진의 빨간 밑줄처럼 추가해주시면 됩니다.
이제 컴파일하시고 실행시켜보세요!
정상적으로 작동합니다.
(실행결과)
정상적으로 아이템을 습즉하고 소모하는 모습을 보실 수 있습니다
(하단의 열쇠 갯수를 중점적으로 확인해주세요)
이제 목적지에 도달하면 게임 클리어하는 부분만 남겨져있습니다.
다음 강좌에서는 맵 오브젝트 제어[3]에 대해 알아보도록 하겠습니다.
(목적지에 도착시 탈출(클리어)기능)
감사합니다.