设计模式在游戏客户端中的应用(一)

mvc不讲了。说一个非常有用的:策略模式。


策略模式的思想在设计模式里面写的非常清楚,概括下来就是将行为和行为的实现分离。在head 设计模式这本书里面讲的例子也非常容易理解,基本上可以直接搬到游戏中来。

如图:


在游戏中,玩家,怪味,NPC,坐骑,宠物,侠客等等,他们都是可以活动的对象,也有一些共同的行为,所以都可以由一个基类派生出来,但是他们也有很多不同的行为,比如NPC不能战斗,坐骑不能说话,等等。

策略模式为我们很好地解决了这个问题,方法如下:

1 将各个行为在基类做出相应的接口,比如上面图章actor这个类拥有6个接口,移动,跳跃,跑动,谈话,换装,战斗。然后actor类用空的实现(什么事情都不做)来实现这些接口。然后各个子类在继承actor类时,就有了对所有接口的一个空实现了。

2 分析各个子类需要的实现方式,分别实现为各个行为类,比如玩家需要跳跃,那么实现一个玩家跳跃类,在role对象初始化时,将这个跳跃类的对象复制给行为变量,这样玩家就可以跳跃了;


下面贴一些伪代码,帮助理解:

public class Actor
{
	public TalkInterface talk;
	public MoveInterface move;
	public FightInterface fight;
	
	public Actor()
	{
		talk = new DefaultTalk();
		move = new DefaultMove();
		fight = new DefaultFight();
	}
}

public class Role : Actor
{
	public Role()
	{
		move = new NormalMove();
		fight = new RoleFight();
	}
}

public class Horse : Actor
{
	public Horse()
	{
		move = new HorseMove();
	}
}

public class NPC : Actor
{
	public NPC()
	{
		talk = new NpcTalk();
	}
}

interface TalkInterface
{
	void doTalk();
}

interface MoveInterface
{
	void doMove();
}

interface FightInterface
{
	void doFight();
}

public class DefaultTalk : TalkInterface
{
	void doTalk() // do nothing
	{
	}
}

public class DefaultMove : MoveInterface
{
	void doMove() // do nothing
	{
	}
}

public class DefaultFight : FightInterface
{
	void doFight() // do nothing
	{
	}
}

public class NpcTalk : TalkInterface
{
	public void doTalk()
	{
		...
	}
}

public class NormalMove : MoveInterface
{
	public void doMove()
	{
		...
	}
}

public class HorseMove : MoveInterface
{
	public void doMove()
	{
		...
	}
}

public class RoleFight : FightInterface
{
	public void doFight()
	{
		...
	}
}


这样的好处就有很多了,比如用基类的引用类型去调用各个子类对象的各个行为都可以正常工作了。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值