PDA

Просмотр полной версии : Создание учебника: кодирование



Dimon157
21.10.2008, 16:47
Тема для обсуждения кодирования.

Есть два подхода. Первый взять за базу туториал и править его. Второй - с нуля. Я попробовал оба и рекоммендую второй вариант.

Создание всплывающего вопроса в начале игры/на n-том ходу
Вставление картинок в pop-up
http://forums.civfanatics.com/showthread.php?t=183126
Пример:
[attachmentid=4095]

Выделение клетки цветным кружком и снятие этого выделения, установка и удаление пометок:
http://civilization4.net/files/modding/PythonAPI/ см. класс CyEngine

swan
21.10.2008, 18:40
Минуточку "рекламной" паузы ;) - у меня предложение такое - сделать что-то типа НР, но с обязательной записью последовательностей действий участников и комментариями почему они решили сделать именно так, а не эдак - от лучших результатов и танцевать, но с использованием и результатов других игроков. Ну и естественно сперва решить с темой - на какой результат будем учиться и предполагаемый уровень сложности.

PS Хотя подумалось тут - полный вариант развития событий просчитать не возможно - миллионы вариантов могут быть из-за рандома - но в принципе в общих чертах можно предугадать базовые лучшие варианты

Dimon157
21.10.2008, 18:56
Технически это сделать легко (я про запись ходов), но рановато. Сперва я бы хотел определиться каким будет учебник.
Для этого я попросил Lexad'a сыграть 10-15 ходов на культуру на случайной карте и откомментировать свои действия. Дальше я это запрограммирую и сегодня-завтра-послезавтра выставлю на обсуждение.
P.S. Хорошо бы эти посты перенести в общую тему.

swan
21.10.2008, 19:06
Если ты действительно серьёзно намерен делать подобный учебник - могу создать специальный отдельный раздел форума под это.

Мнение моего земляка я конечно уважаю, но одного Lexad'a имхо не достаточно для какой либо определенной игры.

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

swan
21.10.2008, 19:22
Кстати тут подумал-посчитал - технически очень сложно будет просчитать нелинейность развития - например несколько игроков поставили первый город не там, где советуют, а где-нибудь в какой нибудь соседней клетке - уже линейность прерывается и рекомендация к строительству следующего города не будет настолько вразумительной и четкой, а выполнение действий строго по указке туториала - это не игра получается, да и рандомность тогда придется убирать :no:

Так, что надо что-то думать посерьёзней или просчитывать все варианты нелинейности развития, что приведет к многомегабайтным вариантам выводимого текста даже на Tiny-карте с одним АИ-оппонентом

Dimon157
21.10.2008, 19:49
Мы по разному понимаем интерактивность.
Я просмотрел далеко не один десяток интерактивных учебников в разных областях и считаю лучшим учебник для шахмат chessmaster 11 (от Джошуа Вайцкина). Он явно выше других на голову и по его подобию думаю создать учебник для цивы.
А так как думаешь ты я еще ни разу не встречал.

<div class='quotetop'>Цитата</div>
Мнение моего земляка я конечно уважаю, но одного Lexad&#39;a имхо не достаточно для какой либо определенной игры.[/b]
Так это проба. Чтобы понять насколько эффективным будет учебник.

swan
21.10.2008, 20:12
Имхо для начала стоит опробовать более простые варианты развития - например победа культурой при оппонентах на других континентах (например каждому по континенту) - сюжет будет более линеен и предсказуем в плане непредвиденного стечения рандома по поводу войн - от этого и начать плясать - если всё удастся - тогда переходить к более сложным разработкам

За основу например взять скрипт Custom_Continents --> стандартный размер земли --> 3 АИ (чтобы меньше непредсказуемости было) --> 4 континента --> 1 team per continent

Dimon157
21.10.2008, 20:20
Lexad&#39;a я попросил на культуру без AI :)
Далее в планах - космос.

swan
21.10.2008, 20:25
Без AI получается строгая определенность - человек так не научится грамотно строить свои планы - выработается привычка не обращать внимания на оппонентов и развиваться в свою угоду - в итоге прибегает большой стек вражин и проигрыш (особенно в мультиплеере) - сколько уже людей на этом погорело даже знающих, что может припереться большущий стек

Lexad
21.10.2008, 21:24
Короче, вы сначала определитесь, как вам надо, а я сыграю. :)

Мое предложение - сыграть Блиц на культуру. Там порядка 125-130 ходов - зато можно переигрывать и подробно описывать причины того или иного хода.

Dimon157
22.10.2008, 09:01
Да, я со Сваном полностью согласен. Конечно так лучше.
Меня только останавливала сложность реализации, но сейчас я уверен в ее возможности.
По сути мне предстоит запрограммировать запись ходов (на самом деле это уже почти сделано разработчиками) и их проигрывание (функции питона это позволяют).
Как буду готов - отпишусь.

