敌人/机器人AI是MVC游戏中模型或控制器的一部分

Iai*_*ain 5 model-view-controller artificial-intelligence

它可能是模型的一部分,因为它是游戏业务逻辑的一部分.

它可能是控制器的一部分,因为它可以被视为模拟玩家输入,这将被视为控制器的一部分,对吧?或者是吗?

那个普通的敌人怎么样,比如马里奥的goomba?

更新:哇,这真的不是我期待的答案.据我所知,AI是自主游戏系统的内部部分,因此也就是模型.我还是不相信.

Ken*_*tle 10

MVC作为大量应用程序的体系结构非常有效.某些应用程序可能会发现MVC适用于外部接口,尤其是用户界面,这是更复杂架构的一部分.

如果你发现自己试图将一个问题"强制适应"成一个模式,那么它可能不是正确的模式.使用MVC作为UI - 使用其他模式(消息总线,观察者/监听器等等)或其他OO技术用于AI(@Bill Lizard的策略建议仍然适用).

使用整个工具箱 - 而不仅仅是锤子.;-)


Bil*_*ard 7

想象一下像tic-tac-toe这样的简单游戏,你会想要不同的计算机难度级别.如果您将每个难度级别设为策略,则可以轻松实现不同的实现.


Dav*_*lle 7

敌人AI 有一个模型 - 它的智能内部,指定如何玩游戏 - 它使用人类玩家和NPC可用的控制器来操纵其在游戏环境中的状态.


Kyl*_*tan 5

请记住,MVC最初纯粹是一种GUI架构模式.因此毫不奇怪,它不能很好地映射到人工智能,网络或其他任何东西.但是在这里使用它仍然有一些好处.但是代码所实现的并不像它在链中的位置那么重要.只是因为它看起来像是内部的,并不意味着它是,因此不应该这样计算.

例如.如果您正在编写机器人,那么您很可能只是编写脚本来操纵角色.所以从这个意义上讲,脚本界面是预先存在的Controller,你的脚本完全是外部的.你甚至不去模特附近的任何地方写那个高级AI ..

现在,如果你是原始程序员,他必须编写低级别的AI功能,这是由玩家互动(例如,点击某处开始在那里开始)或者通过机器人风格的脚本触发的,那么你就会写进入模型.

任何单一的概念,如'AI',从模型,控制器,直到任何人或任何操纵控制器的方式,都可能看起来不直观,但是当你试图将两个非常不同的概念映射到彼此.很明显,当你从开发人员的角度来看它时,试图为非玩家角色提供相同的界面,就像他们为玩家角色所做的那样 - 最终,AI必须包含高级决策,除了通常存在于系统内的玩家和非玩家之间的低级实现之外,系统还将进行.