티스토리 뷰

안녕하세요


이번 강좌에서는

게임 정보화면과 종료기능을 구현해보도록 하겠습니다.





[목차]


1. 게임 종료 구현하기


2. 게임 정보화면 구현하기








[1 게임 종료 구현하기]



게임 종료기능을 구현해볼건데요


이전 강좌에서 진행하였던 메뉴 선택기능이 구현되어있어야합니다.




이전 강좌까지 하셨으면 해당 메뉴를 선택하면 아래와 같은 값이 반환될것입니다.



아직 왜그러는지 이해하지 못하셨어도 괜찮습니다.


아래 사진을 봅시다.


이 사진은 지난시간에 진행하였던 menuDraw 함수의 내부입니다.


아래에 줄친 부분을 보면 return y-12 라고 되어있습니다.


왜 이렇게 계산하여 반환할까요?




게임시작

게임정보

종료


이렇게 메뉴가 출력되는데요


"게임시작" 부분이 출력되는 y의 위치가 12입니다.

"게임정보"는 13

"종료"는 14이죠


y값이 1씩 증가(한줄씩 늘어남)하면서 출력되고 있는 모습입니다.

(사진의 63~67번째 줄을 확인해보시면 됩니다)


12-y를 하는 이유는


만약 화살표가 아래와 같이 출력되어있다고 가정합시다.


> 게임시작

게임정보

종료


y의 위치가 12겠죠?


12-y(12) = 0이 됩니다.

저는 0, 1, 2를 선택한 값으로 사용하기 위해 사용한것입니다.


12-y가 아니라 13-y였으면 1이 반환되었겠죠.


이 부분은 개인적으로 수정하셔도 상관없습니다.

이후에 본인이 생각하는 숫자대로 조금 수정하면 되기 때문이죠.


저는 첫 번째 요소면 0

두 번째면 1

세 번째면 2


이런식으로 사용하기위해 12-y를 한것입니다.


크게 어렵지 않으니 이부분은 스스로 다른방법을 사용하셔도 됩니다.

이부분에 대한 설명은 더이상 하지 않아도 모두 이해하실거라 믿습니다.



제 기준으로


0: 게임시작

1: 게임정보

2: 종료

입니다.


메인함수를 위와같이 조금 수정합니다.



반복문이 추가되었는데요

처음보는 system("cls") 도 보입니다.


system 함수는 운영체제에 직접 명령어를 전달하는 역할을 합니다.

"cls"명령어는 윈도우에서 콘솔창의 모든 글자를 깨끗하게 비우는 역할을 합니다.

또한 콘솔 좌표를 0, 0으로 초기화합니다.


위와같은 상태로 작성하고 실행한 후 메뉴를 선택하면 다시 처음으로 돌아오는 모습을 볼 수 있습니다.


titleDraw() 함수가 타이틀 글자를 출력하고

menuDraw() 함수에서 메뉴를 출력하고 메뉴선택을 기다립니다.

스페이스바가 눌려서 선택이 되면, 해당 값을 반환(0, 1, 2)하고 그 값은 menuCode 변수에 저장됩니다.

그리고 system("cls") 로 인해 모든 화면의 글자가 사라집니다.


이 과정이 무한반복되므로 다시 타이틀을 그리고 메뉴를 선택할 수 있게되는것입니다.



이렇게 무한반복만 하게되면 안되겠죠?


게임시작이 선택되면 게임을 시작하고

게임정보를 선택했으면 정보가 출력되고

종료가 선택되면 프로그램이 종료되어야겠죠



먼저 간단한 종료기능부터 구현해봅시다.


아래에 조건문만 추가하면 됩니다.



if문으로 0인지 1인지 2인지 확인을 하고


알맞은 작업을 하면 되는데요

종료같은 경우는 2이므로 return 0 을 작성해주시면 됩니다.

(왜 2인지는 위쪽 내용 참조)


return문의 기능에는 값을 반환하는것도 있지만

자신이 속해있는 함수를 종료시키는 기능도 있습니다.


저렇게 return 을 하면 프로그램이 바로 종료됩니다.


종료기능은 이것이 전부입니다.

아마 지금까지의 강좌중 가장 쉬웠을거같습니다.


이제 다음 챕터를 진행해보도록 합시다.






[2 게임 정보화면 구현하기]







게임 정보화면에는 주로 어떤내용이 들어갈까요?


대부분 조작법과 개발자 이름이 들어가게됩니다.


이번 챕터에서는 이러한 화면을 구성하게 됩니다.



상단 함수 선언부분에 새로운 함수를 선언합니다.

저는 infoDraw 라는 함수이름으로 정의하였습니다.



정의하였으면 아래에 함수를 구현합시다.

(주로 메인함수 하단에 구현합니다)

먼저 system("cls") 로 화면을 깨끗히 비우고 새로 출력합니다.


printf 함수로 출력하고싶은 정보를 작성하면 됩니다.


작성이 끝났으면 함수 마지막부분에

사진과 같이 while 문을 작성해줍니다.


저 코드가 의미하는것은 무한반복을 돌면서 입력된 키값이 SUBMIT이면 

반복을 중지하고 함수를 종료하는 코드입니다.


저는 SUBMIT을 스페이스바로 설정하였기때문에 스페이스바가 눌리면 종료되는 구조이죠.

스페이스바가 아닌 다른 키가 눌리면 아무런 반응이 없이 무한반복을 계속 진행하게됩니다.


drawInfo 함수를 모두 구현했으면 메인함수 부분을 추가합시다.



else if(menuCode == 1) 부분에


방금 구현한 따끈따끈한 infoDraw() 함수를 호출합니다.




이제 컴파일 후 실행해봅시다.



(실행결과)



위와같이 정상적으로 작동할것입니다.


움짤을 보시면 아시겠지만 커서(깜빡이는것)가 거슬리실겁니다.



다음 강좌에서는 커서를 없애고 파일을 분할하는 작업을 하도록 하겠습니다.





감사합니다.


댓글
  • 프로필사진 Thanks for you menuCode = Menudraw();
    이 코드에서 Menudraw 함수의 반환 값을 MenuCode에 넣어주는 것 뿐만이 아니라 함수의 실행도 되는건가요?
    Menudraw함수를 main함수에서 없애도록 수정시켰는데도 실행이 되는게 신기해서 여쭤봅니당..
    2018.08.22 00:18
  • 프로필사진 BlogIcon 이근둥 네, menuCode 변수에 대입하기 전에 먼저 Menudraw 함수가 호출되고 리턴이 되면 반환값이 menuCode에 대입됩니다! 2018.08.22 10:08 신고
  • 프로필사진 help 스페이스바를 누르면 메인화면으로 돌아간다고 하신 코드가 while (1)문에 if(key() == submit()) 인거죠 ? 제가 이름값만 다르게 했는데 왜 메인화면으로 안가고 종료가 되는 걸까요 ? ㅠㅠ 2019.06.02 11:20
  • 프로필사진 BlogIcon 이근둥 menuDraw에서 반환된 값과 조건문의 값을 확인해보시는게 좋을 것 같아요 2019.06.03 19:48 신고
  • 프로필사진 c언어 초보.. 소스좀 올려주실 수 있나용??! 2019.06.20 16:19
댓글쓰기 폼