我即将创建一个脚本,为我的彩票选择一个赢家.门票的数量选择如下:amount of money * 100所以$ 1.26 = 126门票.
我做了这个,它给了我中奖的票号,但后来我无法得到获胜的用户:
$totaltickets = 0;
foreach($players as $player){
$totaltickets += $player->depositedValue*100;
}
$winningTicket = rand(1,$totaltickets);
Run Code Online (Sandbox Code Playgroud)
我有这样的行:
Player1 - 1.25$
Player2 - 5.99$
etc..
Run Code Online (Sandbox Code Playgroud)
如果有可能那么我想保持这样,并且每个票证在数据库中没有1000行.
我正在考虑保留你对数字的想法而不是引入数组。
我将让玩家保持他们的票位置(开始/结束)。当我随机挑选一张彩票时,我会看看我的号码是否在他们的范围内,如果是,那么我就找到了中奖者。
<?php
class TicketMaster {
private $players = array();
public $total = 0;
public function addPlayer($player) {
$player->tickets[0] = $this->total;
$this->total += $player->value;
$player->tickets[1] = $this->total;
$this->players[] = $player;
}
public function selectWinner() {
$ticket = rand(0, $this->total);
foreach ($this->players as $player)
if ($ticket >= $player->tickets[0] && $ticket <= $player->tickets[1])
return $player;
return false;
}
}
class Player {
public $name = '';
public $value = 0;
public $tickets = array(0, 0);
function __construct($name, $value) {
$this->name = $name;
$this->value = $value;
}
}
$ticketMaster = new TicketMaster();
$ticketMaster->addPlayer(new Player("John", 200));
$ticketMaster->addPlayer(new Player("Mike", 200));
$ticketMaster->addPlayer(new Player("Dave", 1000));
echo $ticketMaster->selectWinner()->name;
Run Code Online (Sandbox Code Playgroud)
还
$ticket = rand(0, $this->total); //change to random_int, but I kept it at rand because eval.in only works with this one
Run Code Online (Sandbox Code Playgroud)
输出:Dave
Dave 大部分时间都获胜,因为他拥有大约 1000 张门票,而其他两名玩家总共只有 400 张门票。