2012-11-09 2 views
0

보드 게임에서 '움직이는'모델을 만드는 좋은 방법을 찾고 있습니다. 나는 그들의 움직임이 무엇인지 플레이어에게 물어보고 그들이 반응하도록하고, 그 움직임에 따라 보드에서 올바른 행동을 취할 수 있기를 원합니다. 문제는 몇 가지 유형의 이동이 있으며 각 이동마다 고유 한 데이터 집합이 있음을 의미합니다. 예를 들어, Scrabble에서 단어, 위치 및 방향 (또는 위치 또는 기타 타일 세트)을 반환해야하는 단어를 재생할 수 있지만 타일을 교환 할 수도 있습니다. 교환) 또는 합격.똑같은 두 개의 다른 기능을 가진 두 개의 객체를 모델링하는 좋은 방법은 무엇입니까?

체스와 마찬가지로, 일반적으로 조각을 움직여야하며 조각이있는 곳과가는 곳을 반환해야합니다.하지만 두 조각과 위치 또는 측면 (왕/여왕)을 나타내는 성도 사용할 수 있습니다. , 또는 조각/위치 외에 다른 정보 조각.

Move 객체를 반환하는 플레이어가 가장 좋은 방법이라고 가정하고 있지만 다른 모델링 선택이나 제안에 대해서도 열려 있습니다.

감사합니다.

+0

개인적으로이 기본 상속을 사용합니다. – JWiley

+0

모든 종류의 게임에 공통된 이동 객체를 사용하는 것이 좋지 않다고 생각합니다. 또는 추상화는 마커 일뿐입니다. –

+0

명확히하기 위해 여러 게임에서 솔루션을 찾지 않습니다. 특정 게임의 특정 구현 내에서 솔루션을 찾고 있습니다. 체스 이동과 스크래블 이동을 처리하는 무언가가 필요하지 않지만, 처리하려고하는 이슈는이 게임들 (그리고 다른 것들) 각각과 비슷합니다. 감사! – Risser

답변

1

일반적인 유형이지만 다른 동작 (여기서는 이동)을 원할 경우, 해당 동작을 구현하도록해야합니다. 따라서 이사회가 두 가지 다른 동작을 다르게 해석 할 수있는 방법을 묻는 대신, 두 가지 다른 동작을 수행 할 때 보드를 다르게 사용하는 방법을 고려해야합니다.

So : 기본 클래스 (인터페이스 여야 함)는 Move이며 perform() 메서드가 있으며 두 종류의 move에는 perform() 메서드의 구현이 다릅니다.

+0

이것은 간결하고 답답한 "물론"대답이었습니다. 정확히 내가 필요로하는 것. 감사! – Risser

0

좋은 모델은 항상 요구 사항, 데이터 흐름, 제어 흐름, 전체 시스템 아키텍처 등에 대한 자세한 지식을 기반으로합니다. 손수 사용 및 철학적 논증을 통해 응용 프로그램을 설계하는 것은 유익하지 않습니다. 특정 질문, 일반적으로 합법적 인 모델 중 하나에 관한

이동를 반환하는 플레이어입니다 만, 자세한 내용에 따라, 실제 장점은 재앙에 총 성공의 범위 일 수있다.

0

게임에서의 움직임은 실제로 목표가 아닙니다. 그것은 사건입니다.

당신의 체스 예제가 가장 쉽습니다. 이동은 보드에서 조각과 새 위치를 반환하지만 성 이벤트, 캡처 이벤트 및/또는 조각 프로모션 이벤트를 반환 할 수도 있습니다.

마찬가지로 Scrabble 게임에서 이동은 단어 재생 이벤트, 교환 타일 이벤트 또는 통과 이벤트를 반환 할 수 있습니다.

이벤트를 게임의 나머지 부분에 대한 메시지로 생각하십시오. 클래스처럼 이벤트를 코딩 할 수 있습니다. 이 이벤트 클래스는 모델이 메시지를 생성 할 수 있도록 다양한 게임 클래스에 대한 액세스 권한을 가져야합니다.

이벤트 처리기 클래스는 모든 게임 이벤트를 처리합니다. 이 클래스는 다른 게임 클래스를 조작하는 클래스입니다. 이벤트는 이벤트 핸들러가 처리 할 수있는 형식이어야합니다.

+0

나는이 아이디어가 마음에 들지만, 나는 여전히 3 ~ 4 가지의 다른 사건이있을 수 있다는 점에서 동일한 기본 문제를 가지고있다. 'eventType'을 비교하여 개별 처리기로 전달합니까? – Risser

+0

아니면 보드 및 기타 게임 조각이 플레이어 이벤트에 대한 청취자로 플레이어를 구독합니까? 다시 말하지만, 이것을 처리하는 가장 좋은 방법은 확실하지 않습니다. – Risser

+0

Java Swing 구성 요소에는 모든 종류의 리스너 (이벤트)가 있습니다. 여러 부분 또는 개별 이벤트가있는 하나의 이벤트를 가질 수 있습니다. 체스는 이전에 체스를 빌려주고, 스크래블은 후자에게 빌려줄 것이다. 게임에 어떤 의미가 있는지를 결정하는 것은 당신에게 달려 있습니다. 대답에서 말한 것처럼 이벤트 처리기가 있습니다. 다시 말하지만 이벤트 핸들러 메서드가 가장 적합한 모델 클래스를 결정하는 것은 개발자의 몫입니다. –

0

다른 구현체가 자신의 바깥 세상에 자신을 소개하는 것 외에는 공통점이 없다면 Move는 자신의 설명을 통해 알 수 있습니다. Move는 자체 게임을 수행하는 각기 다른 구현에 대해 느슨하게 정의 된 인터페이스 여야합니다.

그러나 내 주요 질문은 실제로 다른 인터페이스에서이 인터페이스를 사용할 수 있는지 여부입니다. 서로 다른 게임에서 특정 액션 포맷을 기대하는 일종의 공유 핸들러가 없다면 다른 게임 관련 Move 클래스를 정의하고 신경 쓰지 않아도됩니다.

1

이 당신이 찾고 있지만,에 좋은 아이디어를 많이있을 것 같습니다 정확히하지 않을 수 있습니다이 게시물 오래 :

Any patterns for modelling board games? 답변 중 일부는 이동 구현을위한 제안을 포함

하고, 잘하면 당신에게 새로운 아이디어를 줄 수 있습니다.

관련 문제