Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
#Круги добра
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Возглавьте армию своей страны в войне с коварным врагом. Управляйте ресурсами, принимайте ключевые решения и ведите Граднар через суровый конфликт. Ваши действия определяют будущее, приводя страну к победе или поражению.

Симулятор войны: 1985

Мидкорные, Стратегии, Симуляторы

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • Animalrescueed Animalrescueed 36 постов
  • Oskanov Oskanov 7 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
0 просмотренных постов скрыто
82
Kaborator
Kaborator
2 года назад
Лига Разработчиков Видеоигр

Насколько дизморалящий баланс в этой настолке с чёрной дырой⁠⁠

(этот пост про настолку, но касается автоматизированного тестирования, что одинаково полезно и для видеоигр)
Появилась у меня с маленьким ребенком новая красивая настолка - классическая ходилка с одним кубиком. Симпатичная картинка, достаточная длина игровой сессии. И есть в этой игре странная особенность - чёрная дыра на 39 шаге (из 120), которая сразу отбрасывает игрока в самое начало. Давайте посчитаем насколько это странно. И мелкий совет в конце по расширению правил для возможного исправления.

Насколько дизморалящий баланс в этой настолке с чёрной дырой Настольные игры, Javascript, Теория вероятностей, Gamedev, Тестирование, Эмуляция, Длиннопост

В чем проблема?


У игрока нет никакого контроля и возможности повлиять на результат. То есть победа или поражение - полная случайность. Поэтому если уж не повезло попасть на черную дыру, то догнать оппонента почти нереально, ведь это одна треть всего маршрута.


В игре нет никакой механики камбека. Более того всегда есть заметная вероятность второй раз попасть на черную дыру. Уныние у такого игрока обеспечено.


Насколько проблема большая?


С ходу может показаться, что риск такого события всего лишь ~17% (1/6 для шестигранного кубика). Вроде терпимо. Но если подумать ещё, то окажется, что проверять надо не одного игрока, а двух, т.к. нас интересует интересность в игре обоих игроков. Ещё хуже если игроков больше одного. Но можно подумать ещё, и тогда окажется, что для одного игрока опасных бросков не один, а обычно больше (2, иногда 3). Например, игрок находится на расстоянии 6 от чёрной дыры, выпадает 2 и он вздыхает с облегчением, но зря, т.к. на следующий свой ход он опять в той же ситуации и фатальной для него теперь является четвёрка.


Рассчитать вероятность всего этого через теорию вероятности несколько проблематично. Зато можно заэмулировать и просто собраться статистику.

const bonusTurn = [7, 22, 55, 70, 77, 93, 104, 115];
const skipTurn = [13, 28, 46, 62, 85, 98, 110];


function main(gamesCount) {
let games = [];

for (i = 0; i < gamesCount; i++) {
games[i] = emulateGame();
}

//console.log(games);
let catchedGames = 0;
let catchedGamesUnfair = 0;
let catchedMoreLoseGames = 0;
for (i = 0; i < gamesCount; i++) {
if (games[i].p1Catched > 0 || games[i].p2Catched > 0) {
catchedGames++;
if (games[i].p1Catched != games[i].p2Catched) {
catchedGamesUnfair++;
}
}

if (games[i].p1Catched > games[i].p2Catched && games[i].winner == 'p2') {
catchedMoreLoseGames++;
} else if (games[i].p1Catched < games[i].p2Catched && games[i].winner == 'p1') {
catchedMoreLoseGames++;
}
}

console.log('Count of games: ' + gamesCount);
console.log('Percent of games with black hole: ' + Math.round(100*catchedGames/gamesCount) + '%');
console.log('Percent of unfair games with black hole: ' + Math.round(100*catchedGamesUnfair/gamesCount) + '%');
console.log('If go to black hole more then lose: ' + Math.round(100*catchedMoreLoseGames/catchedGamesUnfair) + '%');
}


