brunch

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

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


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

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



1. 지방 정보?


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

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

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


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

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


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

20210821-1.PNG


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 객체를 멤버 변수로 가짐

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

20210821-8.png

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


2) Province 정보 초기화

: init() 메서드

20210821-9.png


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

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

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


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

: setNetwork() 메서드

20210821-10.png

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

홍농 -> 허창,

완 -> 낙양, 허창,

신야 -> 완,

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


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


3. Province 수정


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

: neighbors 멤버 변수

20210821-12.png


: addNeighbors() 메서드

20210821-11.png


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


23번 - 신야 (빈땅)

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


: toString() 메서드

20210821-13.png


4. 결과 테스트

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


파일: coding.samguk.App.java

메서드: testProvinceNet()

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

20210821-14.png


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

20210821-16.png


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

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

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


5. 코드의 이동


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

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


파일: coding.samguk.App.java

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

20210821-17.png

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

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


20210821-18.png


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


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

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

감사합니다.

2021.8.21


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

keyword
매거진의 이전글[코딩삼국지] #4 TreasuresMap 코딩