Dimon157
22.10.2008, 16:44
Хочу поделиться приятной новостью: я уже запрограммировал запись передвижения юнитов и их воспроизведение. То есть то, над чем думали в теме Видеопрохождения у меня получилось!

Вот как будет выглядеть результат. Это два мода. Один для записи, второй для просмотра.

При записи игрок ходит как обычно. Если он хочет оставить комментарий (или несколько) на этом ходу для смотрящего, то он просто отправляет его в чат.

При просмотре ход происходит мгновенно, но пользователь может просмотреть все события в event log. Далее он нажимает на кнопку конец хода и автоматически проигрывается еще один ход и т.д.
Ну и есть комментарии в виде pop-up от игрока.

Вот так.


Теперь стоит разработать стандарт записи: что нужно записывать, а что лишнее.
Например, если запустить зв ВЧ (запись действия ВЧ) и записать еще запуск зв от игрока, то это - дублирование.

Юнит (логи черным)
*создание (постройка или подарок или те, которых дают в нагрузку с перешедшим по культуре городом или те, что у варваров появляются)
*потеря (убийство, удаление или подарок)
*перемещение
*увеличение XP
*прокачка (взятие promotion)
*переименование
*разбой
*% фортификации
*запись хитпоинтов
*действия рабочих
*действия шпионов
*попытка распространить религию/корпорацию
*действия ВЧ

Город (логи синим)
*создание
*потеря
*население
*обрабатываемые клетки/спецы
*постройки
*что строит
*еда
*молотки
*культура
*религия/корпорация
*здоровье (шпионы, случ. событие)
*счастье (слейв, шпионы, случ. событие)
*модификатор (случ. событие)

Цивилизация (логи зеленым)
*что изучает
*кол-во колб
*получение техи (исследование, ч-з избушку или от другой цивы)
*золото
*ползунок науки/золота/культуры/шпионажа
*кол-во очков шпионажа
*цивики
*гос религия/корпорация
*дипломатия (контакт(?), открытые границы, война, вассал, защитный пакт, альянс, торговые сделки, отношение других цив)
*достижение победы

Игровая клетка (логи оранжевым)
*feature/ресурс/улучшения/дороги (новострой, новое улучшение на старом, разбой, случ. событие)
*модификатор (случ. событие)

Сообщения смотрящему (логи коричневым)
*избушка
*квест/ивент с вариантами выбора и итоговым выбором
*дипломатия
*слейв/драфт

swan
22.10.2008, 17:17
То есть ты хочешь сказать, что каждое действие будет логгироваться и потом при запуске эти действия будут выводиться в той же последовательности?

Dimon157
22.10.2008, 17:30
Да. Как запись в шахматной партии.

swan
22.10.2008, 19:18
Для юнитов ещё при воспроизведении как-бы замедление тогда надо - чтобы видно было какой юнит откуда и куда походил, а не просто проигровка партии на скорости обработки лога

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

Dimon157
22.10.2008, 19:21
Да, хорошо бы. Но это уже не критично.
Вначале функционал, потом косметика.

<div class='quotetop'>Цитата</div>
или как в обычном туториале - показывает кем куда походить, а человек сам нажимает кнопки[/b]
Эта рутина будет отвлекать от главных идей.
Думаю, замедление удастся реализовать.

swan
22.10.2008, 19:26
Ты про сами эвенты и квесты забыл:
* Эвент или квест
* Выполнение квеста
* Выбранный вариант и/или результат

PS перечитай пост #15 в этой теме - я там постскриптум дописал

Dimon157
22.10.2008, 19:36
<div class='quotetop'>Цитата</div>
Ты про сами эвенты и квесты забыл[/b]
Вроде учел.
Пример1: у вас разрушило ферму - изменяем в пункте игровая клетка/модификатор
Пример2: ученые нашли таблички и Вы получаете столько то колб - изменяем в пункте цивилизация/кол-во колб
и т.д.
Принцип думаю понятен. Все в эту схему укладывается. Если что-то не укладывается - напиши, добавлю.
Правда, это наталкивает меня на другую мысль: добавить уведомление смотрящему.
// добавил в пост #12

swan
22.10.2008, 21:10
В некоторых ивентах и квестах удается таки при наличии чего либо делать выбор - например потратить 50 монет и получить 300 колб или не тратить денег и получить всего 150 - поэтому уведомление о том, что выбрал/выбрать должно быть

Dimon157
23.10.2008, 10:48
лог пишется в формате html (для цветного раскрашивания и жирного выделения) и выглядит так:
[attachmentid=4099]// обновил

Несколько вопросов:
1) стоит ли поменять цвета
2) Что значит (как переводится) onPlotPicked и onSelectionGroupPushMission

swan
23.10.2008, 15:03
<div class='quotetop'>Цитата</div>
лог пишется в формате html и будет выглядеть таким образом
log.rar ( 1.45 килобайт )[/b]
Пишет, что файл отсутствует