function emulateGame() {
let game = {
'p1': 0,
'p2': 0,
'winner': null,
'p1Catched': 0,
'p2Catched': 0,
'turn': 0
}

while(true) {
game.turn++;

game.p1 += getDice();
game = checkMove(game, 'p1');

if (game.p1 >= 120) {
game.winner = 'p1';
break;
}

game.p2 += getDice();
game = checkMove(game, 'p2');

if (game.p2 >= 120) {
game.winner = 'p2';
break;
}
}

return game;
}


function checkMove(game, player) {
let anotherPlayer = 'p1';
if (player == anotherPlayer) {
anotherPlayer = 'p2';
}

if (bonusTurn.indexOf(game[player]) !== -1) {
game[player] += getDice();
game = checkMove(game, player);
}

if (skipTurn.indexOf(game[player]) !== -1) {
game[anotherPlayer] += getDice();
game = checkMove(game, anotherPlayer);
}

if (game[player] == 39) {
game[player] = 0;
game[player + 'Catched']++;
}

if (game[player] == 4) {
game[player] = 8;
}

if (game[player] == 23) {
game[player] = 9;
}

if (game[player] == 24) {
game[player] = 34;
}

if (game[player] == 30) {
game[player] = 20;
}

if (game[player] == 42) {
game[player] = 52;
}

if (game[player] == 60) {
game[player] = 50;
}

if (game[player] == 65) {
game[player] = 74;
}

if (game[player] == 79) {
game[player] = 88;
}

if (game[player] == 101) {
game[player] = 91;
}

if (game[player] == 107) {
game[player] = 112;
}

return game;
}


function getDice() {
return Math.floor(Math.random() * 6 + 1);
}


main(1000000);


Все оформление кода безнадежно поломалось, кому нужен javascript, можете посмотреть его в хабровской статье из моего профиля со списком: https://habr.com/ru/users/qnok/posts/

Насколько дизморалящий баланс в этой настолке с чёрной дырой Настольные игры, Javascript, Теория вероятностей, Gamedev, Тестирование, Эмуляция, Длиннопост

Для запуска подойдет любое окно браузера, F12, console, copy-paste

Итого, при эмуляции одного миллиона игр мы получаем такую статистику:
1) Вероятность того, что хоть кто-нибудь хотя бы раз попадет в черную дыру: 50% (!!!);
2) Вероятность того, что игра будет несправедливой, когда у кого-то будет больше попаданий в черную дыру, чем у оппонента: 45%;
3) Вероятность того, что игрок с большим попаданием в чёрную дыру проиграет: 92%.


А что можно сделать?


Самый примитивный вариант: игнорировать чёрную дыру или считать её за обычный пропуск хода.
Вариант посложнее: каждому игроку дать по две фишки, чтобы была возможность выбора, кем передвигаться. В этом случае игра превращается из простого рандома в чуть более тактическую игру. И ребёнку гораздо полезнее, когда он не просто тренируется соблюдать игровые правила, но и учится играм с контролем.


Заключение


Вероятность попадания в черную дыру на 50% меня весьма удивила, я ожидал поменьше. Не менее удивительны целых 8% победы даже в случае чёрной дыры. Вот они когнитивные искажения.
А вот гейм-дизайнерам, я считаю, нужно всё же тестировать свои собственные игры получше. Анализ "на глазок" может подложить подобную свинью. Данная механика приносит почти всегда только разочарование и 8% на "победу вопреки" того не стоит. Особенно в игре, где это "вопреки" происходит исключительно по воле случая.

Показать полностью 2
[моё] Настольные игры Javascript Теория вероятностей Gamedev Тестирование Эмуляция Длиннопост
51
5
cherkalexander
cherkalexander
2 года назад
Web-технологии

Временная Мёртвая Зона⁠⁠

☠️ Временная мёртвая зона (ВМЗ) — участок от начала блока кода, до строки, где переменная объявлена и инициализирована. Понятие ВМЗ применяется только к переменным определённым с помощью let и const.

Временная Мёртвая Зона Кросспостинг, Pikabu Publish Bot, Javascript, Текст, Frontend

- Строки 2-5 — временная мёртвая зона. Область видимости переменной there началась (из-за “поднятия” переменных в JS), но она всё еще не объявлена, поэтому при доступе к переменной произойдёт ошибка - ReferenceError
- Строка 7 — конец временной мёртвой зоны

