我一直在为现代 MUD 引擎创建原型。MUD 是一种简单的模拟形式,并提供了一种很好的方法来测试我正在研究的概念。这导致我在我的代码中有几个地方有些不清楚,并且设计受到质疑(可能是由于它存在缺陷)。我首先使用模型(我可能需要更改它)并且我设计了一个自上而下的游戏对象架构。我可能做错了。
我所做的是创建一个 MUDObject 实体。这个实体实际上是我所有其他逻辑结构的基础,例如角色、他们的物品、种族等。我还创建了一组三个元类,它们用于逻辑目的以及属性、事件和标志. 它们相当简单,并且都继承自 MUDObject。
MUDObject 类旨在为所有对象提供默认数据行为,包括删除死对象。自动清理地板。等等。如果需要,这也旨在虚拟地促进这种逻辑。例如,检查房间以查看效果是否已结束并删除效果(删除标志)。
public partial class MUDObject
{
public virtual void Update()
{
if (this.LifeTime.Value.CompareTo(DateTime.Now) > 0)
{
using (var context = new ReduxDataContext())
{
context.MUDObjects.DeleteObject(this);
}
}
}
public virtual void Pause()
{
}
public virtual void Resume()
{
}
public virtual void Stop()
{
}
}
我还有一个 World 类,它派生自 MUDObject 并包含区域和房间(其中又包含游戏对象)并处理用于运行更新的操作的计时器。(可能会被移动,把它放在这里好像它会限制它只有当时世界上的物体。)
public partial class World
{
private Timer ticker;
public void Start()
{
this.ticker = new Timer(3000.0);
this.ticker.Elapsed += ticker_Elapsed;
this.ticker.Start();
}
private void ticker_Elapsed(object sender, ElapsedEventArgs e)
{
this.Update();
}
public override void Update()
{
this.CurrentTime += 3;
// update contents
base.Update();
}
public override void Pause()
{
this.ticker.Enabled = false;
// update contents
base.Pause();
}
public override void Resume()
{
this.ticker.Enabled = true;
// update contents
this.Resume();
}
public override void Stop()
{
this.ticker.Stop();
// update contents
base.Stop();
}
}
我对两件事感到好奇。
有没有办法重新编码上下文,以便它为从 MUDObject 派生的每种类型具有单独的 ObjectSet?
- 即 context.MUDObjects.Flags 或 context.Flags
- 如果不是,我该如何专门查询子类型?
直接放入 EF 实体时,我正在使用的更新/暂停/恢复/停止架构是否正常工作?给出的比它仅用于数据目的?
- 锁定会成为问题吗?
- 部分类在进行更改时会自动提交更改吗?
- 使用平面存储库并直接在游戏引擎中执行此操作会更好吗?