들어가는 글: 4화에서 만든 GeneralsMap 클래스를 활용하여 지방 정보를 담고 있는 ProvinceNet 클래스를 만들어 봅니다.
커밋 링크: https://github.com/yudong80/coding-samguk/commit/38d3b7d1d3d201f420685931ec269b017f788ae9
변경 사항을 한눈에 보고 싶으신 분들은 여기를 참고하세요
삼국지는 총 40여개의 땅(Provice)를 모두 점령하면서 삼국을 통일하는 게임입니다.
따라서 각 지방의 정보를 참조할 일이 많은데요,
이러한 정보를 총괄하는 ProvinceNet 클래스를 만들었습니다.
ProvinceNet 도 앞선 GeneralsMap과 TreasuresMap 과 같이 결국 Map이지만
지역은 서로 연결되어 있기 때문에 일종의 네트워크를 형성한다고 생각하여 XXXNet 으로 이름 붙였습니다.
다음은 11번 낙양을 중심으로 한 지도입니다.
11번 - 낙양 (조조)
12번 - 홍농 (조조)
22번 - 완 (원술)
23번 - 신야 (빈땅)
19번 - 허창 (빈땅)
이제 위의 정보를 코딩해봅니다. 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() 메서드
낙양 -> 홍농, 완, 허창과 연결되어 있고
홍농 -> 허창,
완 -> 낙양, 허창,
신야 -> 완,
허창 -> 낙양, 완과 연결되어 있습니다.
연결 정보가 있어야 장수를 이동한거나 전쟁을 일으킬 수 있습니다.
지방과 다른 지방이 연결을 맺기 위해 Province 클래스에 필요한 멤버 변수와 메서드를 추가하였습니다.
: neighbors 멤버 변수
: addNeighbors() 메서드
다수의 땅을 한번에 입력하기 위해 가변 인자를 사용하였습니다.
23번 - 신야 (빈땅)
19번 - 허창 (빈땅) 빈땅의 정보를 표시하기 위해 toString() 메서드를 수정하였습니다.
: toString() 메서드
이제 앞애서 만든 기능이 정상 동작하는지 확인합니다.
파일: 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 정보도 함께 넣었기 때문에
지역의 병사수와 장수 목록도 함께 표시할 수 있었습니다.
흥미로운 사실은 클래스와 코드가 하나씩 추가되면서 기존에 추가했던 내용이 불필요해지는 것입니다.
깃헙 커밋: https://github.com/yudong80/coding-samguk/commit/38d3b7d1d3d201f420685931ec269b017f788ae9
파일: coding.samguk.App.java
메서드: test조조능력치()
조조의 보물인 [맹덕신서, 청공검, 의천검, 조황비전]은 더이상 외부에서 생성할 필요가 없으며
관련 코드는 모두 GeneralsMap 클래스로 이동하였습니다.
이런 것이 설계의 묘미입니다 :-)
5화까지 쉬지 않고 달려왔습니다.
잠시 숨 좀 고르고 나머지 클래스들도 채워볼께요.
감사합니다.
2021.8.21
ps. 아마도 다음은 군사 관련 내정을 다뤄볼까 합니다. 장수 이동, 훈련, 무기 구매 등 결국 삼국지는 전쟁을 통해 삼국을 통일하는 게임이니까요 :-)