DivES Это же gms2 и в нем не обязательно писать именно == он сам все заменит. Я когда начинал в gms2 делать игру то вообще никогда не использовал == что в if что в while и проблем не было. Я тогда даже и не знал что надо использовать == в проверках условий.
Цитата
- Used to assign a value to a variable. Note that this can also be used for comparing variables in GameMaker Studio 2 and you may see this in examples and other peoples codes. However, this is a legacy from old GameMaker versions and you should use the == operators for comparing and = for assigning
Понимаю, что язык DarkBasic устарел, но может у кого-нибудь есть завалявшиеся уроки, документация в электронном виде для изучения? Можете поделится, а то в Интернет очень мало информации?
Как мне записать эти атаки чтобы они выполнялись в начале схватки каждый из n количества боев, но при этом не повторялись каждый шаг боя.
Для начала необходимо выстроить конкретную последовательность действий, что конкретно происходит, после какого конкретно шага это происходит, что происходит в момент атаки, как происходит атака, кто атакует, какой урон наносит, от чего зависит ударит-ли лучник или воин, или не ударит. Если ударит - нужно ли добавлять к урону какой-то эффект? Если нужно, то какой, каким образом он влияет на атакующего, что конкретно он добавляет, вычитает, складывает, умножает, делит. И так далее, каждый шаг. Как сможете выстроить эти шаги - напишите их тут и продолжим уже составлять блок-схему алгоритма, а потом из него переносить в реальный код.
спасибо, конечно. но я вот читаю ваш код, и насколько я могу понять он вообще не соответствует условию задачи.
Не за что, конечно. Он не должен соответствовать условиям задачи, он является примером, как следует оформить код и каким образом его вообще писать.
ЦитатаEvgenShet ()
почему-то когда бьет лучник, воин всегда снижает урон на 7
В моем решении нет зависимости от того, кто и когда бьет. В условии моего примера лучник выполняет свои действия отдельно, воин отдельно. Ничего подобного из того, что вы написали не выполняется. В условии для атаки воина, проверяется спас-бросок, если он выполняется - урон увеличивается, не выполняется - наносится обычный урон.
ЦитатаEvgenShet ()
а не в 50% случаев. когда бьет воин лучник почему-то использует 50% процентный шанс воина на снижение урона, хотя он в 40% случаев полностью игнорирует урон
Это реализуйте сами, хотите в 50% случаев, хотите в 30%, хотите в 63%, как вам будет удобно.
ЦитатаEvgenShet ()
Еще я не совсем понял как у вас реализована двойная скорость атаки лучника
Двойной скорости лучника - нет, в условиях вообще не используется такой параметр, как скорость или дистанция.
ЦитатаEvgenShet ()
А еще вы не реализовали то, что лучник атакует дополнительное количество раз когда они сближаются ( но я тоже не придумал как это сделать, я совсем не программист, скорее начинающий гейм дизайнер) не удивительно что при таком раскладе у вас воин вышел победителем в большинстве случаев.
Я много чего не реализовал, потому что задачи такой перед собой не ставил, моя задача была не в том, что бы сделать все за вас, а предоставить базу, для улучшения и что бы другие это потом смогли прочитать, если потребуется еще помощь. Читайте внимательно:
Цитата
Я попробовал реализовать ваш код, более - менее читаемо, вышло что-то в таком духе
По поводу "не удивительно, что при таком раскладе у вас выигрывает воин". Без обид, гейм-дизайнер из вас не лучше программиста. Если у вас нет понимания, что "выиграет" воин или нет зависит от характеристик одного и другого персонажа в совокупности, а не потому что "вы не реализовали, что лучник аттакует дополнительное количество раз".
ЦитатаEvgenShet ()
у меня почему-то лучник почти всегда выигрывает, что тоже не совсем похоже на правду ( а я даже не учитывал доп атаки на сближении!!)
Потому что вы используете другой код. Да, да, так бывает. Разный код, разные характеристики, разный результат.
ЦитатаEvgenShet ()
На бумаге, при расчете этой задачи в средних значениях выигрывет лучник с разрывом в одну атаку буквально.
Мне интересно, каким образом на бумаге вы рассчитываете псевдослучайные числа? Есть большие сомнения в правильности ваших вычислений. Либо вы, одновременно, кроме того, что дизайнер, еще и Нострадамус.
ЦитатаEvgenShet ()
немного переделал ваш код ( не знаю как реализовать двойную скорость атаки лучника, потому написал блок с атакой лучника дважды :))
И снова - здарова. Я правильно понимаю, что вы ничему не учитесь? Посмотрите на мой код, а потом на свой. Чем они отличаются?
ЦитатаEvgenShet ()
по результатам испытаний воин выигрывает в большем числе столкновений. это потому, что лучник каждый раз не делает дополнительные 12 (2*60/10) атак, моих знаний в этом языке недостаточно чтобы это реализовать, ХЕЛП
Ваших знаний не только в скриптовом языке маловато, к сожалению. Распишите корректно, что и как должно у вас выполняться. Потому что на данный момент я вижу следующее в ваших словах: "мгм... лучник живет на дереве и он должен ускоряться на 50% процентов, а воин не должен ускоряться, он должен махать топором, поэтому когда он вращается - лучник танцует, а это значит, что дерево должно гнуться, из-за этого Король Империи Гномов объявил войну великанам."
Естественно, потому что есть еще одно такое присвоение и что важно - не одно, это касается и переменной char_A_health, я просто привел пример ошибки, а вы должны были проверить весь код на соответствие таким ошибкам по невнимательности, но вы решили пойти легким путем. Кроме этого, как я понимаю, вы не в курсе, чем отличается глобальная область видимости от локальной. Раз в цикле инициализируете переменную и потом ее пытаетесь использовать. Соответственно не слышали и про отступы (можно нажать кнопочку Tab или нажимать 4 раза пробел, это такая длинная кнопка внизу клавиатуры). Я попробовал реализовать ваш код, более - менее читаемо, вышло что-то в таком духе:
Код
--параметры испытаний iterations = 200000; -- итерации limit_step_count = 1000; -- число попыток, если не убили за него, то ничья distance = 60; --расстояние между противниками
-- структура у всех объектов ОБЯЗАНА быть одинаковой -- объекты персонажей
-- победа воина if (archer.health <= 0) then win.warrior = true; return win; end
-- победа лучника if (warrior.health <= 0) then win.archer = true; return win; end
if (limit_step == count_step) then win.nobody = true return win; end
return win; end
local count_step = 0;
for count_iterations = 0, iterations do
count_step = count_step + 1;
-- (попытка) бьет лучник if (is_attack(archer.chance_to_hit)) then warrior.health = warrior.health - (2 * archer.damage - 7); end
-- (попытка) бьет воин if (is_attack(warrior.chance_to_hit)) then -- (попытка) спас-бросок if (math.random() < warrior.chance_to_reduce) then archer.health = archer.health - (2 * warrior.damage - 7); else archer.health = archer.health - warrior.damage; end end
-- проверяем, кто победил local win = get_win(archer, warrior, count_step, limit_step_count);
-- записываем результат if (win.archer) then archer.win = archer.win + 1; warrior.lose = warrior.lose + 1;
archer, warrior = reset_player(archer, warrior); end
if (win.warrior) then warrior.win = warrior.win + 1; archer.lose = archer.lose + 1;
archer, warrior = reset_player(archer, warrior); end
if (win.nobody) then archer.nobody = archer.nobody + 1; warrior.nobody = warrior.nobody + 1;
count_step = 0; archer, warrior = reset_player(archer, warrior); end end
local function calc_win_rate(win, lose, nobody) if (win > 0) then local all_battle = win + lose + nobody; local k = win / all_battle; return math.floor(k * 100); else return 0; end end
Теперь считает, но по моему мнению не верно. если посчитать эту задачу руками, лучник выигрывает прям совсем на тоненького
Если считать по тому принципу, что написан в коде, то там ни о каком "тоненьком" и "толстеньком" не идет речи. Там безоговорочная победа воина. Так как с шансом 1, который по факту равен 100%, то есть шанс атаки = 100%, выиграет однозначно воин.
Я немного поэкспериментировал и получил следующие результаты:
это текстовый кликовый симулятор, у меня же есть там ссылка, выбор за тобой развитие пересонажа , случайный выбор,
как я полагаю, вопрос был о вашей игре, что бы такой проект начать релизовывать его нужно хорошо продумать, написать дизайн-документ, в котором описать, что за мир, кто главный герой, чем он занимается, какой жанр и стилистика у игры, какие основные элементы управления, история игровой вселенной, основные игровые персонажи, их параметры и свойства. Способы взаимодействия пользователя с другими игроками, существами, игровыми объектами. Основная цель игры. Будет ли экипировка в игре, если будет - какая? Будет ли инвентарь в игре, если будет - какой? Каким образом будет реализовано хранение вещей? Каким образом будет сохраняться игровая информация о игровом мире, как часто это будет происходить? Будут ли какие-то внутриигровые события? Если будут, то какие, какая основная цель у них? Будут ли достижения, если да - каким образом они будут реализованы и по какому признаку будут сгруппированы? Будут ли реализованы враги, если да, то какая у них цель, каким образом они будут действовать при различных обстоятельствах, будут ли они вообще каким-либо образом проявлять активность? Как враждебные существа будут взаимодействовать с игроком? Будут ли каким-либо образом организованны эти существа: группы, кланы, расы, виды? И это маленькая часть тех вопросов, которые вам необходимо перед собой поставить ДО того, как приступить к разработке игрового прототипа.
Цитатаmavpa ()
я не знаю сколько их делают там эту игру ну я подозреваю много
Разработка подобных игр может занимать годы.
ЦитатаGC-Vic ()
может вы будете моим ментором
До того, как просить стать кого-то ментором, нужно определиться с тем, что за игру вы хотите получить. Как с этим определиться, я дал направление выше.
Цитатаmavpa ()
Я не знаю какой движок выбрать для обучение
Тот, который больше всего будет соответствовать вашему игровому проекту. Как определитесь с тем, что вы хотите реализовать в своей игре, тогда и появится понимание того, какие функции вам необходимы и исходя из этого будет намного проще с выбором игрового движка, технологиями и архитектурой такого проекта.
Сообщение отредактировал maker-rus - Суббота, 17 Апреля 2021, 16:39
Вот эта игра меня вдохновила https://www.youtube.com/watch?v=WhtS_YjaH2E
Больше похоже на пиар видоса, ну да ладно.
Цитатаmavpa ()
Скажите специфику движка этой игры?Как ее делать на каком движке? Я так понял это текстовая кликовая игра, где присутсвует выбор ( мне кажеться это базы данных выбора, там например укусила собака, такое может случиться один из 100 вариантов с героем)
Так как вы собрались делать это на IPhone, для начала необходимо приобрести Mac устройство, если писать нативный код или использовать игровой движок, который будет портировать игру. Как тут недавно TLT говорил - качайте Unity, изучайте, делайте.
Цитатаmavpa ()
Как работает эта игра пожалуйста помогите разобраться
У меня нечто подобное находится в разработке. Разработка подобных игр, на самом деле очень сложное занятие, так как предусматривают нелинейность сюжета, случайные события и мир, который меняется в зависимости от действий игрока. То есть, в перспективе разработки такой игры необходимо будет разработать, как минимум следующие компоненты: квестовый движок, достаточно разумный искусственный интеллект, который будет знать о состоянии мира и действовать исходя из этого, редактор шаблонов для квестов и игровых персонажей и это только самый необходимый минимум. Есть похожая игра, но в жанре "zero player" вот тут. Как первый проект, брать такие игры, категорически не рекомендую, так как такие проекты продумываются и разрабатываются достаточно долго, за это время интерес к разработке будет пропадать и появляться.
EvgenShet, вижу BB кодами вы умеете пользоваться, так почему для кода не применили соответствующий блок?
Что касается:
ЦитатаEvgenShet ()
lua: fight.lua:76: attempt to perform arithmetic on global 'char_B_health' (a nil value)
Вы пытаетесь обратиться к переменной, которая не была инициализирована и имеет значение nil.
Цитата
Nil - это тип, состоящий из всего одного значения, nil, основной задачей которого является отличаться от всех остальных значений. Lua использует nil для обозначения отсутствующего значения. - Роберту Иерузалимски, "Программирование на языке Lua", 2014 год, 3-е издание.
Советую посмотреть, как я понимаю, на эту строчку:
Код
local char_B_health =char_B_health;
Как я понимаю, из вашего кода, выражение там должно быть следующее:
Код
local char_B_health = char[2].health;
Сообщение отредактировал maker-rus - Четверг, 15 Апреля 2021, 10:38
А возможно ли тогда транслировать с телефона на планшет Также разделив экран по полам Что происходит в телефоне? Например с кабеля или через Вай Фай
Прошу прощения, что долго отвечаю. Возможно, но не фактическое изображение, а данные, выглядеть это будет еще хуже, чем предыдущий вариант, так как на запись действий на экране и передачу их на другое устройство будет тратиться время, а соответственно будет задержка, ощутимая, между одним и другим устройством.
Привет всем! Ребята возможно ли включить в игру Яндект.Навигатор сработавший с Алисой или Google.Навигатор с Google Assistant
Открываешь API Яндекс.Карт, видишь там космические цены на использование - закрываешь API Яндекс.Карт. Тоже самое, но с более дешевым вариантом от Google.
ЦитатаMegaMan11 ()
В итоге я хочу экран на 2 части разбить в одном Навигатор когда ходишь работает , а во втором экран: всякие показания игры или что то нужно рассчитать, из игры например руководить функциями навигатора Реально такое сделать?
Реально, но твой сегмент сразу ограничивается владельцами премиальных смартфонов, потому что аппараты находящиеся в более низком ценовом сегменте, будут с горем пополам отрабатывать подобные действия, про нагрузку на сеть и количество запросов в секунду, в зависимости от активности на экране и говорить не приходится. Итого, есть вероятность, что идея изначально не жизнеспособна.
Это гипербола, товарищ рэббит. Если вы не заметили диалог завелся в общем ключе, извольте не проецировать это на определенную душу.
В таком случае ответ товарищу Доктору, более, чем бессмысленный.
Цитатаkilling002 ()
Это гипербола, товарищ рэббит. Если вы не заметили диалог завелся в общем ключе, извольте не проецировать это на определенную душу.
По поводу новостей, прошу вас, оставьте их при себе).
Это устойчивое выражение, эти новости я и не собирался озвучивать, вы их и без меня должны понимать.
Цитатаkilling002 ()
И какая же "структура хранения данных" должна быть, позвольте узнать.
Ну уж точно не итератор, для того, что бы обеспечить последовательное выполнение действий объекта. Лучше бы прочитали книжки не про "асинхронное программирование" а.к.а "реактивное", которое в вашем случае не имеет смысла, так как прежде всего ориентировано на чистые функции (что это такое гуглите самостоятельно), а про алгоритмы и паттерны проектирования. Потому что исходя из вашего кода, из ООП, только названия. Какую структуру данных я бы посоветовал? Обычные списки, в данном случае их было бы более, чем достаточно. В которые упаковать объект реализующий паттерн строитель, в котором и будут содержаться ваши: goToPoint, rotateToTarget, waitAFewMoment и соответственно вызываться функцией сборки, с возвращением нужных значений.
Цитатаkilling002 ()
Поступать просто - мое табу
Я заметил это по вашему коду, от этого и проблемы с производительностью, которую вы решили, что сможете решить через подключение библиотек, которые не понимаете как использовать.
Сообщение отредактировал maker-rus - Среда, 24 Марта 2021, 13:20
tomater, поиграл, 2,5к очков набрал на смартфоне и 7,8к на пк. Есть проблемы со сложностью. На смартфоне намного тяжелей проходить, через на пк. Есть проблемы с позиционированием площадки, на смартфоне не всегда удается ее прижать к краю, так как палец закрывает этот разрыв и в этот разрыв легко пролетает шарик. На пк шарик кликом стартует, а позиционируется движением мыши по горизонтальной плоскости. На смартфоне любой клик запускает шарик. Слишком быстро, по моему мнению, перемещается площадка на смартфоне, иногда нажмешь быстро на экран, а площадка вместо того, что бы немного подвинуться, "летит со скоростью света", проскакивая то место, на которое я рассчитывал подвинуть площадку. Я думаю в таких играх очень важно точное позиционирование всех элементов, для того, что бы игрок мог точно предсказывать сдвиг площадки в одно или другое направление. Понравилось интро с подсказками и их анимация. Не понравилось оформление названия, слишком вычурное. А также не понравилось, что разные шрифты в наименованиях и количестве очков, создает диссонанс, воспринимается плохо. В более низком разрешении оформление смотрится достаточно прикольно, когда увеличиваешь разрешение, элементы увеличиваются пропорционально и выглядит на 4К, уже не очень, слишком просто, также есть смещения интерфейса (наползание одних элементов на другие). Понравилась переливание металлического кирпичика. Я думаю нужно определиться со стандартными размерами блоков, что бы они везде выглядели круто, я бы предложил их немного удлинить, кроме этого предложил бы добавить больше анимаций блокам, а также убрать "стеклянные, невидимые блоки", считаю это неудачный подход, так как является неожиданным элементом и выбивает игрока из колеи, разрушает концентрацию и вовлеченность. А также предложил бы оранжево-желтый кирпичик, которые разделен линиями по 45°/315° вписать в обычный блок, поверх которого реализовать эффект, а не сам эффект заменить блоком, как это сделано сейчас. Так как подобные блоки нарушают, по моему мнению, целостность дизайна игры и восприятие мира игры.
Скриншот, стрелками указаны элементы, которые перечислены выше.
А что, люди любят ковыраться в целых скриптах в 1к строк?
Если у вас скрипты по 1к строк, то у меня для вас плохие новости. Хотя плохие новости начинаются еще с просмотра вашего кода. Проблема изначально заключается в неверном выборе структуры хранения данных - очередь и итератор, при том, что из итератор используют как список, с хранением в нем объекта состояния, при том, что сама архитектура интератора работает только в одну сторону, тоже самое и с очередью (неверное использование структуры). Пошел посмотрел, что за решение было придумано и не удивился, что решением было не смена структуры хранения, а нагромаждения костылей.
Цитатаkilling002 ()
Что то форум погибает по-моему, либо все знающие заняты делами. В общем решение предложили на другом ресурсе и оно работает. Кому интересно почему корутины не вызываются дважды, то вам сюда: ********
Могли бы просто процитировать сюда свое решение.
Сообщение отредактировал maker-rus - Пятница, 19 Марта 2021, 20:45