Продолжаю экспериментировать в C# - программа для игры в 21 (очко)
Пока в курсе идут простые задания, я экспериментирую и умышленно усложняю себе задачу. Недавно наткнулся в Play Market на интересную игру Void Tyran, боевая механика данного рогалика завязана на игре в "очко".
Для тех кто не знает, 21 или "очко" - это карточная игра. Суть в том, что игроки поочереди берут карты, накапливая очки. Задача - набрать 21 или близкое к нему значение, но никак не больше - иначе проигрыш.
Так же и в Void Tyran, только вместо 21 стоит 12, а колода представляет из себя 24 карты (по 4 карты каждого значения от 1 до 6). Оба участника боя поочередно вытягивают карты из своей колоды накапливая очки, а когда оба решают остановиться - идет сравнение их результатов. Например, вы остановились на 11, а соперник на 8 - разница ровна 3 очкам. Значит, вы наносите по противнику три удара.
Согласитесь, что спустя десяток партий такая игра могла бы наскучить, но тут на помощь приходят особые карты. Какие то добавляют очки к результату, какие то усиливают атаку или защиту, а некоторые и вовсе обнуляют вражеский счетчик.
Игра зацепила и я решил повторить ее механику на C#, но для начала нужно сделать базу игры в "очко" до 12. Для начала накидал простой алгоритм, который дает игроку выбор - сделать бросок или остановиться.
Однако игра не имела смысла, потому что противник продолжал бросать пока не проиграет. Нужно "научить" его принимать решение, стоит ли останавливать выдачу или нет.
Шанс проиграть появляется в тот момент, когда сумма очков больше шести. Чем выше данный шанс, тем больше становится вероятность, что противник решит остановиться. Таким образом на 7-8 очках, он в большинстве случаев продолжит играть, но на 9-11 очках наверняка остановит свои броски.
Игра идет до тех пор, пока у одного из игроков не будет перебор или оба не выберут остановку. Во втором случае сравниваются результаты и тот у кого больше - побеждает.
В дальнейшем добавлю в данный алгоритм здоровье и урон наносимый в соответствии с разницей в очках у победителя и проигравшего. А вишенкой на торте станут карты...
Конечно, в консоли это выглядит не так впечатляюще, но сам алгоритм работает, а это значит что я уже не такой криворукий. В следующий раз попробую реализовать данную систему в GDevelop или Godot.
Низкий гоблинский поклон всем кто дочитал до конца статьи! Если вам интересно наблюдать за развитием новичка (или посмеиваться над банальными ошибками) - подписывайтесь на мой блог!
На DTF только и разговоров что про очко...
Как говорится: «Сложнее всего пришлось разработчику игры 21. Ведь он целый год разрабатывал очко»
Интересно
удачи, когда-то я тоже пытался в игры (на винформах), ни одного релиза у меня там не вышло по итогу
Я пока что просто экспериментирую, чтобы лучше понять язык. Тот же Void Tyran вывозит в первую очередь за счет дополнительных карт влияющих на бой, а так же визуально приятен глазу.
Я же лишь пытаюсь повторить сам алгоритм боевки, хотя в будущем может и дойдут руки сделать это в виде играбельного проекта.