대학교 과목중에서 객체지향 프로그래밍이라는 과목의

기말 발표용으로 만든 텍스트어드벤처게임


이름이 객체지향 프로그래밍이지만 수업에서 클래스를 안배웠기 때문에 

모든 코드가 c스타일임

근데 파일입출력은 c++스타일로 배웠음 ㅋㅋ


시간이 별로 없어서 완벽하지는 않지만

아니 사실 허접한 수준이지만


블로그에 올릴 정도는 되는 퀄리티 인거 같아서 올림



일단 일회용 기말발표용 주제에 스토리도 만들었다.


기술의 발달로 등산은 물론 걸을 일도 없어진 세상

사람들은 쓸데없는 등산을 기피하게 되었다.

등산에 대한 여론이 나빠지다 결국 전 세계적으로 등산을 혐오하기 시작했다.

이에 등산로는 황폐화되었고 이제는 진짜로 위험한 행위가 되어버린 등산은

전 세계적으로 불법이 되어버리고 만다

이에 숨어있던 등산애호가들은 세계비밀등산가및등산로개척가지원협회 설립하여

비밀리에 등산로를 개척하고 있다.

플레이어는 세계비밀등산가및등산로개척가지원협회아시아지부 소속되어 전국의 산을 탐험해야 한다.




게임의 메인

이름대로 등산하는 게임이다.

세이브기능이 있기 때문에 이전에 진행하던 데이터가 있으면 이어서 플레이가능하다.


상하좌우 방향키로 메뉴를 고를 수 있고 엔터키로 선택할 수 있다.

<상점>에서 물건을 등산에 필요한 물건을 구매할 수 있고

<물건들> 메뉴에서 산에 들고갈 물건을 선택할 수 있다.


이건 <상점>

상하 방향키와 엔터로 구매가능하다.

약간 문제가 있는게 까먹고 잔액표시를 안해두었다...

결국 돈개념은 다 잡혀있고 정상작동 하지만

 이 게임안에서 잔액을 볼 수 있는 방법은 없음 ㅋㅋ




여긴 <물건들>

역시 방향키와 엔터로 담을 수 있고

써있지는 않지만 (이것도 실수,,,) X키를 눌러서 가방과 인벤토리를 오갈 수 있다.


가방은 포인터로 구현했고 인벤토리는 배열로 구현했다...

내가 왜 그랬는지는 몰라도

머리가 나쁘면 머리가 고생한다


이건 인게임

인게임부분은 꾸밀 겨를이 없었기 때문에

좀 많이 밋밋하다.


<상태보기>로 상태를 보고

<물건들>로 물건을 사용할 수 있다.


물건을 사용하면 다음으로 진행된다.



물건을 사용했을때.

앞에 1 있는건 디버그용으로 잠깐 해둔건데 이것도 실수로 못지움...



산마다 난이도가 있는데

난이도에 따라 어떤 상황이 발생하고

에 따라 좋은상황나쁜상황이 됨


그리고 좋은상황일때 지능이 높으면 효과가 2배가 되고

나쁜상황일때 민첩성이 높으면 나쁜효과가 절반이 됨



이건 좋은상황


나쁜상황 + 정상 도착

정상에 도착하면 보상으로 기력 30을 줌

참고로 정상이 끝이 아니라 하산도 해야함


이건 나쁜상황인데 민첩이 높아서 절반만 깍인거


아무 상황도 없는 상황 + 등산 끝


등산이 끝나면 

세계비밀등산가및등산로개척가지원협회아시아지부 

에서 지원금이 나온다.

지원금은 (산 높이) * (산 난이도) * 10






최대한 하드코딩을 피하기 위해서

웬만한 데이터는 텍스트파일로 따로 뽑아서 리소스 폴더에 넣어놨음.


help.txt는 도움말

item.txt는 아이템 정보들

m(숫자).txt는 산 아스키아트들

main.txt는 메인 로고 아스키아트

mountain.txt는 산 정보들

situation.txt는 상황들  




int대신에 char을 많이 썼음

어차피 정수형인거는 똑같기 때문에 뭘 쓰나 정상적으로 작동하고

