이근둥
근둥이의 블로그
이근둥
전체 방문자
875,057
오늘
0
어제
428

공지사항

  • 전체보기 (107)
    • 웹 (9)
    • 언어 & 프레임워크 (53)
      • JavaScript (7)
      • TypeScript (0)
      • Node.js (11)
      • Vue.js (3)
      • React (0)
      • React Native (0)
      • C & C++ (19)
      • Java & JSP (9)
      • Python (4)
    • 컴퓨터 과학 (3)
      • 알고리즘 (0)
      • 자료구조 (3)
    • 기타 (9)
      • Linux (1)
      • Git (2)
      • DialogFlow (4)
    • 일상 (13)
      • 게임 (13)
    • 칼럼 (9)
      • 회고 (0)
      • 나만의 글 (0)
      • 제품 리뷰 (9)
    • __Dev__ (9)
      • Release (9)
반응형

인기 글

  • 웹 푸시 알림(Web Push Notification)
    2022.06.13
    웹 푸시 알림(Web Push Notification)
  • [Tomcat] 아파치 톰캣 서버 포트 변경하기
    2018.08.24
    [Tomcat] 아파치 톰캣 서버 포트 변경하기
  • [Node.js] 실시간 채팅 서비스 만들기(5) - 채팅⋯
    2018.05.31
    [Node.js] 실시간 채팅 서비스 만들기(5) - 채팅⋯
  • [Vue 3] Composition API와 템플릿 참조(⋯
    2020.10.02
    [Vue 3] Composition API와 템플릿 참조(⋯
  • [Vue 3] Composition API 살펴보기
    2020.03.04
    [Vue 3] Composition API 살펴보기

태그

  • 이클립스
  • self
  • vue-next
  • WWDC
  • vue
  • 자바
  • Hello World!
  • 출간
  • vuex
  • pwa
  • spread syntax
  • Vue 3
  • Deemo
  • java
  • 파티클
  • javascript
  • Composition API
  • AstroWar
  • 웹 확장
  • ES6
  • 전개 구문
  • 프로그레시브 웹 앱
  • composition-api
  • vue3
  • Java FX
  • WWDC20
  • vue.js
  • Scanner
  • 이펙트
  • 자바 프로젝트

최근 댓글

  • 어디에서도 이런 친절한 설명은 받을 수 없었습니다. 응용⋯
    미쳤다...
  • 정말 너무 감사합니다 선생님 많은 도움이 되고있습니다 어떻⋯
    김준태
  • 커서 위치이동 함수까지 했는데 컴파일하면 Makefile.⋯
    Qour94
  • iOS의 경우 애플에서 개발하고 있는 webkit 엔진을 ⋯
    이근둥
  • android, IOS에서 된다고 했는데 Notifica⋯
    삽자루부대

최근 글

  • 웹 푸시 알림(Web Push Notification)
    2022.06.13
    웹 푸시 알림(Web Push Notification)
  • 스택(Stack)
    2022.05.26
    스택(Stack)
  • 배열(Array)
    2022.05.25
    배열(Array)
  • C언어로 배우는 자료구조
    2022.05.24
    C언어로 배우는 자료구조
  • [Vue 3] Composition API와 템플릿 참조(⋯
    2020.10.02
    [Vue 3] Composition API와 템플릿 참조(⋯

블로그 메뉴

  • 홈
  • 미디어로그
  • 방명록
hELLO · Designed By 정상우.
이근둥

근둥이의 블로그

[C/C++] 콘솔게임 프로그래밍 (12) - 맵 오브젝트 제어[2]
언어 & 프레임워크/C & C++

[C/C++] 콘솔게임 프로그래밍 (12) - 맵 오브젝트 제어[2]

2017. 12. 24. 20:30
반응형

안녕하세요


이번 강좌에서는 잠긴 문과 열쇠 아이템을 추가해보도록 하겠습니다.


기존 코드를 수정하는 부분이 많으니 잘 확인하시길 바랍니다.




[ 목차 ]


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]에 대해 알아보도록 하겠습니다.

(목적지에 도착시 탈출(클리어)기능)


감사합니다.


반응형
저작자표시 비영리 동일조건
    '언어 & 프레임워크/C & C++' 카테고리의 다른 글
    • [C/C++] 콘솔 프로그래스바(ProgressBar) 구현하기
    • [C/C++] 콘솔게임 프로그래밍 (13) - 맵 오브젝트 제어[3] [최종]
    • [C/C++] 콘솔게임 프로그래밍 (11) - 맵 오브젝트 제어[1]
    • [C/C++] 콘솔게임 프로그래밍 (10) - 하단 UI 및 게임중단 기능
    이근둥
    이근둥
    새로운 것을 좋아하는 프론트엔드 개발자 ✨
    댓글쓰기

    티스토리툴바