로그인

검색

OBG
조회 수 1469 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부

개인적으로 '게임 프로그래밍의 정석'이란 책을 재미있게 보고 있다.(언어 - C++) 이 책에선 게임 개발을 단계적으로 보여주면서 '게임 개발은 이렇게 하는 거다'라는 것을 알려준다. 나도 그렇게 하고 싶으나 책을 쓰려고 하는 강좌가 아니므로 그렇게까진 못하겠고 '남의 소스 코드 분석은 이렇게 하는 거다'라는 것을 어느 정도 알려주겠다.

 

소스 코드 분석에 있어 가장 핵심적인 것은 클래스 구조이다. UML, 그 중에서도 Class Diagram이라는 것이 괜히 있는 것이 아니다. 아무리 처음 보는 소스라도 Class Diagram이라는 것이 있으면 반은 이해할 수 있다. UML에 대해서는 다음 페이지를 참고한다.

 

http://www.obg.co.kr/doku/doku.php?id=programming:design_pattern:uml

 

이 강좌는 게임 개발을 거의 처음하는 사람들을 위한 것이기 때문에 UML을 다루진 않겠다. 그냥 간단히 어느 클래스가 있으며 그 클래스가 하는 일은 무엇인지만 간단히 정리해보겠다.

 

먼저 Nubcake Farms 소스에는 다음과 같은 클래스를 포함하고 있다.

 

1. Farmer 클래스

2. Fence 클래스

3. Plot 클래스

4. Well 클래스

5. WateringCan 클래스

6. HUD_Sprite 클래스

7. Wheat_Plant 클래스

8. Shop 클래스

 

위 클래스들은 모두 pygame.sprite.Sprite 클래스를 상속받아 정의하였다. pygame.sprite.Sprite 클래스는 pygame.sprite 모듈의 클래스로 게임 상의 오브젝트들을 나타내는 클래스이다. 이름으로도 대충 뭐하는 클래스인지 파악이 될 것이다. 이제 각 클래스의 역할이 뭔지? 멤버함수 또는 변수는 어떤게 있는지 살펴보자.

 

1. Farmer 클래스

말그대로 플레이어인 농부다. 초기화할 때 농부의 이미지를 불러오고 씨앗, 밀, 물, 코인 등을 얼마나 갖고 있는지 설정한다.

farmer_down.png farmer_left.png farmer_right.png farmer_up.png

 

1.1. interact 함수

농부가 다른 오브젝트랑 상호작용할 때 작동한다.

 

1.2. move 함수

농부를 이동한다. 

 

1.3. check_bounds 함수

농부가 경계를 넘었는지 조사한다.

 

2. Fence 클래스

농부가 이동할 수 있는 구역의 경계인 펜스를 나타낸다.

 

2.1 assign_image 함수

펜스의 배열을 체크하여 펜스 이미지를 할당한다.

 

3. Plot 클래스

밀을 재배할 수 있는 땅을 나타낸다.

 

3.1. dry 함수

 

땅이 말라있다.

 

3.2. wet 함수

땅이 젖어있다.

 

3.3. update 함수

땅이 젖은 후 15초가 지나면 땅을 마르게 한다.

 

3.4. occupy 함수

씨앗을 심는 경우 호출

 

3.5. unoccupy 함수

밀을 재배한 경우 호출

 

4. Well 클래스

물을 얻을 수 있는 우물이다.

well.png

 

5. WateringCan 클래스

물을 담을 수 있는 물뿌리개이다.

watering_can_large.png

 

6. HUD_Sprite 클래스

게임 상태를 표시하는 HUD(Head-up Display)를 나타낸다.

 

7. Wheat_Plant 클래스

땅에 씨앗을 심는 경우 생성되는 오브젝트이다.

 

wheat_1.png wheat_2.png wheat_3.png wheat_4.png

7.1. get_growth_time 함수

다음 단계로 자라기 위한 시간을 계산한다. 5~10초 사이의 값을 리턴한다.

 

7.2. update 함수

시간을 체크하여 growthtime이 지나면 다음 단계로 성장한다.

 

7.3. grow 함수

다음 단계로 성장시 호출

 

7.4. harvest 함수

다 자란 밀을 재배한다.

 

8. Shop 클래스

밀을 파고 씨앗을 살 수 있는 상점이다.

well.png

 

8.1. open 함수

상점을 연다.

 

8.2. close 함수

상점을 닫는다.

 

8.3. update 함수

상점을 열었을 때의 메뉴 텍스트를 업데이트 한다.

 

8.4. up_selection 함수

위쪽 화살표를 누른 경우

 

8.5. down_selection 함수

아래쪽 화살표를 누른 경우

 

8.6. make_selection 함수

메뉴를 선택한 경우

 

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 5723
108 API/MFC 비주얼 스튜디오 2005 단축키 MoA 2013.07.28 1683
107 API/MFC VC의 소스 파일, sln파일 관리 MoA 2013.07.28 1357
106 API/MFC 비베의 MSCOMM.OCX VC++에서 불러쓰기 MoA 2013.07.28 1712
105 API/MFC VC++6.0 에서 VC++ 2005로 변환할 경우 형변환 경고 대응방법 MoA 2013.07.28 1458
104 C/C++ ofstream ifstream MoA 2013.07.28 1472
103 API/MFC MFC기반의 CSocket 사용 방법과 예제 MoA 2013.07.28 2197
102 API/MFC Sleep() 함수 대신 프로그램 딜레이 시키기 (Wait) MoA 2013.07.28 6008
101 C/C++ C, C++ 에서의 불(bool, boolean) 타입의 동작 MoA 2013.07.28 1195
100 C/C++ Simplified Logger Class MoA 2013.07.28 1314
99 C/C++ Buffer Overrun MoA 2013.07.28 1516
98 C/C++ Google의 C++ 라이브러리 MoA 2013.07.28 1507
97 C/C++ fwrite(), fread() MoA 2013.07.28 1409
96 C/C++ Binary 데이터 저장 by Google MoA 2013.07.28 1240
95 API/MFC 후킹 링크 MoA 2013.07.28 1670
94 API/MFC 모달창 세팅값 저장 MoA 2013.07.28 865
93 API/MFC DoModal Dialog 기초 MoA 2013.07.28 896
92 C/C++ C 언어의 문자형 변수 char - 8비트 정수형 변수 MoA 2013.07.28 2928
91 C/C++ C언어의 변수 float와 double - Float Point 처리 MoA 2013.07.28 1109
90 Site 알고리즘 정리된 블로그 MoA 2013.07.28 800
89 C/C++ 비트연산자 MoA 2013.07.28 1264
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 15 Next
/ 15