작은 디자인 모드 (14) 명령 모드

명령 (Command) 모드 는 동작 (Action) 또는 트 랜 잭 션 (Transaction) 모드 라 고도 부 릅 니 다. 요청 을 대상 으로 밀봉 하여 서로 다른 요청 으로 클 라 이언 트 를 매개 변수 화 한 다음 요청 배열 이나 요청 로 그 를 기록 하거나 취소 가능 한 작업 을 지원 합 니 다.
전통 적 인 RPG 게임 에서 유 저 는 조종 가능 한 우리 측 캐릭터 에 대해 각종 명령 조작 을 한 후에 명령 서열 을 생 성 합 니 다. 그 다음 에 조건 과 랜 덤 값 에 따라 조종 할 수 없 는 우리 측 과 적 캐릭터 에 대해 각종 명령 을 생 성하 여 명령 서열 에 추가 합 니 다. 전투 과정 은 바로 이 명령 서열 에 대한 집행 입 니 다.이곳 은 흔히 볼 수 있 는 명령 모드 이다.
본문 은 이것 을 예 로 들 자.
우선 Battler 의 종 류 를 정의 합 니 다:
public class Battler
{
	public Battler(string name, int hp, int attack)
	{
		Name = name;
		HP = hp;
		Attack = attack;
	}
	public string Name{get;set;}
	public int HP {get;set;}
	public int Attack{get;set;}
	public bool IsGuarding{get;set;}
	public void AttackToTarget(Battler target)
	{
		int dmg = this.Attack;
		if (target.IsGuarding) {
			dmg /= 2;
		}
		target.HP -= dmg;
	}
}

이름, 혈액, 공 격 력, 방어 중 4 개 속성 과 목표 공격 방법 이 있 습 니까?데 미 지 는 자신의 공 격 력 입 니 다. 목표 방어 중 데 미 지 를 반 으로 줄 이 고 마지막 으로 피 해량 을 감소 합 니 다.
그리고 우 리 는 Command 의 추상 적 인 종 류 를 정의 합 니 다.
public abstract class Command
{
	public abstract void Execute();
	public virtual bool CanAddCommand()
	{
		return true;
	}
}	

추상 적 인 방법 인 Execute 와 가상 방법 인 CanAddCommand 를 정의 합 니 다.
이어서 우 리 는 두 개의 하위 클래스 를 정의 한다.
public class AttackCommand : Command
{
	private Battler _attacker;
	private Battler _target;
	public AttackCommand(Battler attacker, Battler target)
	{
		_attacker = attacker;
		_target = target;
	}
	public override bool CanAddCommand()
	{
		if (_attacker == null || _target == null) {
			return false;
		}
		return base.CanAddCommand ();
	}
	public override void Execute()
	{
		if (_attacker != null && _target != null) {
			_attacker.AttackToTarget (_target);
			Console.WriteLine (_attacker.Name + " attack " + _target.Name);
		}
	}
}

공격 명령 의 구조 함 수 는 공격 자 와 목 표를 전달 하고 실행 방법 에서 전자의 AttackToTarget 방법 으로 후 자 를 공격한다.
public class GuardCommand : Command
{
	private Battler _battler;
	public GuardCommand(Battler battler)
	{
		_battler = battler;
	}
	public override bool CanAddCommand()
	{
		if (_battler == null) {
			return false;
		}
		return base.CanAddCommand ();
	}
	public override void Execute()
	{
		if (_battler != null) {
			_battler.IsGuarding = true;
			Console.WriteLine (_battler.Name + " is guarding ");
		}
	}
}

방어 명령 의 구조 함수 가 전투 자 에 게 전달 되 고 실행 방법 에 이 대상 의 IsGuarding 을 true 로 설정 합 니 다.
이어서 명령 목록 을 저장 하기 위해 매크로 명령 이 필요 할 수도 있 습 니 다. 이것 은 간단 한 조합 모드 입 니 다. (소문 디자인 모드 참조 (9) 조합 모드 참조)
public class MacroCommand : Command
{
	List _commandList = new List ();
	public void Add(Command cmd)
	{
		if (cmd.CanAddCommand ()) {
			_commandList.Add (cmd);
		}
	}
	public void Remove(Command cmd)
	{
		_commandList.Remove (cmd);
	}
	public override void Execute()
	{
		for (int i = 0; i < _commandList.Count; i++) {
			_commandList [i].Execute ();
		}
	}
}

(물론 굳이 조합 모드 를 사용 해 야 하 는 것 은 아니다)
사용:
		MacroCommand mc = new MacroCommand ();
		Battler wolv = new Battler ("wolv", 100, 10);
		Battler prox = new Battler ("prox", 50, 20);
		Battler shad = new Battler ("shad", 80, 10);

		Battler fman = new Battler ("fman", 60, 20);
		Battler magn = new Battler ("magn", 70, 10);
		Battler myst = new Battler ("myst", 40, 5);
		mc.Add (new AttackCommand (wolv, fman));
		mc.Add (new AttackCommand (prox, magn));
		mc.Add (new GuardCommand (shad));

		List actors = new List ();
		actors.Add (wolv);
		actors.Add (prox);
		actors.Add (shad);
		List enemies = new List ();
		enemies.Add (fman);
		enemies.Add (magn);
		enemies.Add (myst);
		foreach (var enemy in enemies) {
			if (enemy.HP < 50) {
				mc.Add (new GuardCommand (enemy));
			} else {
				var r = new System.Random ();
				Battler randTarget = actors [r.Next (0, actors.Count)];
				mc.Add (new AttackCommand (enemy, randTarget));
			}
		}
		mc.Execute ();

유 저 는 스스로 제어 가능 한 캐릭터 (wolv, prox, shad) 에 명령 을 추가 하고 게임 시스템 은 제어 할 수 없 는 캐릭터 (fman, magn, my st) 의 명령 을 생 성 합 니 다.마지막 으로 실행 하 는 것 은 RPG 게임 의 간단 한 절차 이다.
명령 모드 의 장점:
1. 작 동 하 는 대상 과 어떻게 결합 을 해제 합 니까?
2. 명령 대상 을 조작 하거나 확장 하거나 삭제 할 수 있 습 니 다.
3. 조합 모드 를 사용 하여 여러 명령 을 하나의 복합 명령 으로 조립 할 수 있 습 니 다.
4. 새로운 명령 을 추가 하면 다른 대상 을 바 꾸 지 않 아 도 됩 니 다.
5. 명령 은 자신 이 추가 되 거나 실 행 될 수 있 는 지 스스로 판단 할 수 있다.
6. 명령 로 그 를 생 성 할 수 있 습 니 다.
단점: 명령 류 가 많이 생 긴 다.(기획 이나 PM 은 항상 기괴 한 수 요 를 디자인 합 니 다. 기 존의 유형 을 통 해 하나의 명령 을 조합 할 수 있 습 니 다. 물론 가장 좋 습 니 다. 안 되면 한 가지 만 더 특별 하 게 실현 할 수 있 습 니 다)

좋은 웹페이지 즐겨찾기