blamed

mafia_sim_php

May 10th, 2011
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 15.81 KB | None | 0 0
  1. <?php
  2.  
  3. class Player {
  4.     function __construct($number=null, $mafia = 'no', $can_kill = 'no', $blocker = 'no', $defence = 'no', $healer = 'no') {
  5.         $this->number = $number;
  6.         $this->mafia = $mafia;
  7.         $this->can_kill = $can_kill;
  8.         $this->blocker = $blocker;
  9.         $this->defence = $defence;
  10.         $this->healer = $healer;
  11.     }
  12.     public $alive = 'yes';
  13.     public $healed = 'no';
  14.     public $blocked = 'no';
  15.     public $moved = 'no';
  16.     public $kills = 0;
  17.     public $executed_rate = 0;
  18. }
  19. ?>
  20.    
  21. <html>
  22. <head>
  23. <title>Title of the document</title>
  24. <style type="text/css">
  25.     .header td {font-weight: bold; padding-right: 5px; border-right: 1px solid gray;}
  26.     .header td:last-child {border-right: none;}
  27.     .checkbox input {margin-left: 1em;}
  28.     .alt {background-color: lightgrey;}
  29.     .player {padding-right: 5px;}
  30. </style>
  31. </head>
  32.  
  33. <body>
  34. <?php
  35. // settings
  36. $execution = 'yes';
  37. $bad_executed = 20;
  38. $good_executed = 20;
  39. $number_of_players = 20;
  40. $players = array();
  41. ?>
  42. <form action="index.php" method="post">
  43.     <table class="checkboxes">
  44.         <tr class="header">
  45.             <td>number</td> <td>mafia</td> <td>can kill</td> <td>blocker</td> <td>has defence</td> <td>healer</td>
  46.         </tr>
  47.                 <?php
  48.                 for ($i = 0; $i < $number_of_players; $i++) {
  49.                     $players[$i] = new Player($i);
  50.                     if (!($i & 1)) {
  51.                         echo '<tr>';
  52.                     }
  53.                     else {
  54.                         echo '<tr class="alt">';
  55.                     }
  56.                     if ($i == 0){
  57.                         echo '<td class="player">Player ',$i,'</td>
  58.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  59.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  60.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  61.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  62.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  63.                     }
  64.                     elseif ($i < 3){
  65.                         echo '<td class="player">Player ',$i,'</td>
  66.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  67.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  68.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  69.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  70.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  71.                     }
  72.                     elseif ($i == 3){
  73.                         echo '<td class="player">Player ',$i,'</td>
  74.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  75.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  76.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  77.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  78.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  79.                     }
  80.                     elseif ($i == 4){
  81.                         echo '<td class="player">Player ',$i,'</td>
  82.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  83.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  84.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  85.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  86.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>' ;
  87.                     }
  88.                     elseif ($i == 5 || $i == 6){
  89.                         echo '<td class="player">Player ',$i,'</td>
  90.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  91.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  92.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  93.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  94.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  95.                     }
  96.                     elseif ($i == 7){
  97.                         echo '<td class="player">Player ',$i,'</td>
  98.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  99.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  100.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  101.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  102.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  103.                     }
  104.                     elseif ($i == 8){
  105.                         echo '<td class="player">Player ',$i,'</td>
  106.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  107.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  108.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  109.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  110.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>' ;
  111.                     }
  112.                     elseif ($i == 8 || $i == 9){
  113.                         echo '<td class="player">Player ',$i,'</td>
  114.                              <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  115.                              <td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  116.                              <td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>
  117.                              <td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes" checked="yes"/></td>
  118.                              <td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes" /></td>' ;
  119.                     }
  120.                     else {
  121.                         echo '<td class="player">Player ',$i,'</td> <td class="checkbox"><input class = "mafia" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td><td class="checkbox"><input class = "can_kill" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td><td class="checkbox"><input class = "blocker" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td><td class="checkbox"><input class = "defence" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td><td class="checkbox"><input class = "healer" type="checkbox" name="players_input[',$i,'][]" value="yes"/></td>' ;
  122.                     }
  123.                     echo '</tr>';
  124.                    
  125.                 }
  126.                 ?>
  127.     </table>
  128.     <input type="submit" value="Submit" name="submit"/>
  129. </form>
  130. <?php
  131. for ($i = 0; $i < $number_of_players; $i++) {
  132.     for ($n = 0; $n < 5; $n++) {
  133.         if (isset($_POST['players_input'][$i][$n])) {
  134.             $players_input[$i][$n] = 'yes';
  135.         }
  136.         else {
  137.             $players_input[$i][$n] = 'no';
  138.         }
  139.        
  140.     }
  141.    
  142. }
  143. if (isset ($players_input)) {
  144.     foreach ($players_input as $key => $subarray) {
  145.         $players[$key]->mafia = $subarray[0] ;
  146.         $players[$key]->can_kill = $subarray[1] ;
  147.         $players[$key]->blocker = $subarray[2] ;
  148.         $players[$key]->defence = $subarray[3] ;
  149.         $players[$key]->healer = $subarray[4] ;
  150.     }
  151.     $days_count = 0;
  152.     $current_kill_count = 0;
  153.     while (True) {
  154.         $killed_list = array();
  155.         $alive_list = array();
  156.         $maniac_list = array();
  157.         $alive_count = 0;
  158.         $mafia_count = 0;
  159.         $maniac_count = 0;
  160.         $player_count = 0;
  161.        
  162.         foreach ($players as $player){
  163.             if ($player->alive == 'yes'){
  164.                 $alive_count++;
  165.                 $alive_list[] = $player;
  166.                 if ($player->mafia == 'yes'){
  167.                     $mafia_count++;
  168.                 }
  169.                 if ($player->mafia == 'no' && $player->can_kill == 'yes'){
  170.                     $maniac_count++;
  171.                     $maniac_list[] = $player;
  172.                 }
  173.                
  174.             }
  175.         }
  176.         echo '<hr/>';
  177.         echo $days_count, 'days passed';
  178.         echo 'Alive:', $alive_count;
  179.         echo 'Town:', ($alive_count - $mafia_count - $maniac_count);
  180.         echo 'Mafia:', $mafia_count;
  181.         echo 'Maniac:', $maniac_count;
  182.        
  183.         if (($alive_count - $mafia_count) <= $mafia_count && $maniac_count == 0 || ($alive_count - $mafia_count - $maniac_count) == 0 && ($mafia_count > $maniac_count)) {
  184.             echo 'Mafia win';
  185.             break;
  186.         }
  187.         if ($mafia_count == 0 && $maniac_count == 0){
  188.             echo 'Town win';
  189.             break;
  190.         }
  191.         if ($mafia_count == 0 && $maniac_count == 1 && $alive_count <= 2){
  192.             echo 'Maniac win';
  193.             break;
  194.         }
  195.        
  196.         foreach ($alive_list as $player){
  197.             $player->moved = 'no';
  198.             $player->blocked = 'no';
  199.             $player->healed = 'no';
  200.             $player->executed_rate = 0;
  201.         }
  202.        
  203.         // blockers turn
  204.         foreach ($alive_list as $player){
  205.             if ($player->blocked == 'no' && $player->moved == 'no'){
  206.                 if($player->blocker == 'yes'){
  207.                     if($player->mafia == 'no'){
  208.                         $target = target_not_self($alive_count, $alive_list, $player);
  209.                         $alive_list[$target]->blocked = 'yes';
  210.                         $player->moved = 'yes';
  211.                         echo 'Town blocker ',$player->number,' blocked ', $alive_list[$target]->number;
  212.                        
  213.                     }
  214.                     elseif($player->mafia == 'yes'){
  215.                         $block = 0;
  216.                         $n = 0;
  217.                         $target = target_not_mafia($alive_count, $alive_list, $player);
  218.                         $alive_list[$target]->blocked = 'yes';
  219.                         if ($mafia_count != 1){
  220.                             $player->moved = 'yes';
  221.                         echo 'Mafia blocker ',$player->number,' blocked ', $alive_list[$target]->number;
  222.                         }
  223.                     }
  224.                 }
  225.             }
  226.         }
  227.        
  228.        
  229.         // healers turn
  230.         foreach ($alive_list as $player){
  231.             if ($player->blocked == 'no' && $player->moved == 'no'){
  232.                 if($player->healer == 'yes'){
  233.                     if($player->mafia == 'no'){
  234.                         $target = target_not_self($alive_count, $alive_list, $player);
  235.                         $alive_list[$target]->healed = 'yes';
  236.                         $player->moved = 'yes';
  237.                         echo 'Town healer ',$player->number,' healed ', $alive_list[$target]->number;
  238.                        
  239.                     }
  240.                     elseif($player->mafia == 'yes'){
  241.                         $target = target_not_mafia($alive_count, $alive_list, $player);
  242.                         $alive_list[$target]->blocked = 'yes';
  243.                         if ($mafia_count != 1){
  244.                             $player->moved = 'yes';
  245.                         echo 'Mafia healer ',$player->number,' healed ', $alive_list[$target]->number;
  246.                         }
  247.                     }
  248.                 }
  249.             }
  250.         }
  251.        
  252.        
  253.        
  254.        
  255.         // maniacs turn
  256.         foreach ($maniac_list as $player){
  257.             if ($player->blocked == 'no' && $player->moved == 'no'){
  258.                 $target = target_not_self($alive_count, $alive_list, $player);
  259.                 if ($alive_list[$target]->defence == 'no' && $alive_list[$target]->healed == 'no'){
  260.                     $killed_list[]= $alive_list[$target];
  261.                     $player->kills++;                          
  262.                 }
  263.                 if ($alive_list[$target]->defence == 'yes'){
  264.                     $alive_list[$target]->defence = 'no';
  265.                 }
  266.                 if ($mafia_count != 1){
  267.                     $player->moved = 'yes';
  268.                 echo 'Maniac ',$player->number,' trying to kill ', $alive_list[$target]->number;
  269.                 }
  270.             }
  271.         }
  272.        
  273.         // mafia turn
  274.         $mafia_kill = 0;
  275.         $mafia_list = array();
  276.         foreach ($alive_list as $player){
  277.             if ($player->blocked == 'no' && $player->moved == 'no' && $player->mafia == 'yes' && $player->can_kill == 'yes'){
  278.                     $mafia_list = $player;
  279.             }
  280.            
  281.         }
  282.        
  283.        
  284.        
  285.        
  286.        
  287.        
  288.     }
  289.            
  290. }
  291.  
  292.  
  293. function target_not_self ($alive_count, $alive_list, $player){
  294.     $action = 0;
  295.     $n = 0;
  296.     while ($action == 0 || $n > 1000){
  297.         $n++;
  298.         $target = mt_rand(0, ($alive_count-1));
  299.         if ($alive_list[$blocked] != $player){
  300.             $action = 1;
  301.         }                        
  302.     }
  303.     return $target;
  304. }
  305.  
  306. function target_not_mafia ($alive_count, $alive_list, $player){
  307.     $action = 0;
  308.     $n = 0;
  309.     while ($action == 0 || $n > 1000){
  310.         $n++;
  311.         $target = mt_rand(0, ($alive_count-1));
  312.         if ($alive_list[$blocked]->mafia == 'no'){
  313.             $action = 1;
  314.         }                        
  315.     }
  316.     return $target;
  317. }
  318. ?>
  319.  
  320.  
  321.  
  322. </body>
  323.  
  324. </html>
Advertisement
Add Comment
Please, Sign In to add comment