<div class='quotetop'>Цитата</div>
Несколько вопросов:
1) стоит ли поменять цвета
2) стоит ли кроме id юнита/города/цивилизации писать имя
3) Что значит (как переводится) onPlotPicked и onSelectionGroupPushMission[/b]
1 - даже не задумывался об этом
2 - было бы неплохо с именами
3 - onPlotPicked видимо "на выбраном квадрате", onSelectionGroupPushMission точно не могу сказать, как правильно перевести и что дает

PS ты обратную связь при воспроизведении из HTML продумал? (чтобы не пришлось переделывать код с нуля на совсем другой основе)

Dimon157
23.10.2008, 15:19
<div class='quotetop'>Цитата</div>
Пишет, что файл отсутствует[/b]
Попробуй еще раз, должно работать.

<div class='quotetop'>Цитата</div>
2 - было бы неплохо с именами[/b]
Переделал

<div class='quotetop'>Цитата</div>
3 - onPlotPicked видимо "на выбраном квадрате"[/b]
Дело в том, что в циве, вроде, нельзя выделять тайлы.

<div class='quotetop'>Цитата</div>
ты обратную связь при воспроизведении из HTML продумал?[/b]
Имеешь ввиду, не возникнет ли проблем, если на вход подать html-файл вместо текстового?

swan
23.10.2008, 19:48
<div class='quotetop'>Цитата</div>
Имеешь ввиду, не возникнет ли проблем, если на вход подать html-файл вместо текстового?[/b]
Ага

PS посмотрел хтмлку - ещё добавился вопрос - лог является обычным текстовиком по сути, только размечен ХТМЛ-тегами - никакой дополнительной разметки потом не потребуется, чтобы обратная связь была с питоном - например что-то начало строиться - именно указатели "TechAcquired:" и "was finished" чтоли будут указывать питону, что наука должна открыться?

Dimon157
23.10.2008, 19:56
Нет, не возникнет :)

swan
23.10.2008, 20:25
Есть такие мысли - но это уже наверное на более дальних этапах создания мода:

1. На первом ходу после генерации карты создавать отдельный постоянный сейв пустой карты (всмысле только со стартовыми позициями и стартовыми юнитами) - чтобы потом воспроизвести карту можно было в любой момент
1.1. В логе записать имя карты (лог ложить в ту же папку)

2. Если это возможно - то в базовом меню где Single Player --> blabla добавить пункт Replay Game и там уже загружать реплей по лог-файлу (т.е. не конкретный сейв загружал бы, а сперва подгружал лог, а потом начинал игру по данным лога), который бы подгружал игре карту, прописанную в файле лога и начинал воспроизводить действия из лога
2.1. По мере возможности объеденить Log-generator и Log-replay в единый мод - т.е. если стартуешь игру из пункта Replay Game - то лог не генерируется, а только воспроизводится, а если с другой какой нибудь опции (New Game/Custom Game/Custom Scenario) - то лог генерируется автоматически

PS перечитай пост #23 - там постскриптум добавился

Dimon157
23.10.2008, 21:59
С идеями согласен.

<div class='quotetop'>Цитата</div>
1. На первом ходу после генерации карты создавать отдельный постоянный сейв пустой карты [/b]
WBQuickSave создается автоматически на первом ходу

<div class='quotetop'>Цитата</div>
2.1. По мере возможности объеденить Log-generator и Log-replay в единый мод[/b]
Проблема в том, что в обеих модах разные CvEventManager.py

swan
23.10.2008, 23:27
<div class='quotetop'>Цитата</div>
WBQuickSave создается автоматически на первом ходу[/b]
Ситуация - юзверь по запарке/криворучию/незнанке/etc. создает новую - итог - стартовый сейв накрылся медным тазом, то бишь был перезаписан на новую карту

<div class='quotetop'>Цитата</div>
Проблема в том, что в обеих модах разные CvEventManager.py[/b]
А через банальный оператор if никак не получится совместить два в один флакон? Пусть даже с некоторыми полностью продублированными функциями?

Dimon157
24.10.2008, 11:15
<div class='quotetop'>Цитата</div>
А через банальный оператор if никак не получится совместить два в один флакон? Пусть даже с некоторыми полностью продублированными функциями?[/b]Должно получиться.


Также, в планах сделать несколько кнопок (проводя аналог с проигрывателем):
*проиграть одну строку из лог файла ("frame advance")
*проиграть до конца хода/партии с задержкой между действиями в n секунд ("play")
*ускорить/замедлить скорость проигрывания
*быстрая перемотка до конца хода ("fast foward")
*быстрая перемотка 5 ходов
*быстрая перемотка 20 ходов
*быстрая перемотка 100 ходов (актуально для марафона)
*пауза (для кнопки play)
*в начало партии
*на 2 хода назад - с помощью автосейвов("rewind")

Иметь возможность все функции вызывать с клавиатуры
[attachmentid=4103]

swan
24.10.2008, 12:52
при плее тогда надо учитывать микроменеджмент - т.е. приближать при проигрывании экран города и выводить изменения - например сняли отсюда и воткнули туда