Смысл временной мёртвой зоны — лёгкость нахождения ошибок доступа к неинициализированным переменным, с которыми мы встречаемся при использовании var.

Подробнее можно почитать на MDN.


https://t.me/cherkashindev/73

Показать полностью
[моё] Кросспостинг Pikabu Publish Bot Javascript Текст Frontend
2
1
AlexSupertrump
AlexSupertrump
2 года назад

Программисты самоучки расскажите о своём пути⁠⁠

Привет Пикабу. Понимаю, что тема заезжена, и в отдельных постах наверняка есть куча разрозненных комментариев с подобными историями, однако очень хотелось бы почитать о вашем становлении в данной профессии.

Расскажите, как вы пришли к программированию, сколько учились и как это проходило; что вам помогало при обучении, и что давалось тяжелее всего; как вы получили свою первую работу и чем занимаетесь сейчас.

В общем, буду рад почитать о вашем пути.

IT Интернет Программирование Python Javascript Программист Истории из жизни Профессия Текст
9
Аноним
Аноним
2 года назад

Какой язык программирования стоит учить для поиска работы?⁠⁠

хочу начать начать изучать язык какой начать учить лучше ? какой из них более востребован ?

Язык Программирование Учеба и работа Программист IT Разработка Python Windows C++ Javascript Текст
27
3
shaitan.vladimir
shaitan.vladimir
2 года назад
Web-технологии

Урок #12 - Преобразование типов данных в JavaScript [типы данных]⁠⁠

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

Файлы к уроку - https://github.com/junjun-it-courses/js_course_3_lesson_3

[моё] Программист IT Разработка Javascript Frontend Веб-разработка Интернет Программирование Видео YouTube
0
73
DELETED
2 года назад

У нас с JS есть общая тайна - мы оба не разбираемся в больших числах⁠⁠

У нас с JS есть общая тайна - мы оба не разбираемся в больших числах Разработка, Javascript, Json, IT юмор, Программирование
У нас с JS есть общая тайна - мы оба не разбираемся в больших числах Разработка, Javascript, Json, IT юмор, Программирование

P.S. JS не поддерживает целочисленные типы, все числа являются number, который по факту double, поэтому самый большой int который JS может сохранить без потери точности - 2^53 - 1

Никаких ошибок при попытке обработать слишком большое число не будет - оно просто сконвертируется в ближайшее представимое double (удачного дебага, если это ID в базе)

То же касается JSON - как формат, он не содержит точных требований как обрабатывать числа - всё number и зависит от имплементации. Какие-то языки и библиотеки различают int и double автомагически, какие-то всё интерпретируют как double, какие-то падают на конверсии.

Показать полностью 1
[моё] Разработка Javascript Json IT юмор Программирование
33
15
MEPPU.6PEHDU3AUK
MEPPU.6PEHDU3AUK
2 года назад
Программисты шутят

Джаваскрипт⁠⁠

Джаваскрипт
Юмор Картинка с текстом Скриншот Программирование Javascript Повтор Мат
5
22
user5026104
2 года назад
Студенческое общество

Команда для разработки соц сети⁠⁠

Привет! Меня зовут Никита, я из Беларуси, Минск. Я заинтересован в веб-разработке. Неплохо знаю html и css, поверхостно знаю php и javascript. Недавно я заинтересовался в проекте для школы. Я хочу сделать сайт-соц.сеть для моей школы, в которой будут чаты для каждого класса, а также общешкольный чат для оповещения администрацией о важных мероприятиях всю школы сразу, через один чат.

Так как я совсем поверхостно знаю php и javascript мне нужна команда ребят (желательно моего возраста 13-15 лет), которые знают php и javascript лучше меня,  и которые смогут помочь мне в разработке моего проекта. Мне понадобится помощь в создании системы регистрации и авторизации, а также в создании закрытых чатов. Ну и еще я ищу новые знакомства)

Пишите мне в тг @nikitkakovrov.

[моё] Студенты Программирование Веб-разработка Веб-дизайн PHP Javascript HTML CSS Mysql Школа IT Команда Знакомства Друзья Текст
12
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии