Jump to content

Report

  • Similar Content

    • By cyklop77
      Помогите пожалуйста разобраться в вопросе организации кода в простейшей игре. и в результате скажите:
      1. правильный первый вариант
      2. правильный второй вариант
      3. оба варианта правильные и используются в зависимости от ситуации
      4. давно уже существует паттерн %patternname% и с успехом используется в такой ситуации
      Допустим есть 2D-ландшафт, над ним летит корабль игрока. Корабль может стрелять ракетами. 
      Описываю первый вариант организации ООП-кода на js(в js контроллер и представление совмещены):
      инициализация игры начинается с создания spaceView, который в свою очередь инициализирует: 
      ландшафт,
      корабль игрока
      PlayerShipView - корабль игрока. Он может стрельнуть ракетой(PlayerRocketView). То есть объект корабля связан с объектом ракеты
      Ракета может столкнуться с ландшафтом. То есть объект ракеты связан с объектом spaceView
      В результате: 
      Имеем 3 связанных объекта, но каждый из них содержит только свою функциональность(это плюс). 
      Но если в программе придётся что-нибудь менять(например отключить кораблю игрока возможность стрелять ракетами), то вносить правки придётся в разных местах программы(это минус).
      Есть несколько глобальных переменных(это минус) 
      Описываю второй вариант организации ООП-кода на js(в js контроллер и представление совмещены):
      инициализация игры начинается с создания spaceView, который в свою очередь инициализирует: 
      ландшафт,
      корабль игрока,
      ракеты(есть нажата кнопка "огонь")
      и вообще все остальные объекты
      Таким образом: 
      Если например игрок нажимает "огонь", то инициализация ракеты происходит в spaceView, а PlayerShipView вообще ничего не знает об объекте ракеты(это плюс).
      Соответственно нет глобальных переменных(это плюс).
      Но в spaceView содержится куча логики(всей игры, в котрой кроме корабля игрока и ракеты существует очень много других объектов).

      Для наглядности я реализовал первый вариант здесь: https://github.com/zlodiak/space-1
      В нём используются различные библиотечки типа backbone, underscore, но незнание их не мешает пониманию общей структуры программы
      Не бейте(ногами), я знаю что вопрос для телепатов
    • By cyklop77
      ребята, помогите пожалуйста советом
      я сделал на backbone форму с валидацией: https://jsfiddle.net/9t1cwfrv/5/  .пока для простоты использовал только одно поле: 
      github: https://github.com/zlodiak/shippingCalculator1 
      проблема в том, что в финальной версии калькулятора полей будет много. поэтому мне хотелось бы чтобы каждое представление наследовало от какого-нибудь общего родительского 'класса' методы: 
      notValidMarkAdd(),
      validMarkAdd()
      иначе их придётся дублировать в каждом представлении
      как бы это реализовать?
       
    • By cyklop77
      помогите пожалуйста разобраться в в вопросе. привожу код на питоне, но сам язык здесь не важен потому что вопрос принципиальный. вот простыня кода, но чтобы ответить на вопрос смотреть его не обязательно:
       
      здесь происходит приблизительно следующее. я создаю класс с общим для всех потомков свойством. затем классы для потомков, затем для каждого класса потомка фабрику, затем класс синглтон, который создаёт потомков(о которых я сказал чуть выше)
       
      я поместил указатели на всех созданных потомков в переменную класса синглтона и в конце скрипты вывел всех потомков так:
       
      for boat in World.boats: print(boat) for raft in World.rafts: print(raft) в результате получил в консоль следующий вывод:
      (python3_env)kalinin@kalinin ~/python3/python3_files/boats4 $ python index.pyWorld: {'creared_at': 'Saturday, 05. December 2015 09:40AM'}worlds quantity: 1Boat: {'oars': 2, 'peoples': 7, 'speed': 60, 'color': 'blue', 'name': 'beda_0'}Boat: {'oars': 0, 'peoples': 10, 'speed': 100, 'color': 'yellow', 'name': 'beda_1'}Boat: {'oars': 0, 'peoples': 7, 'speed': 60, 'color': 'magenta', 'name': 'beda_2'}Boat: {'oars': 1, 'peoples': 9, 'speed': 60, 'color': 'red', 'name': 'beda_3'}Raft: {'sails': 1, 'peoples': 1, 'speed': 10, 'color': 'magenta', 'name': 'ra_0'}Raft: {'sails': 1, 'peoples': 2, 'speed': 30, 'color': 'blue', 'name': 'ra_1'}Raft: {'sails': 1, 'peoples': 2, 'speed': 10, 'color': 'magenta', 'name': 'ra_2'}Raft: {'sails': 0, 'peoples': 2, 'speed': 10, 'color': 'magenta', 'name': 'ra_3'}но совесть мне нашёптывает в одно ухо, что хорошо бы сделать по человечьи и, используя self, всех потомков поместить в переменную объекта, а не класса. однако дьявол в другое ухо нашёптывает, что если уж у меня синглтон по определению может существовать только в единственном экземпляре, то вполне допустимо оставить всё как есть(то есть использовать пременную класса)
       
      опытные программисты, что посоветуете использовать для хранения указателей? переменную класса или переменную объекта?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy