Решил отойти от темы ботов для ВК и сделать небольшой лохотрон (рулетку типа). Принцип работы простой и понятый — после запуска пользователю выпадает один из призов, однако у каждого приза будет свой шанс выпадения. Чем выше шанс — тем вероятнее и чаще он будет попадаться.
Шаг 1: Подготовка и осознание
С чего стоит начать — так это с обдумывания механизма, который будет регулировать вероятности. И, безусловно, вариантов реализации таких штуковин может быть множество, но поскольку в этот раз я не буду делать никаких дополнительных фильтров, шансов, алгоритмов, подборов и т.д. и т.п., то процентную вероятность будем высчитывать для каждого приза в зависимости от его ценности по следующей формуле:
Коэффициент приза — это обратная дробь стоимости приза. При умножении стоимости на коэффициент всегда будет получаться единица.
Как Настроить Конкурс Рулетка от ActiveBot.
В качестве призов, а также их стоимости, я буду использовать просто деньги. Для примера сравним шансы выпадения 10.000 рублей, 5.000 рублей и 2.000 рублей:
- Коэфф. 10к = 1 / 10000 = 0,0001
- Коэфф. 5к = 1 / 5000 = 0,0002
- Коэфф. 2к = 1 / 2000 = 0,0005
- Шанс выпадения 10к = 0,0001 / (0,0001 + 0,0002 + 0,0005) * 100% = 12,5%
- Шанс выпадения 5к = 0,0002 / (0,0001 + 0,0002 + 0,0005) * 100% = 25%
- Шанс выпадения 2к = 0,0005 / (0,0001 + 0,0002 + 0,0005) * 100% = 62,5%
Если все эти проценты сложить, то в сумме получится 100% (12,5 + 25 + 62,5).
Сейчас все расчёты я сделал вручную для демонстрации принципа работы скрипта, который в дальнейшем будет всё это делать за нас в автоматическом режиме.
Шаг 2: Написание скрипта
Всего в моём тестовом проекте будет два файла: index.php (главная) и func.php (скрипт):
Пришло время писать код. Открываем файл func.php и создаём массив с призами. Я сделаю 7 элементов с разными суммами:
‘1.000.000 рублей’, ‘price’ => 1000000 ), array ( ‘name’ => ‘750.000 рублей’, ‘price’ => 750000 ), array ( ‘name’ => ‘600.000 рублей’, ‘price’ => 600000 ), array ( ‘name’ => ‘400.000 рублей’, ‘price’ => 400000 ), array ( ‘name’ => ‘250.000 рублей’, ‘price’ => 250000 ), array ( ‘name’ => ‘150.000 рублей’, ‘price’ => 150000 ), array ( ‘name’ => ‘100.000 рублей’, ‘price’ => 100000 ), );
Далее нам понадобятся две функции. Первая будет считать сумму коэффициентов всех призов, а вторая запустит рулетку и вернёт позицию выигранного приза в массиве.
Начинаем писать первую:
function totalChance( array $prizes ) < $result = 0; foreach ( $prizes as $key =>$params ) < $result += ( 1 / $params[‘price’] ); >return $result; >
На вход функция получает массив всех призов (который мы запихали в константу PRIZES), далее перебирает все призы, суммирует их коэффициенты и возвращает полученное значение.
Переходим к функции №2. Создаём рандомное число от 1 до 100 и записываем его в переменную:
function startLottery( array $prizes ) < $rand = mt_rand( 1, 100 ); // Тут продолжим писать код >
Далее в функцию мы вставим цикл, который будет перебирать всё тот же массив с призами. На каждой итерации будет подсчитываться шанс текущего приза и предыдущего (на первой итерации для «предыдущего шанса» ставим 0). И если рандомное число попадает в промежуток этих двух высчитанных шансов (ранд > пред.шанс И ранд
Конечный облик функции:
function startLottery( array $prizes ) < $rand = mt_rand( 1, 100 ); // Рандомное число $current_chance = $prev_chance = 0; // Вероятность выпадения текущего и предыдущего призов. Пока что приравниваем к нулю. foreach ( PRIZES as $key =>$params ) < $current_coefficient = 1 / $prizes[$key][‘price’]; // Коэффициент текущего приза $current_chance += $current_coefficient / totalChance( $prizes ) * 100; // Вероятность выпадения текущего приза в процентах if ( $key != 0 ) // Проверяем, на какой итерации находится цикл по индексу массива (0 — первый индекс) < $prev_coefficient = 1 / $prizes[$key — 1][‘price’]; // Коэффициент предыдущего приза $prev_chance += $prev_coefficient / totalChance( $prizes ) * 100; // Вероятность выпадения предыдущего приза в процентах >if ( $rand > $prev_chance and $rand return -1; >
Шаг 3: Тесты
Для тестов рулетки добавил цикл в код, который 1000 раз вызовет вышенаписанную функцию, а также посчитает количество выпадений для каждого приза:
$a = 0; $b = 0; $c = 0; $d = 0; $e = 0; $f = 0; $g = 0; for ( $i = 0; $i < 1000; $i++ ) < $x = startLottery( PRIZES ); echo PRIZES[$x][‘name’] . ‘
‘; switch ( PRIZES[$x][‘price’] ) < case 1000000: < $a++; break; >case 750000: < $b++; break; >case 600000: < $c++; break; >case 400000: < $d++; break; >case 250000: < $e++; break; >case 150000: < $f++; break; >case 100000: < $g++; break; >> > echo ‘
‘; echo $a . ‘ (‘ . 1 / PRIZES[0][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $b . ‘ (‘ . 1 / PRIZES[1][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $c . ‘ (‘ . 1 / PRIZES[2][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $d . ‘ (‘ . 1 / PRIZES[3][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $e . ‘ (‘ . 1 / PRIZES[4][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $f . ‘ (‘ . 1 / PRIZES[5][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘; echo $g . ‘ (‘ . 1 / PRIZES[6][‘price’] / totalChance( PRIZES ) * 100 . ‘%)’ . ‘
‘;
В итоге получаем вот такую картину:
Как можно заметить — количество выпадений очень близко к процентной вероятности (та, что в скобках), а значит больше ничего дорабатывать не придётся.
Код для тестов теперь можно убирать, дабы он не мешал.
Шаг 4: Оформление
Переходим в файл index.php, в котором делаем простую форму с кнопкой. После каждого нажатия будет отправляться ajax-запрос и инициироваться новый запуск рулетки:
Рулетка .game .prize #text form button Сюда надо тыкать function call() < var msg = $(‘#form’).serialize(); $.ajax(< type: ‘POST’, url: ‘/func.php’, dаta: msg, success: function(data) < var obj = jQuery.parseJSON(data); if (obj.success == ‘success’) < $(‘.prize’).html(‘Твой выигрыш: ‘ + obj.prize + »); > else < $(‘.prize’).html(‘Ошибка’); > > >); >
В func.php добавляем обработку формы:
if ( $_POST[‘type’] == ‘lot’ ) < $i = startLottery( PRIZES ); // Запуск рулетки, получение индекса приза в массиве $result = array ( ‘success’ =>’success’, ‘prize’ => PRIZES[$i][‘name’] // Название массива, которое будет выведено пользователю ); echo json_encode( $result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ); // Конвертируем массив $result в JSON и распечатываем >
Теперь можно потыкать, поиграться, посмотреть как все замечательно работает 🙂
На этом все работы можно считать завершёнными. Архив с исходниками, как всегда, прикрепляю:
- 5id15
- 03.07.2022
- 4 438
- 0
- 1
Источник: kotoff.net
Скрипт Как написать своего бота ВКонтакте рулетку? [ ЧАСТЬ 1 ]
Всем привет, сегодня расскажу вам как написать своего бота ВК рулетку на NODE.JS! Если эта тема наберет 20 симпатий, я сделаю вторую часть.
И так, для начала необходимо сделать следующее:
Установить NODE.JS — nodejs.org
Я буду работать в IDE Visual Studio Code, вы можете так же её скачать, она бесплатна. Если хотите, можете использовать другую.
После установки NODE.JS, создаем где-нибудь папку в которой будет наш бот.
Добавляем эту папку в VS Code. Открываем терминал в VS Code с помощью сочетания клавиш Ctrl + ` / Ctrl + Ё
Прописываем следующую команду:
Нажимаем ENTER на всех вопросах.
Далее, прописываем еще пару команд:
npm i vk-io —save
npm i nodemon -g
После чего, создаем группу ВК.
Создаём ключ доступа и даём все разрешения, нужны все для дальнейшей работы бота, в случае если нам понадобиться узнать, лайкнул ли пользователь определённый пост в группе, добавлять фотографии, выставлять посты, узнавать товары и т.д
Далее переходим во вкладку Long Poll API, ставим такие же настройки как у меня:
Обязательно не забудьте включить сообщения сообщества и возможности ботов.
Переходим в VS Code, создаём в нашей папке файл index.js, пишем в нем следующий код:
JavaScript:
const < VK >= require(«vk-io»), vk = new VK(< token: «токен вашей группы», apiMode: «parallel», pollingGroupId: «цифровой id вашей группы» >); vk.updates.use( async (mes, next) => < if ( mes.senderType != «user» ) return; user = await vk.api.users.get(< user_ids: mes.senderId >); mes.send(`Здравствуйте, $!`) try < await next(); >catch ( e ) < console.log(e); >>); async function start() < await vk.updates.startPolling(); console.log(«Бот успешно запущен»); >start().catch((e) => < console.error(e); >);
Я написал простейший код, в котором мы сделали так, чтобы на каждое сообщение пользователя, бот приветствовал его.
Чтобы распознавать определенные команды необходимо дописать ( до функции start() ) следующий код:
JavaScript:
vk.updates.hear(/^(Привет|Ку|Дарова)/iu, async mes => < return mes.send(«Приветствую вас!») >)
- Привет
- Ку
- Дарова
На этом все, во второй части мы подключим базу данных MYSQL и сделаем регистрацию пользователей.
Источник: v-h.guru
РКИ and EDUCATION TODAY
Новые технологии в образовании, русский язык как иностранный, когнитивная лингвистика, новости и последние исследования в области преподавания иностранных языков,психолингвистика, педагогический дизайн, digital humanities и second language acquisition.
5 сайтов для создания колеса фортуны
Колесо фортуны или колесо удачи — это замечательный способ узнать ваше будущее. А еще — это замечательный способ внести разнообразие в онлайн-уроки.
Вы преподаете РКИ онлайн? Тогда вам колесо удачи точно пригодится!
1) во-первых, это очень интригует. Теперь не вы, а колесо удачи решает, кому из студентов сейчас отвечать. Это вносит элемент неожиданности. Студенты ждут с замиранием сердца.
2) во-вторых, когда работает колесо удачи, студенты не «спят». Обычно же, если вы работаете в опредленном порядке, студенты знают, когда придет их очередь отвечать. Перестают следить за теми, кто отвечает сейчас и знают заранее, какое предложение или задание выпадет на их долю. Вот именно в этом очень помогает колесо удачи. Кто сейчас будет отвечать — нитко не знает.
Это судьба.
Если вы преподаете РКИ онлайн,то я рекомендую это колесо для того, чтобы разнообразить ваших занятий. Создать колесо удачи очень легко! Работает оно онлайн, либо можно скачать бесплатное приложение.
Если вы хотите получать больше интересных материалов и новостей о событиях из мира лингвистики и мира РКИ, присоединяйтесь к сообществу «РКИ сегодня»
5 сайтов для создания колеса фортуны
Один из самых популярных сайтов для создания колеса удачи. Все предельно просто. Крутите колесо и испытываете удачу. Бесплатно. Без регистрации.
Чтобы изменить параметры, нужно нажать «Modify wheel» и в носите нужные параметры. Я внесла имена студентов.
Но можно еще внести какие-то другие задания:
Например:
- глаголы ( проспрягать выпавший глагол, если вы только приступили к спряжению глаголов)
- посчитать от 1 до 10, от 10 до 20 и тд.,
- назвать 10 фруктов/профессий/12 месяцев и тд (зависит от уровня студентов и многих других факторов)
- может быть, у вас есть еще идеи?
Удобный, бесплатный, понятный сайт, где можно быстро и бесплатно создать разные виды «колес»
Сайт на русском языке. Без регистрации и бесплатно можно создать колесо фортуны, а также бросить кости или жребий.
4) https://space24.top/koleso-fortuny
5) Приложения для колеса удачи.
Так как сайтов, на мой взгляд, уже достаточно, я решила добавить бесплатные мобильные приложения для использования и создания колеса удачи.
Рулетка судьбы
для Андроид
для iOS
На самом деле, в магазинах приложений очень много подобных бесплатных приложений.
Вам нужно ввести:
- колесо фортуны
- рулетка судьбы
- колесо удачи
Источник: www.rki.today