Враг / бот часть A.I. модели или контроллера в игре MVC

Удалите padding-top: 100px; и замените его на padding-bottom:100px; из кода css, и проблема решена, потому что padding-top вводится в текст в поле ввода текста.

input {
	padding-bottom: 100px;
	width: 500px;
}

input[type=text] {
	border: 2px solid darkgrey;
	border-radius: 10px;
<input type='text'/>

5
задан Jon Seigel 22 May 2010 в 22:15
поделиться

9 ответов

Помните, что MVC был первоначально просто GUI архитектурный шаблон. Таким образом, это имеет не удивительно, что это не отображается хорошо на AI, сети, или что бы то ни было. Но существуют все еще некоторые преимущества для использования его здесь. Но то, чего достигает код, не так важно как где он находится в цепочке. Просто, потому что что-то похоже, это является внутренним, не означает, что это и поэтому не должно считаться как таковым.

например, Если Вы пишете бота, возможности высоки, что Вы будете по существу просто писать сценарии для управления символами. Так в этом смысле интерфейсом сценария является существующий ранее Контроллер, и Ваши сценарии являются абсолютно внешними к этому. Вы даже не идете в какой-либо степени Модель для записи того AI высокого уровня..

Теперь, если Вы были исходным программистом, который должен был записать низкому уровню функциональность AI, которая инициирована от любого взаимодействием плеера (например, нажимающий где-нибудь, чтобы начать идти туда) или сценарием стиля бота, затем Вы писали бы это в Модель.

Это может казаться неинтуитивным, чтобы иметь любое единственное понятие, такое как промежуток 'AI' полностью из модели через контроллер и право тому, кто бы ни или независимо от того, что управляет контроллером, но это - то, как это идет при попытке к карте 2 совсем других понятий друг на друга. Очевидно при рассмотрении его с точки зрения разработчика, пытающегося представить те же интерфейсы для неперсонажей, как они делают для персонажей - в конечном счете, AI должен включить обоих принятие решений высокого уровня, которое агент за пределами системы сделал бы, в дополнение к низкоуровневой реализации, которая обычно существует и для плееров и для неплееров в системе.

5
ответ дан 18 December 2019 в 05:44
поделиться

MVC работает очень хорошо архитектурой для большого количества приложений. Некоторые приложения могут найти, что MVC работает хорошо на внешние интерфейсы, особенно Пользовательские интерфейсы как часть более сложной архитектуры.

Если Вы пробуете к "глухой посадке" проблему в шаблон, это, вероятно, не правильный шаблон. Используйте MVC для UI - используют другие шаблоны (Шина сообщения, или Наблюдатель/Слушатель, и т.д....) или другие методы OO для AI (@Bill предложение Ящерицы Стратегии все еще применяется).

Используйте свою всю панель инструментов - не только молоток.;-)

10
ответ дан 18 December 2019 в 05:44
поделиться

Вражеский AI имеет модель - ее интеллектуальные внутренности, которые указывают, как играть в игру - и это использует контроллеры, доступные и плеерам - людям и NPCs для управления его состоянием в игровой среде.

7
ответ дан 18 December 2019 в 05:44
поделиться

Думайте о простой игре как tic-tac-toe, где Вы хотели бы, чтобы различные компьютерные уровни трудности играли против. Если Вы заставляете каждую трудность выровнять Стратегию, легко заглядывать различным реализациям.

7
ответ дан 18 December 2019 в 05:44
поделиться

Это кажется мне как, он моделирует плеер - человека, таким образом это должно быть в том же положении, которое плеер - человек. Так, это - внешний элемент, который взаимодействует с контроллером. (По очевидным причинам дисплей не действительно необходим для него.)

Править: На самом деле я забираю это. Это будет иметь дисплей, просто не человекочитаемый. "Дисплей" будет ответственен за передачу информации состояния игрой к AI, даже если это будет означать передавать сериализированные данные потоком к нему.

Часть 2: О, я вижу... Это - не совсем тот же тип AI, как я думал. Я предполагаю, что это могло все еще быть обработано тот же путь, но затем это вынудит новую функциональность быть выставленной в контроллере, который не мог бы иметь смысла. (Например, контроллер должен был бы выставить перемещение и единицы игроков и единицы компьютеров.)

Я поместил бы поведение в модель:

Goomba.move()
{
    /* Move Goomba forward one unit. */
}

И затем вызовы того поведения входят в контроллер.

Controller.advanceTime()
{
    foreach(Goomba goomba in state.getGoombas())
    {
        goomba.move();
    }
}
1
ответ дан 18 December 2019 в 05:44
поделиться

вражеская модель AI имела бы знание правил игры и изменила бы ее внутреннее состояние согласно тем правилам. Игровой контроллер (контроллеры) предоставляет AI знание состояния внешней игры, что это может использовать, чтобы решить, как это должно изменить свое внутреннее состояние.

(Что я сначала записал здесь:)

Часть AI, который взаимодействует с игровым миром, была бы в контроллере. Часть AI, который принимает решения как автономный агент, была бы в модели. Контроллер обновил бы модель AI с состоянием, о котором это должно основывать свои решения, и контроллер также изменил бы игру и представил бы представление на основе любых изменений в модели AI.

Для Goomba игровой контроллер обновил бы модель Goomba с местоположением Mario (если бы это находится в своем виде), и модель Goomba обновила бы себя как, туда, где это намеревается переместиться. Контроллер затем переместил бы Goomba (т.е. обновил бы местоположение модели), при отсутствии препятствий и представляют представление с новым состоянием Goomba.

1
ответ дан 18 December 2019 в 05:44
поделиться

Я не уверен, где это вписалось бы в MVC. Этот код psudo является чрезвычайно упрощенной версией того, как я сделал* путь, находящий AIS.

sprite {
  x,y
  image // this object contains everything about drawing
  path[] // an array of path nodes generated by my AI
  onNode(node) {
    if (x == node.x) && (y == node.y) return true
    return false
  }
  update () {
    moveto(path.last())
    if (onNode(path.last())) path.pop()
    if (path.empty()) path = doAI()
  }
  doAI() {
    ...
    return newPath
  }
  moveto(node) {
    ...
  }
  draw (screen) {
    if (screen.over(x, y)) image.draw(x-screen.x, y-screen.y)
  }
}

screen = //something the platform would create
spriteCollection = //my game objects

foreach (sprite in spriteCollection) {
  sprite.update()
  sprite.draw(screen)
}
0
ответ дан 18 December 2019 в 05:44
поделиться

По-моему, в любой реализации MVC, модель должна содержать доменную логику - каждый раз, когда это - автономный объект (логика stiched-в в методах), или обертка потока сокета (где логика выполняется через внешний ресурс - да, думайте о многопользовательском). Контроллер должен использоваться в качестве вызывающей стороны/обработчика основанных на модели на некоторых внешних переменных (например, параметры CLI, диспетчер события). И затем возвратите требуемые данные (как массив, сериализировал Вар или некоторый Объект Передачи данных) к надлежащему представлению (gamescreen, консольный терминал).

С наилучшими пожеланиями, Alan

0
ответ дан 18 December 2019 в 05:44
поделиться

Ни один. Я программировал бы AI как независимый агент, общающийся с моделью через контроллер. Или если Вам нравится, AI является моделью, но не моделью.

-1
ответ дан 18 December 2019 в 05:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: