public function generateLog($winner = false) { $gameid = strtotime('now'); $template = file_get_contents('data/log.html'); $fp = fopen(sprintf('logs/log_%d.html', $gameid), 'a'); $htplayers = array(); foreach ($this->players as $pl) { $htplayers[] = sprintf('<li>%s</li>', htmlspecialchars(parent::playerName($pl))); } $players = implode("\n", $htplayers); if ($winner) { $data = sprintf("After %d hands played, the player <strong>%s</strong> won the total pot of <strong>\$%0.2f</strong>", $this->game, parent::playerName($winner), $winner->money); } else { $htplayers = array(); foreach ($this->players as $pl) { $htplayers[] = sprintf('<li>%s ($%0.2f)</li>', htmlspecialchars(parent::playerName($pl)), $pl->money); } $htplayers = implode("\n", $htplayers); $data = sprintf("After %d hands no winner was determined a summary of each individual player's money follows:<ol>%s</ol>", $this->game, $htplayers); } $template = str_replace("{players}", $players, $template); $template = str_replace("{gameid}", $gameid, $template); $template = str_replace("{winner}", $data, $template); $template = str_replace("{version}", parent::$version, $template); $template = str_replace("{date}", date('d-m-Y h:i', $gameid), $template); $template = str_replace("{startmoney}", sprintf('%0.2f', $this->playermoney), $template); $template = str_replace("{bigblind}", sprintf('%0.2f', $this->bigblind), $template); $template = str_replace("{smallblind}", sprintf('%0.2f', $this->smallblind), $template); $template = str_replace("{maxgames}", $this->totalgames, $template); $template = str_replace("{winner}", $data, $template, $template); fputs($fp, $template); fclose($fp); require_once 'data/jpgraph.php'; require_once 'data/jpgraph_line.php'; $width = 900; $height = 300; $graph = new Graph($width, $height); $graph->img->SetMargin(40, 40, 40, 40); $graph->SetShadow(); $graph->setScale('intlin'); $graph->title->Set('Amount of money per player, per hand'); $graph->xaxis->title->Set('Hand'); $graph->yaxis->title->Set('Money'); foreach ($this->moneylog as $id => $data) { $p = $this->players[$id]; $lineplot = new LinePlot($data); $lineplot->setweight($id); $lineplot->SetLegend(parent::playerName($p)); $graph->add($lineplot); } $graph->stroke(sprintf('logs/playermoney_%d.jpg', $gameid)); // Pie graph, showing checks, folds, bets, wins, calls and raises require_once "data/jpgraph_pie.php"; // Create the Pie Graph. $height = ceil(count($this->players) / 2) * 440; $graph = new PieGraph($width, $height); $graph->SetShadow(); // Set A title for the plot $graph->title->Set("Moves per user"); // Create plots $size = 0.2; $x = array(0.25, 0.75); $y = 220; $i = 1; $legend = array("Check", "Call", "Bet", "Raise", "Fold"); foreach ($this->players as $id => $player) { $plot = new PiePlot(array($player->checks, $player->calls, $player->bets, $player->raises, $player->folds)); if ($player->id == 1) { $plot->SetLegends($legend); } $plot->SetLabelType(PIE_VALUE_ADJPERCENTAGE); $plot->SetSize($size); $plot->SetCenter($x[$i - 1], $y); if ($i == 2) { $i = 0; $y += 420; } $i++; $plot->title->Set(parent::playerName($player)); $graph->add($plot); } $graph->stroke(sprintf('logs/playermoves_%d.jpg', $gameid)); // Bargraph containing each player's wins $height = 70 * count($this->players); require_once "data/jpgraph_bar.php"; $graph = new Graph($width, $height); $graph->SetScale('textlin'); $graph->SetShadow(); $lbl = array(); $data = array(); foreach ($this->players as $pl) { $lbl[] = parent::PlayerName($pl); $data[] = $pl->wins; } $top = 60; $bottom = 30; $left = 80; $right = 30; $graph->Set90AndMargin($left, $right, $top, $bottom); $graph->xaxis->SetTickLabels($lbl); $graph->xaxis->SetLabelAlign('right', 'center', 'right'); $graph->yaxis->SetLabelAlign('center', 'bottom'); $graph->title->Set('Amount of hands won by individual players'); $bplot = new BarPlot($data); $bplot->SetFillGradient("navy", "lightsteelblue", GRAD_HOR); $bplot->SetWidth(0.5); $bplot->SetYMin(0); $graph->Add($bplot); $graph->Stroke(sprintf('logs/playerwins_%d.jpg', $gameid)); $this->newgame = false; // Remove the clients from the server $this->broadcast("[SERVER] Thank you for playing Texas Hold`em (LIMIT)\n[SERVER] If you want to play another game, just reconnect to the server!"); $this->return = true; foreach ($this->players as $player) { $this->disconnect($player); } $this->return = true; $this->restore(); }