2010-11-23 2 views
10

인기있는 카드 게임 인 Dominion (http://www.boardgamegeek.com/boardgame/36218/dominion)에서 AI 플레이어를 만들려고 노력하고 있습니다.Dominion AI 플레이어의 올바른 OOP 구조

당신이 게임에 익숙하지 않다면, 기본적으로 Magic : The Gathering의 아주 능률적 인 사촌인데, 거기에는 다른 규칙을 가진 커다란 카드 라이브러리가 있습니다. 게임을 진행하는 동안 플레이어는이 카드를 사서 데크에 넣습니다.

나는이 게임을 관점에서 배우는 기계에 관심이있다 - 나는 서로에 대해 봇을 치고 수백만 게임을 플레이하고 통찰력을 향상시켜 게임을 더 잘하게하려고 노력했다.

핵심 AI 결정 논리에서 게임 규칙 (각 카드에 인쇄 된 축 어적 지침)을 분리하는 방법을 잘 모르겠습니다.

내가 시작한 명백한 길은 각 카드에 대한 클래스를 만들고 규칙과 AI 물건을 같은 장소에 두는 것입니다. 이것은 일종의 총체적입니다. 그러나 그것은 최소한의 저항의 길과 같습니다. 하지만 각 카드가 일종의 인터페이스를 지원하고 AI 구성 요소 코드를 사용하는 것이 가장 좋은 방법일까요?

"올바른"OOP 디자인이 있습니까? 아니면 몇 가지 합리적인 가능성?

+1

"... 만드는 중입니다. 각 카드에 대한 수업, 그리고 ... ", 여러 개의 인스턴스가있는 클래스 카드 또는 말 그대로 여러 개의 클래스를 의미합니까, 각 카드당 하나입니까? – Sagar

답변

5

카드의 동작을 자체 클래스로 캡슐화하여 여러 가지 동작 (예 : 선택 사항)이있는 카드를 쉽게 허용 할 수 있습니다. 또한 매개 변수화 가능한 비헤이비어를 작성하고이를 카드와 혼합 및 매치 할 수 있습니다.

그래서 카드에는 카드 비용, 재생할 수있는 시간, 이름 등이 포함됩니다. 또한 카드에서 수행 할 수있는 행동 목록이 포함됩니다.

행동은 AI 액터가 카드의 일부로 볼 수 있습니다. 카드가 가지고있는 또 하나의 재산은 비용과 함께 측정 할 수 있습니다. 인공 지능이 그것을 이해하는

카드의 동작은 행동을 해석 할 수 있어야 사용하여 실제로 입니다

인공 지능 배우, 그래서 행동 클래스는 몇 가지 힌트를 포함 할 수도 있지만, 실제 AI 로직 자체가 없어야합니다 거기에 포함되어 있습니다. 인공 지능이 특정 카드에 특정 행동을 필요로한다면, 카드 행동이 아닌 AI 액터에 이런 종류의 것을 쓰십시오.

AI 액터는 예를 들어,이 동작의 예상 승점 포인트가 0.2 포인트/라운드 인 것을 알아야 할 경우 AI 액티비티에 대해 힌트로 사용되는 행동의 일부일 수 있습니다 카드를 구입/재생할 수 있습니다.

하지만 실제로 당신이 AI 배우 디자인에 어떻게 접근하고 있는지 모르겠으니 어쩌면이게 말이되지 않을 수도 있습니다. 그러나 행동 자체를 카드 자체의 기본 부분 이라기보다는 카드의 속성으로 생각하는 것이 도움이 될 것이라고 생각합니다.

AI 액터의 기본 액션 (배우가 카드 없이도 할 수있는 것들)을 행동으로 캡슐화 할 수있는 이점을 제공하므로 특별한 액션 코드없이 카드 액션에 대해 액션을 비교할 수 있습니다.

0

저는 Dominion의 모든 변형 카드에 익숙하지 않지만 각 카드에 대한 수업을 작성한다는 생각은 부담스러워 보입니다. 이상적으로는 카드의 다양한 변형을 캡슐화 한 일반 카드 클래스를 만든 다음 해당 카드의 특정 값을 일반 클래스에로드하는 것이 좋습니다.

권력 집합과 제한 사항을 포함하는 클래스가 좋은 일반적인 표현이라고 상상할 수 있습니다. 같은 뭔가 : 플레이는

  • 피해 유형을 금지
  • 주/값 재생 자원에 필요한

    • 건강/마나는 다른 카드에
    • 효과 (카드 아마 사전을 변경
    • 이드 및 효과)
    • 등 ...
  • +0

    Dominion에는 많은 카드가 있으며 많은 카드에 사용자 정의 작업이 있습니다. – Powerlord

    +0

    @R. Bemrose : 정말로. 클래스에서 각 카드 유형의 동작을 캡슐화하는 것은 정확합니다. 동작이 Card 클래스의 확장 또는 Card 인스턴스가 소유 한 CardBehaviour 클래스의 확장 또는 다른 방법으로 수행해야하는지 여부는 또 다른 질문입니다. – Welbog

    +0

    이러한 작업은 어떤 식 으로든 일반화 될 수 없습니까? – jball

    0

    Dominion의 AI 버전이 아닌 논리에 대한 논리이며, 여전히 파악하기가 쉽지 않습니다.

    각 카드 덱에 대한 클래스와 각 카드 유형에 대한 인터페이스가 있어야합니다. 카드에는 여러 유형이 있습니다 (예 : Great Hall은 Action과 Victory).

    현재 모든 공격 카드도 작업이므로 공격 인터페이스 하위 클래스 동작을 만들 수 있습니다. 대부분의 카드의 경우 Action은 Attack 메서드를 호출합니다. 그러나, 당신이 공격할지 여부를 선택할 수있는 미니언 (Minion)과 같이이 카드가 다른 카드가 필요합니다.

    반응 카드는 행동이지만 또한 공격 카드에 대한 반응으로 상대 턴에 공개 될 수 있으므로 특수 처리가 필요합니다. 번영의 때, 공격 이외의 것에 대한 반응으로 공개 될 수 있습니다 ... 망루는 카드를 얻을 때마다 공개 될 수 있습니다.

    지속 시간 카드 (이전 7 가지 카드 유형 중 내가 빠뜨린 목록)는 추가 턴 동안 계속 유지되는 액션이며 ... 또한 번영의 행상인 구매 비용으로 계산됩니다.

    편집 : 와우, 나는 여기서 AI 문제를 언급하지 않았습니다 ... 아마도 내 자신의 개발이 멀티 플레이어 네트워크 버전을 목표로했기 때문일 것입니다.

    +0

    귀하의 구현 방법에있어 어떻게 운임을 책정하셨습니까? 나는 지금 막 내 자신을 만들기 시작했다, 당신의 부호는 어딘가에 유효합니까? – AndreasKnudsen

    +0

    @AndreasKnudsen : 슬프게도, 잠시 보류 상태입니다. 요즈음 나는 돌아가서 끝내려는 동기를 갖게 될 것입니다. – Powerlord

    5

    개인적으로 거기에 당신이 게임 프로세스를 모델링하는 방법을 에 따라이에 대한 몇 가지 "올바른"OOP 디자인은, 그리고 게임 플레이 에이전트의 AI, 난 카드의 최소 번호를 취할 것 유효한 라운드을 카드 클래스의 인스턴스로 구현하고 플레이어를 에이전트 클래스의 인스턴스로 구현하고 Strategy (패턴) 클래스의 인스턴스로 간단한 재생 전략을 구현 한 다음 무슨 일이 일어나는가

    일부 t 득시글 득시글 득시글하다 호일로서 완전히 무작위의 플레이어를 가지고 단기간 이익/손실 최대/최소 연산자를보고 유전자 알고리즘을 사용하여 에이전트의 전략을 돌연변이 시키며 XCS 분류자를 다운로드하고 전략을 유도하는 것이 유용한 지 확인하십시오.

    ... 올바른 모델의 개념은 사용 방법에 따라 크게 달라집니다. 게임의 요소를 사용하고 플레이어 전략/전술을 모델링/조작해야하는 방법을 이해하면 올바른 구조가 솔루션에 적합한 지 알 수 있습니다.