2010-06-24 2 views
3

나는 C#으로 나의 첫 걸음을 내딛고있다.C# 다른 규칙을 가진 턴 기반 시스템 모델링

저는 여러 라운드를 거치며 각 라운드가 이전과 다른 규칙을 가진 회전 기반 카드 게임을 제작하고 있습니다.

이러한 규칙은 미리 알려져 있습니다. 일부 라운드에는 플레이어가 경기를 할 수없는 슈트가 있고 다른 라운드에는 트럼프 슈트가 있습니다. 각 라운드에서 4 명의 플레이어가 각각 13 장의 카드를 모두 사용하여 차례로 플레이합니다. 그런 다음 덱이 재편/재 처리되고 다른 규칙을 가진 새로운 라운드가 시작됩니다.

는 내가 평소 셔플 데크와 거래 손 방법으로 수행 내 기본 카드/데크 수업을 C#

을이을의 모델링 노력에 붙어 조금 해요,하지만 난 최선의 방법에에 어려움을 겪고있어 이 라운드 시스템을 구현하십시오.

클래스/함수 모델링에 도움이 될 수 있습니까? 거기에서 코드를 작성할 수 있습니다.

감사합니다! Pedro

+0

저는 초보자가 아니므로 주제가 무엇인지 알 수 없습니다. 단순하게 해주십시오. – leppie

+0

답장을 보내 주셔서 감사합니다. 전략 패턴은 제가 찾고있는 것이 었습니다. 매우 도움이 – pmanacas

+0

어때 당신이 대답을 받아 :) – epitka

답변

1

규칙에 대한 기본 클래스를 만들고 각 라운드마다 각 특정 규칙을 구현하십시오. 이 클래스 밖에서는 현재 라운드를 기반으로 제공 할 특정 규칙을 알고있는 논리를 가지고 있으며 각 파생 클래스에서 재정의 한 공유 논리 (IsValidMove 같은 것)를 사용합니다.

public abstract class BaseRule 
    { 
     public virtual bool IsValidMove(object moveDescription); 
    } 

    public class Round1Rule : BaseRule 
    { 
     public override bool IsValidMove(object moveDescription) 
     { 
      return true; 
     } 
    } 

    public class Round2Rule : BaseRule 
    { 
     public override bool IsValidMove(object moveDescription) 
     { 
      return false; 
     } 
    } 
0

Player의 현재 유효한 Rule의 현재 설정과 함께 Table을 통해 그들이에서 연주하는 인터페이스 것입니다.

각 턴이 끝날 때 Table 필드는 current_rule 필드를 다음 턴에 사용해야하는 Rule의 적절한 하위 클래스로 설정합니다.

Rule 아형 bool is_legal_to_play(Card card, ...) 또는 int get_score_for(Player player, ...), 또는 AI-촉진 방법 등 float rate_move(Card card, ...) (다음 실제로 rate_move 최대 값으로 한 재생)과 같은 방법을 노출한다.

Table 노출을받는 메소드/속성, ... Rule get_current_rules(), Player get_current_player(), Player get_player_to_the_right_of(Player player) 같은

내가 실제로 C#을 경험하지 않습니다 유의하시기 바랍니다; 이것은 특정 템플릿을 따르지 않는 꽤 일반적인 OOP 체계입니다. 고소해라.

타원은 규칙에 따라 필요할 수있는 추가 매개 변수를 포함합니다.