Denken Sie daran, dass MVC ursprünglich ein reines GUI-Architekturmuster war. Es ist also keine Überraschung, dass es nicht gut zu KI, Netzwerken oder was auch immer passt. Aber es gibt noch einige Vorteile, es hier zu verwenden. Aber was der Code erreicht, ist nicht so wichtig wie in der Kette. Nur weil etwas aussieht, als sei es intern, bedeutet das nicht, und sollte daher nicht als solches gezählt werden.
z. Wenn Sie einen Bot schreiben, sind die Chancen groß, dass Sie im Grunde nur Skripte schreiben, um die Charaktere zu manipulieren. In diesem Sinne ist das Skript-Interface der bereits vorhandene Controller und Ihre Skripte sind komplett extern. Du gehst nicht einmal irgendwo in die Nähe des Modells, um diese hohe AI zu schreiben.
Nun, wenn du der ursprüngliche Programmierer wärst, der Low-Level-AI-Funktionalität schreiben müsste, die entweder durch Spielerinteraktion ausgelöst wird (z. irgendwo klicken, um dort zu laufen oder mit einem Bot-Skript, dann hättest du das in das Model geschrieben.
Es mag nicht intuitiv erscheinen, wenn ein einzelnes Konzept wie "AI" den ganzen Weg vom Modell über den Controller bis zu wem oder was auch immer den Controller manipuliert, aber so geht es, wenn Sie versuchen, 2 zuzuordnen sehr unterschiedliche Konzepte aufeinander. Es ist offensichtlich, wenn man es aus der Perspektive eines Entwicklers betrachtet, der versucht, die gleichen Schnittstellen für Nicht-Spieler-Charaktere wie für Spieler-Charaktere zu präsentieren - schließlich muss die KI sowohl die hochrangige Entscheidung treffen, die ein Schauspieler außerhalb von ist Das System würde zusätzlich zu der Low-Level-Implementierung, die normalerweise sowohl für Spieler als auch für Nicht-Spieler innerhalb des Systems existiert.
In einem Spiel kann das Modell jedoch seinen eigenen Status ändern, also warum müssen Sie den Controller durchlaufen? – Iain
Sie benötigen einen Controller, wenn Sie den Status eines anderen Modells ändern. Es ist in Ordnung, wenn ein Modell seine eigenen Interna ändert, aber anderer Code sollte über einen Controller gehen. –