이근둥
근둥이의 블로그
이근둥
전체 방문자
874,952
오늘
323
어제
187

공지사항

  • 전체보기 (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) - 채팅⋯
  • [C/C++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성⋯
    2017.12.19
    [C/C++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성⋯
  • [Vue 3] Composition API와 템플릿 참조(⋯
    2020.10.02
    [Vue 3] Composition API와 템플릿 참조(⋯

태그

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

최근 댓글

  • 어디에서도 이런 친절한 설명은 받을 수 없었습니다. 응용⋯
    미쳤다...
  • 정말 너무 감사합니다 선생님 많은 도움이 되고있습니다 어떻⋯
    김준태
  • 커서 위치이동 함수까지 했는데 컴파일하면 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++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성 및 메인화면
언어 & 프레임워크/C & C++

[C/C++] 콘솔게임 프로그래밍 (1) - 프로젝트 생성 및 메인화면

2017. 12. 19. 16:31
반응형

안녕하세요



이번 강좌에서는 프로젝트를 생성하고 메인화면을 개발해보도록 하겠습니다.





저는 Dev C++로 강좌를 진행할것입니다.

Dev C++을 설치하고싶으시면 이전 강좌를 참고하시기 바랍니다.





[목차]


1. 프로젝트 생성하기


2. 타이틀 출력하기


3. 콘솔창 크기 조절하기


4. 기능별로 함수 분할하기


5. 커서 위치 이동하는 함수 구현하기


6. 메인메뉴 구현하기










[1 프로젝트 생성하기]


Dev C++을 실행하고 왼쪽상단의 메뉴바 중 파일을 선택합니다.


파일 > 새로만들기 > 프로젝트


위와같은 창이 뜨면

콘솔 어플리케이션을 선택하시고 C(또는 C++)체크,

프로젝트명은 여러분들이 원하는것으로 정해주시면 됩니다.


그리고 확인버튼을 눌러주세요






그러면 좌측 리스트에 아래와같이 main.c 소스코드가 생성됩니다.






메인 함수부분을 아래처럼 간단히 줄여줍니다.

이제 메인화면을 출력해볼건데요


printf 함수로 출력해보도록 하겠습니다.





[2 타이틀 출력하기]



출력하고싶은 글자 또는 모양을 직접 타이핑하여 출력합니다. 

공백도 출력되므로 적절히 조절하면서 원하는 방식으로 만들어주시면 됩니다.




F11을 눌러주시면 컴파일 후 실행이 됩니다 (Dev C++ 기준)


원하는대로 출력이 될것입니다.

하지만 메뉴글자가 너무 작거나 커서 콘솔창에 잘 맞지 않습니다.


콘솔창 크기를 조절해봅시다.






[3 콘솔창 크기 조절하기]





system("mode con cols=가로 lines=세로 | title 창 제목");

을 추가해줍시다.


가로길이, 세로길이, 제목을 적절히 설정하시고 다시 F11로 컴파일 후 실행시켜보면 변경된 내용을 확인하실 수 있습니다.



위 과정까지 마쳤으면 계속 진행해봅시다.




[4 기능별 함수 분할하기]


초보자들에게는 말이 어려워보일수도 있습니다.

하지만 어려운게 아니라 종류별로 정리한다고 생각하시면 됩니다.




처음의 소스코드는 모두 메인함수안에서 작성되었습니다.


메인함수에 모두 작성하는것보다는 기능별로 함수로 나누어서 작성하는것이 더욱 효율적이고 확인하기 쉽습니다.

위와같이 함수를 나누어서 작성해봅시다.



titleDraw 함수는 타이틀 글자를 출력하는 함수이고

init 함수는 프로그램 실행 직후 초기화작업을 진행할 함수입니다.


두 함수를 메인함수에서 호출하기만하면 간단하게 사용할 수 있습니다.



이런식으로 자주 사용되는 기능을 함수로 나누어서 코드를 작성하시면 됩니다.






이제 메인화면의 타이틀이 잘 출력되었으니

메뉴를 제작해보도록 하겠습니다.


게임시작

게임정보

종료


이 세가지를 메인화면에 추가할건데요

새로운 함수가 하나 필요합니다.


콘솔게임의 가장 핵심이라고 할 수 있는 함수입니다.

커서의 위치를 직접 원하는 위치로 옮길 수 있는 함수입니다.


한번 선언해두고 호출해서 사용하면 되므로 초기 작업에 미리 선언하여 사용해보도록 하겠습니다.





[5 커서 위치 이동하는 함수 구현하기]



전체 강좌의 핵심 함수입니다

한번 선언해두고 이후로도 계속 사용할 함수입니다.





맨 위에 windows.h 헤더파일 인클루드 하시고

하단에 함수를 작성하시면 됩니다.

(함수이름은 마음대로 정하셔도 됩니다. 저는 편하게 gotoxy로 했습니다. 상단에 함수선언도 추가해주세요)



매개변수는 int x, int y 두개인데요


gotoxy(3, 7)로 호출하게되면

x위치가 3, y위치가 7인 지점으로 커서가 이동하게됩니다.

이동한 위치에서 출력하는 방식으로 사용될 함수입니다.




간단한 사용법을 익히기위해 아래 코드를 추가해봅시다.


위에서 구현한 gotoxy 함수를 호출하여 사용하는 모습입니다.


x, y의 위치값을 전달하면 해당 위치로 이동하는 모습을 알 수 있습니다.

(임시 테스트이므로 확인 후에 13~16행 코드는 지워주세요)




콘솔창의 좌표는 실제 수학의 좌표와 다릅니다.

x축은 수학과 같지만

y축은 정 반대입니다.



좌측 맨 위가 0, 0 원점입니다.


x는 오른쪽으로 갈수록 증가하고

y는 아래로 갈수록 증가합니다.


x, y 둘다 0미만인 음수로 가게되면 콘솔창 범위에서 벗어나 보이지 않게됩니다.


예를들어 gotoxy(20, 13)를 호출하면 위 사진의 점선이 만나는 지점쯤으로 이동하게될것입니다.

콘솔창 좌표의 최대 범위는 위에서 창크기 지정할때의 cols, lines의 길이와 동일합니다.

최소범위는 x, y 둘다 0으로 동일합니다.



[ 이동방향 ]

왼쪽: x감소

오른쪽: x증가

아래: y증가

위: y감소



어떤식으로 사용할지 이해하셨을거라 생각합니다.

잘 숙지하시길 바랍니다.


다음으로 진행해봅시다.





[6 메인메뉴 구현하기]




커서위치를 옮기는 함수를 사용하여 메인메뉴 기능을 구현해볼것입니다.

함수를 하나 더 추가해보도록 하겠습니다.



상단에 함수를 선언하고 그 아래에서 구현(31~38행)합니다.


적당한 위치로 커서를 이동하고 게임의 메뉴를 출력하면 됩니다.


저는 게임시작, 게임정보, 종료 이 세가지만 추가하도록 하겠습니다.

함수를 구현하셨으면 메인함수에서 호출하시면 됩니다.


저는 함수이름을 menuDraw 라는 이름으로 선언하였습니다.





이런식으로 메인화면을 마음대로 만들 수 있습니다.

위치가 마음에 안든다면 gotoxy 함수에서 x, y 좌표값을 조금씩 바꿔가면서 원하는 위치를 찾으시면 됩니다.




이번 강좌는 여기까지 진행하고

다음 강좌에서 키보드를 눌렀을 때 화살표가 움직이는 기능을 구현해보도록 하겠습니다.


감사합니다.


반응형
저작자표시 비영리 동일조건
    '언어 & 프레임워크/C & C++' 카테고리의 다른 글
    • [C/C++] 콘솔게임 프로그래밍 (3) - 종료기능 및 게임 정보화면
    • [C/C++] 콘솔게임 프로그래밍 (2) - 메뉴 선택기능
    • [C/C++] 콘솔게임 프로그래밍 (0) - 기획 및 개발준비하기
    • [C/C++] Sizeof 연산자
    이근둥
    이근둥
    새로운 것을 좋아하는 프론트엔드 개발자 ✨
    댓글쓰기

    티스토리툴바