Python

[농장게임 만들기] 2. Nubcake Farms 클래스 분석

by OBG posted Apr 26, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

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

개인적으로 '게임 프로그래밍의 정석'이란 책을 재미있게 보고 있다.(언어 - 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 함수

메뉴를 선택한 경우