ФорумПрограммированиеPHP для идиотов → Архитектура классов и БД

Архитектура классов и БД

  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 5:57

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

    Спустя 71 сек.
    случайно закоммитил :-) сейчас будет продолжение …
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 2 июня 2010 г. 5:58, спустя 31 секунду

    Молодцы :)
    adw/0
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 6:05, спустя 7 минут 2 секунды

    Почва. Среди кучи свойств, имеет свойство "твердость" и метод утоптать(), который увеличивает твердость.
    При наступании игрока на этот кусок земли, выполняется последовательность действий:
    - получить объект из ячейки XY (select для определения типа куска ландшафта и, по необходимости, догрузка уникальных свойств)
    - вызвать метод утоптать() (update для изменениия поля)
    - получить новое состояние этого же объекта (ибо при изменении одного свойства могли изменится другие, например, "водопроницаемость")

    В итоге получаем 3-4 select и один update. Какось это по другому нормальные люди делают :)
    Можно просто процедуру влепить, но нужны классы для расширения других кусков ландшафтов (стена - потоптаться можно + разрушить))

    укажите, пжлст, где не так думаю .. или хоть что в гугл забивать :)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 2 июня 2010 г. 6:25, спустя 20 минут

    больше инфы
    ιιlllιlllι унц-унц
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 6:27, спустя 1 минуту 58 секунд

    artoodetoo, что именно еще поведать?
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 6:38, спустя 11 минут 18 секунд

    AndryG, а зачем 3-4 селекта? Их должно быть ровно столько же, сколько и при обычном (первоначальном) запросе состояния объекта, а по сути - один сложный запрос на выборку, вот и всего делов.
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 6:53, спустя 15 минут 2 секунды

    Куски ландшафта разбиты на группы. Эти куски имеют как общие свойства. так и индивидуальные. индивидуальные вынесены в отдельные таблицы для каждой группы.
    Получается … чтобы узнать общие свойства - один запрос, чтобы узнать индивидуальные - надо сперва узнать общие (группу).
    Есть базовый класс "кусокЛандшафта" у него есть потомки по группам (природные/рукотворные) и дальше потомки по конкретному типу (трава, стена, колодец).

    суть проблемы …
    Хотим наступить на конкретный кусок травы:
    Создаем объект Трава (создании объекта Трава, мы запросом (одним) выгребаем все данные о этом куске травы).
    Вызываем метод примять (update таблицы дополнительных свойств природных объектов)

    Нахрена я выгребал данные ?!
    Выбросить этот update в метод "Шагнуть()" класса "Олень" и вообще не создавать объекта Трава? Тогда придется такой же объект и в классе "Ураган" .. жопа :(

    Юзер делает шаг вправо
    один select, чтобы узнать, что там справа (стена/трава и т.д.)
    Если трава, то вызвать метод примять.
    Тут без предварительного select не обойтись - мы же не знаем, что там справа.
    Спустя 84 сек.
    Givi, проблема в том, что я. при создании объекта, выгребаю его данные. Хотя, в данном случае, они мне нафиг не нужны - я хочу сразу изменить значение, не читая его.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 2 июня 2010 г. 7:12, спустя 19 минут 20 секунд

    AndryG, мы даже приблизительно не знаем как выглядят твои объекты. ты какбы сам с собой разговариваешь.
    Вот совсем неконкретно "в общем" мне представляется такая схема:

    игровой цикл

    Отрисовка карты ->
    (1 сложныq select)


    Изменение состояния объектов ->
    (1 update на каждую изм-ую таблицу)

    redirect
    на первый шаг


    В моем представлении апдейт при игровом шаге и отрисовка карты это разные "страницы"
    ιιlllιlllι унц-унц
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 2 июня 2010 г. 8:14, спустя 1 час 1 минуту 25 секунд

    artoodetoo, пока классов нет - тут и затычка получилась.
    Есть структура БД.
    Теперь пытаюсь сюда навесит иерархию классов.

    Начинаю с классов. которые описывают объекты мира
    Иерархия примерно будет "Базовый для объектов мира - класс на каждую группу - класс на каждый тип"
    Получается у класса "природные объекты" (его потомками будут трава,кустарник, галька и т.д.) есть метод Примять()

    И вот тут я потерялся в связке "класс-БД"
    При создании класса - мы грузим его из БД – SELECT
    А я хочу всего примять траву - нафига я загружал его данные.
    Не грузить данные? А что обрабатывать тогда?
    писец.
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 2 июня 2010 г. 11:31, спустя 3 часа 16 минут 46 секунд

    а может не нужно их "обрабатывать"?
    ιιlllιlllι унц-унц
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 3 июня 2010 г. 2:58, спустя 15 часов 27 минут

    artoodetoo, развить можно? Не въехал :)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 3 июня 2010 г. 3:07, спустя 9 минут 32 секунды

    Ну предположим такой update:

    UPDATE objectmap SET state="crumpled" WHERE (x=:x) AND (y=:y) AND (kind="grass")

    kind="grass" гарантирует, что мы будем топтать только траву :) зачем надо что-то считывать?
    ιιlllιlllι унц-унц
  • AndryG

    Сообщения: 237 Репутация: N Группа: Адекваты

    Spritz 3 июня 2010 г. 4:18, спустя 1 час 10 минут 35 секунд

    Вариант :)
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 4 июня 2010 г. 0:38, спустя 20 часов 20 минут 45 секунд

    Читал про паттерны проектирования и натолкнулся на пример, отдалённо напоминающий твоего топтателя травы:
    шаблон «Заместитель» (Proxy) в игре «Сапер»
    http://habrahabr.ru/blogs/complete_code/88722/#habracut

    (я совсем не рекомендую так усложнять «топтателя», просто пример)
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!