Взаимодействие с кодированием в текстовом приключении

РЕДАКТИРОВАТЬ: Если вам не хочется читать этот гигантский вопрос, я поместите резюме внизу.

I ' m в настоящее время работает над своего рода «фреймворком» для текстового приключения, которое я собираюсь сделать на C # в качестве упражнения по кодированию. В этой структуре возможные действия определяются классом «Взаимодействие».

Потенциальными «активными» объектами являются предметы инвентаря (палка, пистолет, меч), ​​предметы окружающей среды (стена, дверь, окно) и персонажи (люди, животные ). У каждого из них есть свойство, которое представляет собой список взаимодействий. На данный момент взаимодействие - это, по сути, пара значений имени «действие / ответ». Когда вы набираете «разбить окно», он просматривает все возможные действия, которые есть у игрока, и соответствует теме (в данном случае «Окно»). Затем выясняется, что действие - "Smash". и просматривает список взаимодействий в окне (элемент среды), чтобы получить ответ на действие Smash, а затем записывает его в консоль.

Это все сделано, но вот в чем я застрял:

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

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

ЛИБО - субъект действия (предмет инвентаря, предмет окружающей среды или персонаж ) меняет описание НАПРИМЕР. "пробить стену" может изменить описание стены, чтобы описать вмятину в стене ИЛИ - объект действия заменяется другим элементом НАПРИМЕР. «разбить бутылку» приводит к изменению «бутылки» на «разбитую бутылку» или «убить Джона» приводит к замене персонажа Джона на предмет окружающей среды «труп Джона».

- возвращает ответ, описывающий предыдущее изменение НАПРИМЕР. «Осколки бутылки разбросаны по полу»

- Описание области изменено. НАПРИМЕР. "разбить лампочку" приводит к тому, что описание комнаты меняется, чтобы описать черную как смоль комнату

- Предметы добавляются / удаляются из инвентаря или окружающей среды НАПРИМЕР. "забрать бутылку". Теперь у вас есть бутылка в вашем инвентаре, и бутылка удалена из окружающей среды.

- Направления, доступные для движения, и области, к которым они ведут, изменены НАПРИМЕР. «открыть дверь ключом» позволяет вам переместиться на восток в другую комнату

- Игрок перемещается в новую область НАПРИМЕР. «иди на север» перенесет вас в другую область.

Мне нужно каким-то образом в общем виде определить, какие из этих последствий должно вызывать конкретное Взаимодействие, и вызвать их. Действие потенциально может иметь несколько из этих последствий или только одно.

Например, если предметом является Бутылка:

« наполнить бутылку водой » сначала вернет ответ, описывающий это вы наполнили бутылку водой. Затем он заменит предмет "бутылка" предметом "бутылка воды". Это два последствия: возврат ответа и замена элемента.

Допустим, вы должны были сделать « бросить бутылку воды в окно ». Это более сложно. Сначала он возвращал ответ, описывающий происходящие события: бутылка и окно разобьются, и вода разнесется повсюду. Бутылка будет удалена из инвентаря игрока. Затем « бутылка с водой » будет заменена «разбитой бутылкой», а «Окно» будет заменено на «Разбитое окно». Описание области также изменится, чтобы отразить это. Это пять последствий: возврат ответа, удаление предмета из инвентаря, замена двух предметов и обновление описания текущей области.

Как вы можете видеть, мне нужен общий способ определения для каждого взаимодействия ", каковы будут последствия этого действия, и соответствующим образом обновить другие объекты, такие как Предмет, Игрок (для инвентаря) и Область.

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

РЕДАКТИРОВАТЬ: Есть ли способ определить метод для взаимодействия, которому я могу передать ряд методов для вызова (и их параметров)? Первоначальный возвращенный ответ будет обязательным последствием по умолчанию, а затем могут быть дополнительные, если они указаны.

Например, в приведенных выше примерах для первого взаимодействия " Чтобы прояснить ситуацию и попытаться резюмировать проблему:

В моей игре есть объекты, требующие действий (бутылка, стена, Джон). У каждого объекта Actionable есть список Объекты взаимодействия, которые описывают, как игрок может с ними взаимодействовать. На данный момент у Взаимодействия есть Свойство "Name" ("throw", "hit", "break") и возвращает Response ("You throw the").

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

«бросить стеклянную бутылку»
- возвращается ответ («Вы бросили стеклянную бутылку».)
- «Бутылка» удалена из инвентаря игрока.
- Заменяется на новый, чтобы отразить изменение. («Бутылка» заменена на «Разбитая бутылка»).
- Возвращается второй ответ («Осколки стеклянной бутылки рассыпаны по полу»).

«бросить стеклянную бутылку в окно»
- возвращается ответ («Вы бросили стеклянную бутылку в окно».)
- Объект «Бутылка» удален из инвентаря Игрока.
- Объект заменяется новым объектом, чтобы отразить изменение. («Бутылка» заменена на «Разбитая бутылка»).
- Второй необязательный объект заменяется новым, чтобы отразить изменение. («Окно» заменено на «Разбитое окно»).
- Свойство «Описание» текущей области обновлено. («Вы стоите в комнате с единственным разбитым окном».)

Когда я создаю взаимодействия, как я могу изменять дополнительные действия, которые они выполняют, например, изменение статуса? к теме, или изменения в текущем описании Области?

Если вам нужно больше примеров действий, как указано выше, дайте мне знать, и я сделаю еще несколько.

10
задан Textmode 29 August 2013 в 07:15
поделиться