Придумал сложную игру, но не знаю как это сделать в коде

Phi1ya

Новичок
Регистрация
9 Авг 2023
Сообщения
6
Смысл в том, чтобы игрокам давался случайный слог, например "ре", а игрок должен придумать за ограниченное время слово, если не придумывает - вылетает, если отвечает правильно - ход передаётся следующему игроку.
Проблема в том, что нужно загрузить словарь, как это оформить? Я не думаю, что 50 тыс. слов поместится в код, возможно ли это?
 

Panzonino

Эксперт
Регистрация
5 Май 2023
Сообщения
72
Ну проверкой, если сообщение содержит "ре" и не содержит " " (пробел)
 

Panzonino

Эксперт
Регистрация
5 Май 2023
Сообщения
72
Оу... Ну придётся все слова писать...
 

astr34

Эксперт
Регистрация
16 Июл 2023
Сообщения
18
Смысл в том, чтобы игрокам давался случайный слог, например "ре", а игрок должен придумать за ограниченное время слово, если не придумывает - вылетает, если отвечает правильно - ход передаётся следующему игроку.
Проблема в том, что нужно загрузить словарь, как это оформить? Я не думаю, что 50 тыс. слов поместится в код, возможно ли это?
Технически 50 тысяч слов можно запихать в массив (лимит количества переменных 400000, элемент массива считается за отдельную переменную), но есть две проблемы:
1. Лимит операций. В лучшем случае придется как минимум доставать слово из массива, проверять содержит ли оно слог, равняется ли слову игрока и инкрементить индекс массива. Это 4 операции. Лимит операций для Hero и выше - 3200/с (800 на 5 тиков). 3200/4=800 проверок/с. Но цикл может запускать код только 4 раза/с. Для того чтобы достичь такой скорости, нужно будет вынести проверку в функцию (скажем, f1), запускать эту функцию 800/4 = 200 раз в секунду. Вынести 20 запусков функции f1 можно в функцию f2. И 10 раз запускать функцию f2 можно из цикла (на самом деле 10 не выйдет, т.к запуск функции - тоже операция). Скорость проверки одного слова в лучшем случае будет равна: 50000/800=63 секунды.
2. Большие массивы сильно лагают на mineland'е. Даже от пары десятков операций с массивом такой длины начнутся просадки TPS (вплоть до перезагрузки шарда).

Обе проблемы можно решить разбив слова на группы по слогам с помощью скрипта на любом языке программирования. Пусть в группе будет по 10 слов (чем больше - тем лучше, насколько много можно не знаю), все слова группы вместе либо содержат либо не содержат все те возможные слоги, которые будут предлагаться игроку. Группа слов будет записана в одну текстовую переменную с разделителем. Длина массива теперь составляет 5000, проверка будет выглядеть так:
Достать группу из массива, проверить содержится ли в ней слог (если он содержится, то он содержится во всех словах по правилам группировки), проверить содержится ли слово игрока в группе (подразумевается, что перед началом проверки по словарю слово игрока проверено так: слово игрока не является слогом, но содержит его, и что размер слова игрока больше какого-нибудь значения (короткие слова <= этому значению придется убрать и написать об этом в правилах, это нужно для эффективности реализации), иначе игрок сможет написать букву-две после слога и это пройдет за слово или нагрузка по операциям возрастёт т.к после такой проверки по словарю можно разбить слова этой группы по разделителю и проверить уже на полное соответствие (для надёжности) - желательно, чтобы частота запуска такой проверки стремилась к 1 на слово (игрока)), инкрементить индекс массива. Благодаря группировке в группы по 10 слов, количество операций на полную проверку по словарю уменьшится в 10 раз, соответственно время тоже уменьшится в 10 раз, на проверку уйдёт около 7 секунд.
Не знаю будут ли просадки TPS при длине массива в 5000. Размер группы ограничен только максимальными размерами переменной "Текст" и количеством слов и слогов для группировки. Если группа нужного размера не получается, группа меньшего размера также подойдёт, если таких групп не будет много на фоне групп полного размера.
 
Последнее редактирование:

astr34

Эксперт
Регистрация
16 Июл 2023
Сообщения
18
Конечно это не слоги, а просто части слова. Например, для слога "по" система пропустит и по-бе-жал и под-бе-жал. Чтобы увеличить вероятность того, что "слог" в слове будет слогом, можно использовать слоги из трёх, четырёх, пяти букв. Это также повысит вероятность того, что получится разбить словарь на достаточно большие группы т.к такие части слов более редкие, и слова помимо комбинирования одних и тех же слогов из тех, которые будут предлагаться игроку (более редких), смогут чаще комбинироваться с теми слогами, которые не будут (более популярными). Игра будет сложнее. Чтобы найти такие слоги (по сути всё-таки части слов с большей вероятностью оказаться слогом) можно написать скрипт на любом ЯП.
Кстати, чтобы сделать игру интереснее с каждым кругом можно добавлять в массив (слогов которые будут предлагаться игроку) ещё более редкие слоги.
 

Copter533

Участник
Регистрация
24 Июн 2023
Сообщения
42
Конечно это не слоги, а просто части слова. Например, для слога "по" система пропустит и по-бе-жал и под-бе-жал. Чтобы увеличить вероятность того, что "слог" в слове будет слогом, можно использовать слоги из трёх, четырёх, пяти букв. Это также повысит вероятность того, что получится разбить словарь на достаточно большие группы т.к такие части слов более редкие, и слова помимо комбинирования одних и тех же слогов из тех, которые будут предлагаться игроку (более редких), смогут чаще комбинироваться с теми слогами, которые не будут (более популярными). Игра будет сложнее. Чтобы найти такие слоги (по сути всё-таки части слов с большей вероятностью оказаться слогом) можно написать скрипт на любом ЯП.
Кстати, чтобы сделать игру интереснее с каждым кругом можно добавлять в массив (слогов которые будут предлагаться игроку) ещё более редкие слоги.
Нифига себе ты умный (не рофл)
 

Lisquire

Участник
Регистрация
1 Июл 2023
Сообщения
6
Сначала поставь код который перехватывает сообщения из чата, закрой игру, и макросами отправляй сообщения. Оставь так пк на часа 3 и у тебя будет много слов. Еще поставь проверку сколько сообщений отправилось.
 
Сверху