2012-09-24 7 views
1

가능한 중복 :
3 player card game turn system3 플레이어 카드 게임

가 나는 GUI 3 플레이어 카드 게임 (1 인간과 컴퓨터 2 대)를 만들고있어. 각 플레이어는 3 장의 카드를 가지고 있습니다. 각 라운드마다 딜러가 있으며 카드를 처음으로 플레이하는 플레이어는 딜러 오른쪽에있는 플레이어입니다. 각 플레이어는 왼쪽 플레이어가 플레이 한 후에 만 ​​플레이 할 수 있습니다. (카드 게임의 기초입니다)

각 플레이어가 테이블 위에 3 장의 카드를 놓은 후에. 딜러 버튼은 오른쪽 플레이어에게 전달되고 새로운 라운드가 시작됩니다.

턴을 제어하는 ​​기능을 수행하는 데 도움이 필요합니다. 누가 턴을 할지를 볼 수 있습니다. 나는 인간의 차례이며, 입력을 기다린다. 컴퓨터 회전 인 경우, cals의 동작 기능을 호출합니다.

내가 지금 가지고있는 카드 클래스는 소송 및 가치가 있습니다.

카드의 목록입니다 갑판 클래스는

내가 카드 목록 (카드가 때 갈 곳은 한 테이블 클래스가 (이 클래스는 suffle 기능과 무승부 카드 기능이있다) 플레이어는

나는 플레이어의 클래스가 (같은 클래스가 인간과 컴퓨터 플레이어입니다)를 재생 -이 좋은)

플레이어 클래스 (핸드 클래스가 플레이어의 3 개 카드가 이잖아)

게임 클래스에는 네 개의 테이블과 3 명의 플레이어가 있습니다.

나는 인간이 처음으로 카드를 가지고 테이블로 옮기는 기능을 가지고 있으며, 2 대의 컴퓨터 플레이어는 각각 하나의 카드를 움직인다. 이것은 인간 플레이어가 처음으로 플레이하는 경우에만 작동합니다. 각 플레이어의 3 장의 카드가 재생되면 다른 라운드가 시작됩니다.이 라운드에서는 플레이어가 아니라 처음 플레이 할 컴퓨터입니다.

나는 이것을 제어하는 ​​하나의 시스템을 만드는 방법을 모릅니다. 나는 코드를 원하지 않지만 아이디어 자체. 그들은 인간 여부 및 그 경우 경우에 기반

public bool IsComputer { get; set; } 
public bool IsCurrentTurn { get; set; } 
public int TurnOrder { get; set; } 

그런 식으로, 당신은 당신의 논리를 작성 할 수 있습니다

감사

+0

을하지만 난 – capzulu

+0

귀하의 질문을 편집 할 시간이 없었 않았다

가 차례로 다음 플레이어를 얻으려면, 단지 이것을 사용 ? 왜 다른 결과를 기대합니까? –

+0

나는 여전히 – capzulu

답변

1

나는 내 Player에서 다음 클래스 같은 몇 가지 특성을 가지고 것 그들의 차례입니다. TurnOrder 속성을 사용하여 다음 차례를 결정할 수 있습니다.당신은이 같은 기본 논리 뭔가에 추가 할 수

Player player1 = new Player(); 

가 :

if (player1.IsComputer) 
{ 
    PerformTurn(); 
} 
else //Human 
{ 
    //Logic to wait and allow human player to do his or her turn here 
} 

편집 :

하는 결정에 당신이 당신의 플레이어를 만드는 경우

그래서 다음과 같이 객체 누구의 차례인지, 나는 먼저 선수 목록에 선수를 둡니다. 예 :

List<Player> players = new List<Player> 
{ 
new Player {Name = "Player 1", IsComputer = false, TurnOrder = 0, IsCurrentTurn = true}, 
new Player {Name = "Player 2", IsComputer = true, TurnOrder = 1, IsCurrentTurn = false}, 
new Player {Name = "Player 3", IsComputer = true, TurnOrder = 2, IsCurrentTurn = false} 
}; 

둘째, 나는 누구의 차례가 옆에 결정하기 위해 각 선수의 TurnOrder 속성을 사용하는 함수를 만들 것입니다. 이와 같은 방법은 그것을 할 것입니다 : 물론

public Player GetNextPlayer() 
{ 
    Player currentPlayer = players.First(x => x.IsCurrentTurn); 

    //if player is last in the turn order return first player 
    if (currentPlayer.TurnOrder == players.Max(x => x.TurnOrder).TurnOrder) 
    { 
     return players.Min(x => x.TurnOrder); 
    } 
    else 
    { 
     return players.First(x => x.TurnOrder == (currentPlayer.TurnOrder + 1)); 
    } 


} 

, 당신은 단지리스트의 인덱스를 사용하고 전부 TurnOrder를 사용하여 건너 뛸 수 있습니다,하지만 당신은 턴 순서로 인덱스를 사용하여 게임을 확장하기를 원한다면 나중에 다칠지도 모른다. TurnOrder 속성이 훨씬 더 유연하다고 생각합니다. 당신이 편집없이 재 게시하기로 결정하므로, 폐쇄 된 재 게시 죄송합니다

Player currentPlayer = GetNextPlayer(); 
+0

감사합니다, 그건 유용했다. 하지만 TurnOrder 속성을 사용하여 다음 플레이어를 알 수 있습니까? – capzulu

+0

내 대답 업데이트 – ROFLwTIME