Азартные игры на PHP Никита Кислицин Хакер, номер #075, стр. 075-118-5 Упрощенный код, вычисляющий выигрышные ставки $r=rand(1,36); $go=array($r); $i=1; $i++; if($r%2==1) {$go[$i]=61;} //нечетное, есть остаток от целочисленного деления на 2 else { //четное $go[$i]=60; } $i++ if(isred($r)) { //выпало красное $go[$i]=50; } else { $go[$i]=51;} //черное // и так далее. Думаю, несложно уяснить, как это работает. В зависимости от того, какое число выпало, выявляются его признаки: цвет, четность и диапазон, куда оно попадает. В соответствии с этой информацией строится массив выигрышных кодов. Далее, в процессе парсинга XML-документа со ставками пользователя, проверяется, какие из них являются выигрышными и в зависимости от кода ставки происходит расчет выигрыша. Так, если выиграла ставка с кодом до 36, то выигрыш умножается на 36, если 50 или 51 – то удваивается, и так далее. Вот и все Ну, вот мы и подошли к логическому завершению. А что, действительно. Мы разобрались с процессом управления флэш-приложениями, с тем, как можно импортировать и экспортировать переменные. Не забыли и о процессе вычисления выигрышных ставок и суммы выигранных денег. По существу это все: остальные функции по работе с пользователями и записи информации о транзакциях сводятся к составлению простейших sql-запросов, здесь у тебя проблем не должно возникнуть. На самом деле, вывод из всей этой истории очень простой: Flash удобно использовать для создания гибких пользовательских интерфейсов, управляемых внешними программами, которые и несут весь интеллект системы. Насколько хороша rand()? В самом деле, насколько “случайные” числа выдает эта функция? Наверное, суть вопроса следует пояснить. На первый взгляд, кажется, что тут такого: вызвал функцию, вывела число. Вызвал еще раз, вывела другое. Еще раз – третье. Работает, супер. Однако насколько независимы эти выпадения? Пощелкай раз сто, тебе может показаться, что какие-то числа из диапазона выпадают чаще других. Это особенно актуально, когда диапазон чисел невелик, как в нашем случае. Идеальный счетчик случайных чисел должен обеспечивать равную вероятность выпадения каждого номера. Значит, нам нужно как-то оценить работу функции rand(). Путь для этого только один: надо подвергнуть функцию так называемым статистическим испытаниям. Мы вызовем ее, скажем, сто тысяч раз и посмотрим, нет ли вдруг чисел, которые выпадают сильно чаще других, или наоборот – реже. В этом случае если поделить число выпадений определенного поля на общее число попыток, мы получим “частоту” этого события. В математической статистике, которую мы с Николаем G недавно сдали, доказывается, что частота с ростом количества попыток в целом мало отличается от вероятности и поэтому мы вполне можем “измерить” ее для каждого числа. Надо рассчитывать получить для каждого из чисел что-то близкое к 1/36. Посмотрим, как дело обстоит на практике: for($i=100;$i<=100000;$i++) { $r=rand(1,36); mysql_query("update rnd set num=num+1 where i=$r"); } На первый взгляд может показаться, что счетчик фиговый. Простой пример. При сотне испытаний почти всегда были числа, которые не выпали _ни разу_. Это может насторожить. Однако если сесть с ручкой, кусочком бумаги и справочником по математике, можно проверить, что такая ситуация допустима и вполне нормальна. При росте n ситуация конечно же улучшается и, в общем, видно, что счетчик ведет себя корректно. Следовательно, теперь мы знаем, что использовали для нашего казино нормальный счетчик, который генерирует действительно независимые случайные числа. |