Разработка игры Codeigniter - PullRequest
       6

Разработка игры Codeigniter

6 голосов
/ 14 декабря 2010

У меня достаточно разумный опыт работы с PHP (около 5 лет опыта работы с некоторыми веб-сайтами и двумя браузерными играми). Это первый раз, когда я действительно запутался с ядром ядра, а не просто разработал плагин или модуль для чего-то вроде Joomla. У меня большой опыт работы с другими объектно-ориентированными языками (например, Java).

Мой вопрос заключается в том, что я создаю сайт, очень похожий на обычный сайт, но я хочу, чтобы он был более гибким, и я не уверен, что «делаю все правильно». В некотором смысле, я чувствую, что создаю половину CMS.

Например, у меня есть главная страница, настроенная через контроллер, который контролирует, какие представления отображаются в данный момент. Страница основного вида выглядит так:

<?php $this->load->view("headerview"); ?>
<?php $this->load->view($contentview); ?>
<?php $this->load->view("footerview"); ?>

в самом файле представления (чтобы я мог динамически загружать представление содержимого, остальные не меняются). Это мой первый вопрос, так как я выполняю ВСЕ элементы управления через основной контрольный файл, это правильно?

Моя индексная функция устанавливает mainview как представление, которое будет загружено с переменными для «contentview» и «gameview». Когда «contentview» является игрой, она имеет разделенную панель, одна из которых отображает статистику игроков и тому подобное, а другая отображает любую страницу, на которой находится игрок (торговый магазин, битва, исследование мира и т. Д.). То, что здесь показано, - это переменная «gamecontent» (также передается в «главный» контроллер).

<?php $this->load->view("menubar"); ?>
<?php $this->load->view($gamecontent); ?>

Короче говоря, вся обработка представлений в настоящее время выполняется в главном контроллере, то есть в одном контроллере.

$data['title'] = "Experimental Page";
$data['maincontent'] = "gameview";
if($page == 1) {
    $data['gamecontent'] = "townview";
} else if ($page == 2) {
    $data['gamecontent'] = "merchantview";
} else if ($page == 3) {
    $data['gamecontent'] = "explorationview";
} else if ($page == 4) {
    $data['gamecontent'] = "hospitalview";
} else if ($page == 5) {
    $data['gamecontent'] = "fightview";
} else if ($page == 6) {
    $data['gamecontent'] = "adminview";
}

$this->load->helper(array('form','url'));
$this->load->library('form_validation');
$this->load->view('mainview', $data);

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

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

Может кто-нибудь помочь мне разобраться, как правильно организовать этот проект?

1 Ответ

3 голосов
/ 14 декабря 2010

Я использую компонент Symfony Event Dispatcher , чтобы сделать что-то подобное;компонент может быть установлен без использования Symfony Framework, так что вы можете использовать его с CodeIgniter, но вам может быть уже доступно что-то подобное;Я не знаю CodeIgniter.

Диспетчер событий - это общая реализация шаблона наблюдателя .

  • У меня есть список модулей, которые регистрируют себя в качестве наблюдателей для любых действий, которые они выполняют
  • Каждый запрос проходит через действие (например, "Townview")
  • Мой контроллер просто создает событие с тем, какое действие было в качестве имени;Затем система Event Dispatcher находит все модули, которые утверждают, что способны обработать это действие, и передает им управление

Таким образом, главный контроллер не должен меняться, независимо от того, сколько действий вы выполняете.иметь;он просто создает событие и выбрасывает его через диспетчера;если он не обрабатывается, он выдает огромную ошибку (в DEV) или хорошую ошибку (в PROD).

Это особенно полезно в нашем приложении, где у нас есть множество дополнительных компонентов, которые можно включать или выключатьдля разных пользователей / клиентов;нет сложной логики в контроллере, я просто не регистрирую модули, если они не включены для клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...