A php killer game implementation
at master 3.1 kB view raw
1<?php 2session_start(); 3 4require_once 'priv/errorhandler.php'; 5require_once 'priv/twig.php'; 6require_once 'priv/pdo.php'; 7 8if(!isset($_SESSION['qr']['id'])) 9{ 10 header('Location: index.php'); 11 die(); 12} 13 14$sql = " 15SELECT 16 id, 17 name, 18 start_date, 19 end_date, 20 show_class, 21 (COUNT(qr_players.target) != 0) AS targets_assigned, 22 (COUNT(has_won_check.target) != 0) AS someone_has_won, 23CASE 24 WHEN NOW() < start_date THEN 1 -- The event hasen't started yet 25 WHEN NOW() > end_date THEN 2 -- The event has ended 26 WHEN NOW() < end_date AND NOW() > start_date THEN 3 -- The event is ongoing 27END AS status 28FROM qr_events AS event 29LEFT JOIN qr_players ON event.id = qr_players.qr_events_id AND qr_players.target IS NOT NULL 30LEFT OUTER JOIN qr_players AS has_won_check ON qr_players.target = qr_players.qr_users_id 31WHERE display_date > NOW() ORDER BY start_date DESC LIMIT 1 32"; 33$event = DB::prepare($sql)->texecute()->fetch(); 34$model['event'] = $event; 35 36if(!isset($event['id'])) 37{ 38 echo $twig->render('info/noevents.html'); 39 die(); 40} 41 42if($event['status'] == 3 && $event['targets_assigned'] == 0) 43{ 44 $sql = 'SELECT * FROM qr_players WHERE qr_events_id = ?'; 45 $users = DB::prepare($sql)->texecute([$event['id']])->fetchAll(); 46 shuffle($users); 47 48 $sql = 'UPDATE qr_players SET target = ? WHERE qr_users_id = ? AND qr_events_id = ?'; 49 foreach($users as $key => $user) 50 { 51 $id = isset($users[$key + 1]) ? $users[$key + 1]['qr_users_id'] : $users[0]['qr_users_id']; 52 DB::prepare($sql)->texecute([$id, $user['qr_users_id'], $event['id']]); 53 } 54 header('Location: game.php'); 55 die(); 56} 57 58$sql = ' 59SELECT 60 player.secret, 61 player.target, 62 player.feedback_given, 63 player.alive, 64 target_user.name AS target_name, 65 target_user.class AS target_class 66FROM qr_players AS player 67LEFT OUTER JOIN qr_users AS target_user ON player.target = target_user.id 68WHERE player.qr_users_id = ? AND player.qr_events_id = ? 69'; 70$player = DB::prepare($sql)->texecute([$_SESSION['qr']['id'], $event['id']])->fetch(); 71$model['player'] = $player; 72 73if(!$player) 74{ 75 if($event['status'] == 3) 76 { 77 echo $twig->render('info/ongoing.html', $model); 78 } 79 else 80 { 81 echo $twig->render('register.html', $model); 82 } 83 die(); 84} 85 86if($event['status'] == 1) 87{ 88 echo $twig->render('info/countdown.html', $model); 89 die(); 90} 91 92if($event['status'] == 2) 93{ 94 echo $twig->render('info/eventover.html', $model); 95 die(); 96} 97 98if($player['alive'] == 0) 99{ 100 echo $twig->render('info/dead.html', $model); 101 die(); 102} 103 104if($_SESSION['qr']['id'] == $player['target']) 105{ 106 echo $twig->render('info/win.html', $model); 107 die(); 108} 109 110$sql = ' 111SELECT 112 victim.name, 113 victim.class, 114 kills.created_date 115FROM qr_kills AS kills 116RIGHT JOIN qr_users AS victim ON kills.target = victim.id 117WHERE kills.killer = ? AND kills.qr_events_id = ? 118'; 119$model['victims'] = DB::prepare($sql)->texecute([$_SESSION['qr']['id'], $event['id']])->fetchAll(); 120 121echo $twig->render('game.html', $model);