2009-04-19 3 views
2

보드 게임 보드의 멋진 표현과 주위의 플레이어의 움직임을 쓰려고합니다. 보드는 타일 격자이며 플레이어는 위, 아래, 왼쪽 또는 오른쪽으로 이동할 수 있습니다. 일련의 인접한 타일 세트는 함께 명명 된 영역으로 그룹화됩니다. 일부 타일 사이의 움직임을 차단하는 벽이 있습니다.보드 게임에서 보드를 표현하기

그건 기본적으로. 모든 플레이어가 인간에 의해 제어되면 어디에서 시작해야하는지 알 것 같지만 컴퓨터로 제어되는 플레이어에서 어떤 일이 일어나는지 고심하고 있습니다. 나는 선수가 스스로에게 말할 수 있기를 바란다 : "나는 광장 x에 있고, 나는 지역 R에 많이 가고 싶다. 나는 지역 S에 조금 가고 싶다. 나는 6 개의 움직임이 가능하므로, 나는해야한다. 할 ... "

나는 어디에서 시작 해야할지가 아니다. 어떤 아이디어? 이것은 현대의 OO 언어 일 것입니다.

EDIT : 보드의 그래픽 표현에 대해서는 (아직) 신경이 쓰이지는 않지만, 경로 찾기 부분에 관한 것입니다.

답변

0

게임의 메모리 내 표현 (및 상태)을 찾고 있다면 행렬이 가장 간단합니다. 그러나 게시판의 복잡성, 전략에 따라 상태 목록을 유지 관리해야 할 수도 있습니다.

화면에 표시되는 것을 의미하는 경우 먼저 그래픽 라이브러리가 필요합니다.

1

지도 클래스가 이동하려고하는 확률에 매핑 필드가있는 Player 클래스가 있습니다. 즉,지도 < Square, Double >을 0..1로 나타내면됩니다.

일련의 사각형을 캡슐화하는 게시판 클래스를 보유하십시오. 각 스퀘어에는 벽, 좌표 및 플레이어가있는 경우 표시가있는 곳에 4 개의 부울 또는 유사한 기호가 표시됩니다.

3

각각의 가능한 이동을 나타내는 트리 구조를 사용한다고 말하고 싶습니다. Minimax 유형 알고리즘을 사용하여 컴퓨터에서 수행 할 작업을 파악할 수 있습니다.

1

길 찾기에 문제가있는 경우 경로 찾기 알고리즘이 많이 있습니다.

Wikipedia article on Pathfinding에는 경로 찾기 알고리즘 목록이 있습니다. 게임에 사용되는 일반적인 것들 중 하나는 A* search algorithm입니다. A *는 다른 유형의 영역 (통과 할 수없는 벽, 이동하는 데 더 오래 걸리는 타일 등)을 지나갈 때의 비용을 고려할 수 있습니다.

많은 경우 보드는 2 차원 배열로 표현 될 수 있지만, 여기서 각 요소는 타일 유형을 나타냅니다. 그러나 지역에 대한 요구는 해결하려고 조금 더 흥미로울 수 있습니다.

1

상업용 보드 게임 스타일 제품에서 나에게 효과가 있었던 것을 알려줄 수 있습니다.

게임의 나머지 부분에 대한 잘 정의 된 인터페이스를 사용하여 보드 및 핵심 게임 논리를 자신의 모듈로 나눕니다. 우리는 AnimalMove (gamePieceID, origin, dest, animInfo)와 같은 GUI에 대한 인터페이스와 함께 bool IsValidMove (origin, dest), bool PerformMove (origin, dest)와 같은 함수를 가졌습니다.

보드와 규칙은 보드의 상태 만 알았고 무엇이 유효 했습니까? 렌더링, 인공 지능, 애니메이션, 사운드, 입력 또는 다른 것에 대해서는 아무것도 몰랐습니다. 각 프레임, 우리는 GUI 레벨에서 사용자로부터의 입력을 처리하고 보드/게임 상태 코드에 명령을 보낸 다음 완료합니다.게임 상태 코드는 명령을 받고, 유효한지 여부를 확인하고, 게임 상태 및 보드를 업데이트 한 다음 메시지를 GUI로 다시 보내서 보드의 새로운 상태를 시각적으로 나타냅니다. 이러한 업데이트는 시각적 표현 시스템에 의해 대기 중이므로 일련의 애니메이션을 순서대로 일괄 적으로 배치 할 수 있습니다.

좋은 점은 보드가 인간 대 AI 플레이어에 대해 알지 못하거나 걱정하지 않는다는 것입니다. AI는 차례대로 행동하는 별도의 하위 모듈이 될 수 있습니다. 플레이어와 동일한 명령을 보낼 수 있으며 게임 논리와 시각적 결과는 동일합니다. 게임 보드 상태에 대한 AI 별 로컬 비트가 있거나 AI가 보드를 "볼"수있는 게임 논리에서 일부 BoardSnapshot() 기능을 노출해야합니다.하지만 그게 전부입니다. 또는 각 AI를 게임 상태에 옵저버 패턴으로 등록 할 수 있으므로 복잡한 실시간 계획을 수행해야 할 경우를 대비하여 보드가 업데이트 될 때 알림을받습니다.

게임의 각 섹션을 분리하여 격리하면 유닛 테스팅에 도움이되며보다 견고한 시스템을 제공 할 수 있습니다. 잘 정의 된 인터페이스는 친구입니다.

관련 문제