RTS 게임을 작성 중이며 사용자 작업을 "명령"으로 캡슐화하고 싶습니다. 명령을 허용합니다 :RTS 게임용 명령 시스템
- 다른 플레이어에게 네트워크를 통해 사용자의 동작을 전송, 그래서 모든이 다른 실행을 방지하기 전에 각 동작을 검증하는 재생 기능
- 수 있도록 파일을
- 기록 사용자 작업이 무엇을하고 있는지 알고있다 예를 들어 UI 변경 (카메라 이동), 게임 상태 변경 (유닛 이동),지도 편집기 만 발행 할 수있는 동작 (예 : 변경) 등의 동작을 분류하는 행위 지형) 등
또한 최소한의 오버 헤드를 추가해야합니다. 이 때문에 반사 사용을 피하고 싶습니다. 필자가 필자가 거대한 switch 문으로 끝내기 때문에 지금까지 내가 얻은 최선은 나빴다.
enum CommandType {
MoveCamera,
ChangeTerrain
}
// Base class for all commands (public fields used for brevity)
abstract class Command {
protected Command(CommandType type) {
Type = type;
}
public CommandType Type;
}
class CommandMoveCamera : Command {
public CommandMoveCamera() : base(CommandType.MoveCamera) {}
public int DeltaX;
public int DeltaY;
}
class CommandChangeTerrain : Command {
public CommandChangeTerrain() : base(CommandType.ChangeTerrain) {}
public int NewTerrainType;
public int X;
public int Y;
}
class Game {
Queue<Command> m_commands;
void Update() {
// Example of adding a command
m_commands.Enqueue(new CommandMoveCamera { DeltaX = -10, DeltaY = 0 });
// Processing commands
while (m_commands.Count > 0) {
var c = m_commands.Dequeue();
switch(c.Type) {
case CommandType.MoveCamera:
var command = (CommandMoveCamera)c;
MoveCamera(c.DeltaX, c.DeltaY);
break;
case CommandType.ChangeTerrain:
var command = (CommandChangeTerrain)c;
ChangeTerrain(c.X, c.Y, c.NewTerrainType);
break;
}
}
}
}
언어는 C#입니다. 내 질문은 : 요구 사항을 충족시키는 방법으로이 시스템을 구현하고 커다란 스위치 명령문을 사용하여 각기 다른 유형의 명령을 분기하지 않도록하는 방법은 무엇일까요?
감사합니다.
코드에서 다른 눈 모음을 찾고 있다면 [codereview] (http://codereview.stackexchange.com)는 아마도 당신의 질문에 더 좋은 집일 것입니다. 그렇지 않으면 더 많은 것을해야 할 것입니다 게시 된 코드에 대한 문제와 관련하여 –
코드 검토를 요청하는 것이 아닙니다. 코드는 내가 성취하려는 것을 설명하기위한 것입니다. 내가 찾고있는 것은 내가 말한 다양한 요구 사항을 충족시킬 수있는 동안 거대한 switch 문을 피하는 방식으로이 시스템을 설계하는 방법이다. – Asik
그것은 SO의 의도는 아닙니다. 당신이 당신의 시스템을 설계 할 사람이 필요하다면 나는 당신의 돈을 가지고 싶어하는 많은 일하는 소프트웨어 디자이너가있을 것이라고 확신한다. 진지하게, 당신의 질문은 아마도 게임 사이트 나 다른 포럼을 시도해 볼만한 것은 아닙니다. –