용량이 2배나 차이나기 때문에 큰 수를 다루는게 아니라면 char을 쓰는게 좋다고 생각함


솔직히 도토리키재기이지만 뜬금없는 결벽증이 생겨서 그렇게함

다만

돈을 저장하는 변수와

비트플래그

 파일입출력할때는 다른 타입을 쓰기도 함


파일 입출력할때 다른 타입을 쓴 이유는

"<<" 으로 파일입출력을 했는데 char을 쓰면 문제가 있어서....

그냥 내 실력 문제임




메모리 아낀다고 별 지X를 했지만 UI부분에서 재귀함수를 남발했음

ㅋㅋㅋ


이유는 그냥 보기 편하고 왠지 넣으면 교수님이 더 좋아할거 같아서

위에 있는 사진은 그나마 볼만하지만


나중에는

정의가 이따시 만큼 길어져버린 함수가 나와벌임...

(<물건들> 이나 <상점>을 구현할 때 쓰는 함수임)


물론 재귀함수만의 문제는 아니고

디펄트 파라미터를 정의해놨기 때문에 더 길어보이고

실제로 쓸때는 짧게 쓸 수 있음.






구현하려다가 시간이 없어서 구현못한게 많이 있음

특히 마지막으로 작업했던 등산상황부분이 심각한데

MtStateMTEffect 열거형들은 산에 날씨나 시간같은 개념을 추가하려다가 못한 흔적이고

Situation 구조체의 effectCountORCode 변수는

원래 아이템을 줍는 상황을 만들려고 했는데 포기한 흔적임... 


그 외에도 리소스파일에도 포기한 흔적이 많이 남아있고

디버그하던 흔적이 남아있다거나

체력이나 기력이 마이너스가 되면 게임오버를 해야하는데

그것도 구현안함...




구현할때 가장 신경써서 만든 부분은

단언컨대 아이템이라고 할 수 있음



unsigned short형 변수중에

앞에 6비트를 효과를 나타내는 플래그로 사용하고

나머지를 그 효과의 파워를 저장하는데 씀


가뜩이나 표현가능한 수가 적은 short형이지만 

어차피 실제로 사용하는 양은 100단위에서 움직이니깐

나름 효율적인 판단이라고 생각하고 있음


사용할때는 

앞에 6비트는 일반적으로 비트플래그 사용하듯이 하고

쉬프트 연산자로 앞에 앞에 플래그부분을 밀어버려서 파워를 따로 저장함


다행히 교수님도 좋아하는거 같았음





주석을 달때 장난식으로 단 부분이 몇개 있음

교수님이 보고 뭐라할지는 몰라도 내가 재미있었으니깐 그만임 ㅎ


장난주석의 예

게임 끝나고 동적해제하는 함수임






솔직히 집에있는 웬만한 프로그래밍

뒷장은 책 처음 샀을때 빼고 펼치지도 않았을 정도로

공부를 겁나 대충함


덕분에 보통 책의 후반부에 있는 파일입출력은 거의 안써봤는데

이번기회에 많이 써봄


아무튼, 문제는 디버그모드에서는 잘 되는데 릴리즈모드로 빌드하니깐 

텍스트파일들을 못찾는지 못읽는지 게임 실행이 안됨

릴리즈 모드도 솔직히 이번기회에 처음써봄...




이건 좀 변명이지만 1교시부터 시작하는 수업을 들으려고

새벽 6시에 일어나서 통학하는 상황이라

수업시간에 많이 졸았었는데(그와중에 결석이나 지각 ZER0)


교수님이 "이거 만드느라고 졸았구나" 라고 해주심 ㅎ

아마도 좋은 의미겠지?

(A+을 받았으니깐 좋은 의미인거 확정! ㅋ)





마지막으로 소스파일

final_exam.zip


'내가 만든거' 카테고리의 다른 글

데빌리쉬 리그  (0) 2024.02.18
길따라 로봇 road robot 제작기(BIC 전시기)  (1) 2019.09.25
맵 에디터 !!!!  (0) 2018.05.11
유니티 스와이프  (0) 2018.02.20
유니티 사운드 매니저  (2) 2017.08.22
블로그 이미지

stuban

ㅇ.ㅇ

,