|
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 4
|
|
Создание квест-игры25.04.2018, 22:25. Показов 14731. Ответов 7
Нужно создать текстовую квест-игру или скорее визуальную новеллу. По типу: сделал одно действие (нажал кнопку), стало доступно другое действие, а если до этого ты нажал другую кнопку, то будет другое. Самое главное - реализовать разветвление сюжета. Проблема в том, что одна и та же кнопка в разных случаях должна выполнять разные действия.
Для начала, у нас есть форма, на ней внизу 6 кнопок (максимальное число вариантов), выше - лэйбл, куда выводится результат действия, ещё выше - пикчербокс, где сменяются картинки, в зависимости от локации и ваших действий. Так вот, каким образом, можно реализовать простую схему? На форме видимы 2 кнопки - b1 и b2, при нажатии на b1 в лэйбл добавляется текст, изменяется название кнопок на другие варианты, становится видимой кнопка b3. Теперь уже, если ещё раз нажать на b1 - в лэйбл добавится другой текст, так же сменится текст на кнопках. Но если бы мы в самом начале нажали бы на b2, то сейчас бы у нас в лэйбле был бы совсем другой текст, а при следующем нажатии на b1, кнопка b3 скрылась и мы бы возвратились в самую первую позицию. Я понимаю, что такое можно сделать с помощью условий. Но это только для двух последовательных действий, а если надо прописать целое дерево сюжета? Как тогда быть? Вот в консоле это реально сделать, потому что там есть возможность остановки кода - ReadLine(). Таким образом, можно легко весь сюжет построчно прописать. А как бы подобное реализовать в WindowsForms, подскажите, пожалуйста...
0
|
|
| 25.04.2018, 22:25 | |
|
Ответы с готовыми решениями:
7
Текстовый рпг-квест Создание мини-игры c# Создание игры наподобие монополии |
|
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
|
|
| 25.04.2018, 23:11 | |
|
Романов Сергей, если честно, так и не понял в чем суть вопроса... Как сделать, чтобы одна кнопка выполняла разные действия в зависимости от сюжета?
0
|
|
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
||||||
| 26.04.2018, 09:33 | ||||||
|
Я так понял что вам надо последовательность путем нажатия на кнопки задавать. Так это просто сделать:
Кликните здесь для просмотра всего текста
Остальное только загрузка текста и т. д.
1
|
||||||
|
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 4
|
|
| 07.05.2018, 21:09 [ТС] | |
|
Aferuga, Не понятно, как сделать дерево сюжета. Если я, допустим, начинаю, прописывать последствия через вложеные switch, то код у меня просто выполняется до конца и всё, то есть от игрока уже ничего не зависит. Я хочу, чтобы програма дожидалась действия пользователя и только потом двигалась дальше на следующий вложеный в определённый case switch или даже на предыдущий.
Каждая кнопка у меня переопределяет переменную b, а переключатели уже смотрят на какой case отправиться. А в case уже идёт изменение текста в label, изображения и названия кнопок. Добавлено через 10 минут Shogun31337, именно. Допустим, у нас в начале игры доступна только одна кнопка - Начать. Мы её нажимаем, тепер у нас уже есть выбор из 3х кнопок - Поесть, Поспать, Погулять (это та кнопка, которая раньше была "Начать"). Теперь, если мы нажмём Поесть, нам предложатся варианты еды, Поспать - время отдыха, а Погулять - где. И всё это выполняют одни и те же кнопки. Надо сделать как то так, чтобы при нажатии Поспать нам не предложились варианты еды...
0
|
|
|
|
|
| 07.05.2018, 21:16 | |
|
Я бы в данном случае сделал бы сюжет в виде сложносвязной структуры, где каждый элемент - это одно из состояний игры, то есть экземпляр класса, который хранит в себе массив экземпляров этого же класса ( все возможные состояния игры, в которые можно перейти из текущего) а так же в нем может быть куча другой информации (текст сюжета, задания, делегаты)
Мысль в том, что содержимое вашей формы будет генерится исходя из текущего состояния игры.
0
|
|
|
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
|
|||||||||||||||||
| 08.05.2018, 14:31 | |||||||||||||||||
Сообщение было отмечено Романов Сергей как решение
Решение
Во втором варианте можно сделать несколько обработчиков события Click и подключать их в зависимости от состояния игры. Тут уже никакие дополнительные переменные не нужны. Ну и читаемость кода, на мой взгляд, значительно лучше.
1
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 19.11.2017
Сообщений: 4
|
|
| 08.05.2018, 18:05 [ТС] | |
|
Shogun31337, первым вариантом я пробовал делать. У меня в итоге весь код выполнялся до конца, как только нажимаешь любую кнопку. То есть зависит только от первого выбора, на вложеных swith программа не останавливается. А если делать без вложенных swith, то тогда нет зависимости от других кнопок. В общем, это очень мутный вариант...
А вот последний вариант с несколькими обработчиками событий мне очень даже понравился. Надо будет попробовать так сделать. Здесь, на мой взгляд, даже проще реализовать сохранения. Можно же как то, перед закрытием формы, записать в текстовый файл номер обработчика, а при следующем запуске программы считывать значение и назначать каждой кнопке определённый обработчик? (Или для этого вопроса лучше создать другую тему, да?) И ещё, если у меня будет ОЧЕНЬ много обработчиков событий, это как-то скажется на быстродействии программы?
0
|
|
|
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
|
||||
| 09.05.2018, 04:53 | ||||
А не получилось не потому что такой способ не подходит, а потому что была допущена какая то логическая ошибка.
1
|
||||
| 09.05.2018, 04:53 | |
|
Помогаю со студенческими работами здесь
8
Создание бота для игры Создание карточной игры по сети и интернету Создание стен из picturebox для игры Создание Игры, похожей на карты Петры Баланс в Warcraft III Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|