2016-02-16 2 views
0

Я пишу текстовую игру, где хочу, чтобы пользователи могли манипулировать любым элементом.java скрипт текстовые игры и объекты

Я хочу, чтобы пользователь мог сказать, например: «Я бросаю бутылку масла в монстра». Теперь, когда это произойдет, [бросок] будет действием, [бутылка масла] - это предмет инвентаря с имуществом [содержит масло], а монстр будет ближайшим монстром в комнате, если не указано иное.

Код должен анализировать различные свойства всех этих вещей, а затем выбирать действия, которые заставляют эти вещи взаимодействовать.

Когда я пишу История игры код будет как следует

* room.darkroom.1 «проснуться» [...] все размыто, голос звучит странно, как будто вторя вниз длинный туннель. Из того, что вы можете видеть, вы можете сказать [вы находитесь в темной комнате], ваше зрение размывается от белого до темного. [ПК находится в очень темной комнате. Внутри этой комнаты все скрыто в темноте. У северной стены есть запертая толстая деревянная дверь. южная стена имеет бочку, наполненную маслом, содержащим бутылку с маслом. В восточной части комнаты расположены 2 ящика среднего размера, в одном ящике - кремневый и ржавый кинжал. В западной части комнаты [маленькое окно] */room.darkroom.1

Сценарий принимает все эти слова и применяет к ним свойства, которые рандомизируют определенные элементы, которые остаются неустановленными. Поэтому, если вы скажете «стул», он перейдет к свойствам стула и произвольно назначит неустановленные свойства. Одно свойство стула будет существенным. Если его не указано, что его стул из дуба, то сценарий должен выбрать из любого свойства материала и назначить его. Этот новый стул получит несколько свойств и будет сохранен для дальнейшего использования в базе данных со всеми свойствами.

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

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

Как указать, например, когда «сломан» содержит стулья и ломовые материалы? Ножки стула и ломовой материал должны были наследовать свойства разрушенного стула, например, дуб/легковоспламеняющийся/разрушаемый. Очевидно, что, как указывалось ранее, ему не обязательно наследовать легковоспламеняющиеся или разрушаемые, если дуб - это часть, которая удерживает это значение.

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

Я начал создавать массивы с ключами, которые будут зацикливаться ... Но теперь я думаю, что я должен использовать элемент JavaScript на основе объектов.

Вот что я начал делать, но я остановился сразу:

var language = { 
    // key currentmodifyers possible modifyers action/condition description of item 

    item: ";medium,material;;its a thing thats not a person", 
    chair: "item,chair_Legs;;[email protected]/broken,@[chair ]scraps/destroyed; and someone could sit on it. ", 
    chair_leg:"item,blunt,light," 
} 

У меня есть так много определений, чтобы писать так было бы стыдно, чтобы начать писать все это, и тогда придется делать это снова когда я обнаруживаю лучший способ.

Я рассматриваю различные способы создания объектов в JavaScript, но хотел бы, чтобы лучший способ был у кого-то испытанного.

Понимание сложности моей проблемы, что является лучшим способом хранения и применения свойств?

+1

Пожалуйста, перефразируйте свой вопрос в более сжатом виде. Как и сейчас, у вас есть пять абзацев, которые, похоже, не связаны с вашим вопросом, и я предполагаю, что это «Лучший способ хранения и применения свойств». Кроме того, нет никакого «лучшего» способа создания/использования объектов javascript. – jperezov

+0

Слишком много, чтобы читать здесь. Пожалуйста, скорректируйте немедленную проблему до какого-то быстрого обзора. Удалите всю бессмысленную преамбулу. – charlietfl

+0

Если бы я знал ответ, я бы не стал спрашивать об этом. Вам нужно понять сложность того, что я пытаюсь сделать, чтобы предложить лучший способ хранения переменных. Если у вас нет времени, чтобы прочитать несколько абзацев, вы не поймете, в чем моя проблема.Я ценю полезные комментарии, но я не ищу муху, комментируя правильный синтаксис, но вдумчивое и опытное утверждение относительно лучшего метода структуры, основанного на моих потребностях. , –

ответ

1

Есть на самом деле две хорошие мысли в вопросе:

Но теперь я думаю, что я должен использовать элемент на основе объектного JavaScript.

Вам необходимо использовать объекты вместо массивов, идеи ООП могут быть непосредственно применены к вашим описаниям. Некоторые объекты состоят из небольших частей («состав» в ООП), а некоторые наследуют свойства других объектов («наследование»).

Таким образом, у вас может быть базовый класс Item, который определяет основные операции и свойства для всех объектов (например, они имеют разные свойства и могут делать некоторые вещи).

Тогда вы можете добавить объекты, такие как StaticItem (будет базой для стульев, ночных столиков и т. Д.) И LiveBeeing (монстры и т. Д.). И теперь вы можете создать Chair (псевдокод):

StaticItem extends Item 
    this.material = oak // oak is an object of OakMaterial 

    // is this static item flamable? 
    this.isFlamable = function() { 
     // we "redirect" flamability detection to the material 
     return this.material.flamable(); 
    } 


Chair extends Static 
    // break this chair! 
    this.break = function() { 
     // when it is broken we return a HeapOfCrap, it is a 
     // Static subclass which contains some sub-items 
     // In this case the heap contains 4 chair legs of the 
     // same material as the chair 
     return HeapOfCrap([ 
      new ChairLeg(this.material), new ChairLeg(this.material), 
      new ChairLeg(this.material), new ChairLeg(this.material) 
     ]) 
    } 

И так далее, вы должны планировать внимательно приемлю структуру и есть хорошее поле, чтобы применить некоторые из design patterns.

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

Вторая хорошая мысль в вашем вопросе об огромном количестве работы:

У меня есть так много определений, чтобы писать так было бы стыдно, чтобы начать писать все это, и тогда придется делать это снова когда я обнаруживаю лучший способ.

Вы абсолютно прямо здесь, можете ли вы использовать объекты или массивы или что-то еще - не пытайтесь сразу описать всю игру.

Выберите несколько базовых элементов, таких как «Комната», «Дверь», «Стул», «Монстр», «Игрок» и попытайтесь закодировать минимальную игру только с этими элементами.

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

+0

Спасибо, что это очень полезно. Я также купил эту книгу, на которую вы ссылались. Я использую объектно-ориентированный код JavaScript и C# в течение 12 лет как хобби, и кажется, что это первый раз, когда мой проект был достаточно большим, чтобы я мог использовать oop. Еще один вопрос. Скажем, у меня есть предметы, животные, условия, чтобы охватить весь список имен игр. Помимо прокрутки через них, например Items {list {list {{list {}}}}. есть ли более простой способ перебрать все переменные, чтобы сравнить их с командами? –

+0

@PeterSMcIntyre Отлично! ИМО эта книга - лучшая, чтобы действительно узнать, как ООП работает на практике. Что касается вашего вопроса - я думаю, вы можете попробовать Composite pattern, чтобы структурировать объекты и Visitor или Command для соответствия командам объектам, для более подробной информации о книге. –

Смежные вопросы