brunch

You can make anything
by writing

C.S.Lewis

[코딩삼국지] #5 ProvinceNet 코딩

들어가는 글: 4화에서 만든 GeneralsMap 클래스를 활용하여 지방 정보를 담고 있는 ProvinceNet 클래스를 만들어 봅니다. 


커밋 링크: https://github.com/yudong80/coding-samguk/commit/38d3b7d1d3d201f420685931ec269b017f788ae9

변경 사항을 한눈에 보고 싶으신 분들은 여기를 참고하세요 



1. 지방 정보? 


삼국지는 총 40여개의 땅(Provice)를 모두 점령하면서 삼국을 통일하는 게임입니다. 

따라서 각 지방의 정보를 참조할 일이 많은데요, 

이러한 정보를 총괄하는 ProvinceNet 클래스를 만들었습니다. 


ProvinceNet 도 앞선 GeneralsMap과 TreasuresMap 과 같이 결국 Map이지만 

지역은 서로 연결되어 있기 때문에 일종의 네트워크를 형성한다고 생각하여 XXXNet 으로 이름 붙였습니다. 


다음은 11번 낙양을 중심으로 한 지도입니다. 


11번 - 낙양 (조조)

12번 - 홍농 (조조) 

22번 - 완 (원술) 

23번 - 신야 (빈땅) 

19번 - 허창 (빈땅) 


2. ProvinceNet 코딩 


이제 위의 정보를 코딩해봅니다. ProvinceNet 클래스는 내용이 다소 많으니 천천히 따라오세요. 


파일: coding.samguk.ProvinceNet.java 

깃헙 링크: https://github.com/yudong80/coding-samguk/blob/main/V0/src/coding/samguk/ProvinceNet.java 


1) 싱글턴 패턴이고 Map 객체를 멤버 변수로 가짐 

: 여태까지 반복되었던 내용 

동일하게 find() 라는 인터페이스를 갖습니다. 


2) Province 정보 초기화 

: init() 메서드 


앞서 3화에서 낙양에 있는 17명의 장수를 모두 등록하였고 그 군사 정보도 함께 넣었습니다. 

점점 앞서 설계한 정보들이 ProvinceNet 으로 모여들고 있습니다. 

그만큼 ProvinceNet 은 중요한 클래스입니다. 


3) 지역 연결 정보를 넣습니다. 

: setNetwork() 메서드 

낙양 -> 홍농, 완, 허창과 연결되어 있고 

홍농 -> 허창,

완 -> 낙양, 허창,

신야 -> 완,

허창 -> 낙양, 완과 연결되어 있습니다. 


연결 정보가 있어야 장수를 이동한거나 전쟁을 일으킬 수 있습니다.


3. Province 수정 


지방과 다른 지방이 연결을 맺기 위해 Province 클래스에 필요한 멤버 변수와 메서드를 추가하였습니다. 

: neighbors 멤버 변수 


: addNeighbors() 메서드 


다수의 땅을 한번에 입력하기 위해 가변 인자를 사용하였습니다. 


23번 - 신야 (빈땅) 

19번 - 허창 (빈땅)  빈땅의 정보를 표시하기 위해 toString() 메서드를 수정하였습니다. 


: toString() 메서드 


4. 결과 테스트 

이제 앞애서 만든 기능이 정상 동작하는지 확인합니다. 


파일: coding.samguk.App.java 

메서드: testProvinceNet() 

깃헙 링크: https://github.com/yudong80/coding-samguk/blob/main/V0/src/coding/samguk/App.java 


App 클래스의 실행 결과는 다음과 같습니다. 


5개의 지역 정보가 모두 잘 출력되었습니다. 

특히 11번 허창의 경우 Province를 ProvinceNet 에 넣을 때 General 정보도 함께 넣었기 때문에 

지역의 병사수와 장수 목록도 함께 표시할 수 있었습니다. 


5. 코드의 이동


흥미로운 사실은 클래스와 코드가 하나씩 추가되면서 기존에 추가했던 내용이 불필요해지는 것입니다. 

깃헙 커밋: https://github.com/yudong80/coding-samguk/commit/38d3b7d1d3d201f420685931ec269b017f788ae9


파일: coding.samguk.App.java

메서드: test조조능력치() 

조조의 보물인 [맹덕신서, 청공검, 의천검, 조황비전]은 더이상 외부에서 생성할 필요가 없으며

관련 코드는 모두 GeneralsMap 클래스로 이동하였습니다. 



이런 것이 설계의 묘미입니다 :-) 


5화까지 쉬지 않고 달려왔습니다. 

잠시 숨 좀 고르고 나머지 클래스들도 채워볼께요. 

감사합니다. 

2021.8.21


ps. 아마도 다음은 군사 관련 내정을 다뤄볼까 합니다. 장수 이동, 훈련, 무기 구매 등 결국 삼국지는 전쟁을 통해 삼국을 통일하는 게임이니까요 :-)

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari