From 2892d62519ec4230c76b5481e852b38164c14983 Mon Sep 17 00:00:00 2001 From: gnieark Date: Sat, 18 Jun 2016 00:56:46 +0200 Subject: [PATCH] dodo --- src/arenas/Battleship/act.php | 624 +++++++++++++++-------------- src/arenas/connectFour/doc-en.html | 2 +- 2 files changed, 327 insertions(+), 299 deletions(-) diff --git a/src/arenas/Battleship/act.php b/src/arenas/Battleship/act.php index 0fbb6ef..d090853 100644 --- a/src/arenas/Battleship/act.php +++ b/src/arenas/Battleship/act.php @@ -20,304 +20,332 @@ switch ($_POST['act']){ session_unset(); $_SESSION['xd_check']=$xd; - //verifier parametres POST - $postParamsWanted=array( - // key,min,max - array('gridWidth',1,100), - array('gridHeight',1,100), - array('nbShip1',0,10), - array('nbShip2',0,10), - array('nbShip3',0,10), - array('nbShip4',0,10), - array('nbShip5',0,10), - array('nbShip6',0,10) - ); - - foreach($postParamsWanted as $p){ - if(!isset($_POST[$p[0]])){ - error (500,'missing parameter 1'); - die; - }else{ - $value=$_POST[$p[0]]; - } - if ( - (!is_numeric($value)) - OR ($value < $p[1]) - OR ($value > $p[2]) - ) - { - error(500,'wrong parameters '.$p[0]); - die; - } - $postValues[$p[0]]=$value; - } - //check if bots exists - $bot1Exists = false; - $bot2Exists = false; - foreach($bots as $bot){ - if($bot['id'] == $_POST['bot1']){ - - $bot1 = $bot; - $_SESSION['bot1']=$bot; - $bot1Exists =true; - } - if($bot['id'] == $_POST['bot2']){ - $bot2 = $bot; - $_SESSION['bot2']=$bot; - $bot2Exists =true; - } - if ($bot1Exists && $bot2Exists){ - break; - } - } - if ((!$bot1Exists) OR (!$bot2Exists)){ - error (500,"missing parameter 2"); - } - - if(!is_it_possible_to_place_ships_on_grid($postValues['gridWidth'],$postValues['gridHeight'],$postValues['nbShip1'],$postValues['nbShip2'],$postValues['nbShip3'],$postValues['nbShip4'],$postValues['nbShip5'],$postValues['nbShip6'])){ - error (404,"grid is too little for these ships"); - } - - //vars checked, lets init the initGame - - $_SESSION['matchId']=get_unique_id(); - - - for($player = 1; $player <= 2; $player++){ - - if($player==1){ - $opponentName=$bot2['name']; - $currentBot=$bot1; - }else{ - $opponentName=$bot1['name']; - $currentBot=$bot2; - } - - $botParamsToSend=array( - 'game' => 'Battleship', - 'match_id' => $_SESSION['matchId']."-1", - 'act' => 'init', - 'opponent' => $opponentName, - 'width' => $postValues['gridWidth'], - 'height' => $postValues['gridHeight'], - 'ship1' => $postValues['nbShip1'], - 'ship2' => $postValues['nbShip2'], - 'ship3' => $postValues['nbShip3'], - 'ship4' => $postValues['nbShip4'], - 'ship5' => $postValues['nbShip5'], - 'ship6' => $postValues['nbShip6'] - - ); - $anwserPlayer=get_IA_Response($currentBot['url'],$botParamsToSend); - $boatsPlayer = json_decode( html_entity_decode($anwserPlayer)); - if(!$boatsPlayer){ - echo $currentBot['name']." a fait une réponse non conforme, il perd.".$anwserPlayer; - if($player==1){ - save_battle('Battleship',$bot1['name'],$bot2['name'],2); - }else{ - save_battle('Battleship',$bot1['name'],$bot2['name'],1); - } - die; - } - - //init grid - for($y = 0; $y < $postValues['gridHeight']; $y++){ - for($x = 0; $x < $postValues['gridWidth']; $x++){ - $grid[$player][$y][$x]=0; - } - } - - //vérifier si'il y a le bon nombre de bateaux et les placer - $nbBoatsIwant=array(0,$postValues['nbShip1'],$postValues['nbShip2'],$postValues['nbShip3'], - $postValues['nbShip4'],$postValues['nbShip5'],$postValues['nbShip6']); - - foreach($boatsPlayer as $boat){ - list($startCoord,$endCoord) = explode("-",$boat); - list($xStart,$yStart)=explode(",",$startCoord); - list($xEnd,$yEnd)=explode(",",$endCoord); - if($xStart == $xEnd){ - $long=abs($yStart - $yEnd) +1; - }else{ - $long=abs($xStart - $xEnd) +1; - } - $nbBoatsIwant[$long]-=1; - $grid[$player]=place_ship_on_map($xStart,$yStart,$xEnd,$yEnd,$grid[$player]); - if(!$grid[$player]){ - echo $currentBot['name']." n'a pas placé correctement ses bateaux. Certains se chevauchent. Il perd."; - if($player==1){ - save_battle('Battleship',$bot1['name'],$bot2['name'],2); - }else{ - save_battle('Battleship',$bot1['name'],$bot2['name'],1); - } - die; - } - //remember each cases of each boats - $boatListOfCases=array(); - if($xStart == $xEnd){ - if($yStart <= $yEnd ){ - $start=$yStart; - $end=$yEnd; - }else{ - $start=$yEnd; - $end=$yStart; + //verifier parametres POST + $postParamsWanted=array( + // key,min,max + array('gridWidth',1,100), + array('gridHeight',1,100), + array('nbShip1',0,10), + array('nbShip2',0,10), + array('nbShip3',0,10), + array('nbShip4',0,10), + array('nbShip5',0,10), + array('nbShip6',0,10) + ); + + foreach($postParamsWanted as $p){ + if(!isset($_POST[$p[0]])){ + error (500,'missing parameter 1'); + die; + }else{ + $value=$_POST[$p[0]]; + } + if ( + (!is_numeric($value)) + OR ($value < $p[1]) + OR ($value > $p[2]) + ) + { + error(500,'wrong parameters '.$p[0]); + die; } - for($i = $start; $i <= $end; $i++){ - $boatListOfCases[]=$xStart.",".$i; - } - }else{ - if($xStart <= $xEnd ){ - $start=$xStart; - $end=$xEnd; - }else{ - $start=$xEnd; - $end=$xStart; - } - for($i = $start; $i <= $end; $i++){ - $boatListOfCases[]=$i.",".$yStart; - } - - } - $_SESSION['ships'][$player][]=$boatListOfCases; - } - foreach($nbBoatsIwant as $nb){ - if($nb <> 0){ - echo $currentBot['name']." n'a pas placé le bon nombre de bateaux. Il perd."; - if($player==1){ - save_battle('Battleship',$bot1['name'],$bot2['name'],2); - }else{ - save_battle('Battleship',$bot1['name'],$bot2['name'],1); - } - die; - } - } - } - $_SESSION['ship1']=$postValues['nbShip1']; - $_SESSION['ship2']=$postValues['nbShip2']; - $_SESSION['ship3']=$postValues['nbShip3']; - $_SESSION['ship4']=$postValues['nbShip4']; - $_SESSION['ship5']=$postValues['nbShip5']; - $_SESSION['ship6']=$postValues['nbShip6']; - $_SESSION['strikes'][1]=array(); - $_SESSION['strikes'][2]=array(); - $_SESSION['width']=$postValues['gridWidth']; - $_SESSION['height']=$postValues['gridHeight']; - echo json_encode($grid); die; - - die; - - break; - case "fight": - - if(count($_SESSION['strikes'][1]) == count($_SESSION['strikes'][2])){ - //player 1 has to fight - $currentPlayer=1; - $currentBot=$_SESSION['bot1']; - $opponent=2; - $opponentName=$_SESSION['bot2']['name']; - }else{ - //it's player2 - $currentPlayer=2; - $currentBot=$_SESSION['bot2']; - $opponentName=$_SESSION['bot1']['name']; - $opponent=1; + $postValues[$p[0]]=$value; } - - $botParamsToSend=array( - 'game' => 'Battleship', - 'match_id' => $_SESSION['matchId']."-".$currentPlayer, - 'act' => 'fight', - 'opponent' => $opponentName, - 'width' => $_SESSION['width'], - 'height' => $_SESSION['height'], - 'ship1' => $_SESSION['ship1'], - 'ship2' => $_SESSION['ship2'], - 'ship3' => $_SESSION['ship3'], - 'ship4' => $_SESSION['ship4'], - 'ship5' => $_SESSION['ship5'], - 'ship6' => $_SESSION['ship6'], - 'your_strikes' => json_encode($_SESSION['strikes'][$currentPlayer]), - 'his_strikes' => json_encode($_SESSION['strikes'][$opponent]) - - ); - $anwserPlayer=get_IA_Response($currentBot['url'],$botParamsToSend); - - if(!preg_match('/^[0-9]+,[0-9]+$/',$anwserPlayer)){ - echo json_encode(array( - 'target' => '', - 'log' => $currentBot['name']." a fait une réponse non conforme, il perd.".$anwserPlayer - )); - save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$opponent); - die; - } - list($x,$y)=explode(",",$anwserPlayer); - - //check if shot is under map's limits - if(($x >= $_SESSION['width']) OR ($y >= $_SESSION['height'])){ - echo json_encode(array( - 'target' => '', - 'log' => $currentBot['name']." a fait un tir en dehors des limites de la carte. ".$x.",".$y." C'est interdit par les conventions de Geneve. Il perd" - )); - save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$opponent); - die; - } - - //put previous strikes in a one dimmension array ; - $previousStrikes=array(); - foreach( $_SESSION['strikes'][$currentPlayer] as $strikes){ - $previousStrikes[]=$strikes['target']; - } - - //do this strike hit a boat? - $continue=1; - $result=''; - - for( $shipIndex = 0; $shipIndex < count( $_SESSION['ships'][$opponent]); $shipIndex ++){ - $ennemyBoat = $_SESSION['ships'][$opponent][$shipIndex]; - - if(in_array($x.",".$y, $ennemyBoat)){ - $result='hit'; - //sunk? - $sunk=true; - foreach($ennemyBoat as $boatCase){ - if((!in_array($boatCase,$previousStrikes)) && ($boatCase <> $x.",".$y)) { - $sunk=false; - break; - } - } - if($sunk){ - $result="hit and sunk"; - //remove the ship - unset($_SESSION['ships'][$opponent][$shipIndex]); - $_SESSION['ships'][$opponent] = array_values($_SESSION['ships'][$opponent]); - //var_dump($_SESSION['ships'][$opponent]); - //win the game? - if(count($_SESSION['ships'][$opponent]) == 0){ - $result="hit sunk and win"; - $continue=0; - save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$currentPlayer); - } - } - - break; - } - } - - //remember this shot - $_SESSION['strikes'][$currentPlayer][]=array( - 'target' => $x.",".$y, - 'result' => $result - ); - - //send message for the arena's ajax web page - echo json_encode(array( - 'opponent'=> $opponent, - 'target' => $x.",".$y, - 'log' => $currentBot['name']." tire en ".$x.",".$y." ".$result, - 'continue' => $continue - )); - - die; - break; - default: - break; + if(($_POST['fullLogs'] <> 'true') && ($_POST['fullLogs'] <> 'false')){ + error(500, 'wrong POST parameters'); + die; + } + if($_POST['fullLogs'] == 'true'){ + $fullLogs = true; + }else{ + $fullLogs = false; + } + + //check if bots exists + $bot1Exists = false; + $bot2Exists = false; + foreach($bots as $bot){ + if($bot['id'] == $_POST['bot1']){ + + $bot1 = $bot; + $_SESSION['bot1']=$bot; + $bot1Exists =true; + } + if($bot['id'] == $_POST['bot2']){ + $bot2 = $bot; + $_SESSION['bot2']=$bot; + $bot2Exists =true; + } + if ($bot1Exists && $bot2Exists){ + break; + } + } + if ((!$bot1Exists) OR (!$bot2Exists)){ + error (500,"missing parameter 2"); + } + + + if(!is_it_possible_to_place_ships_on_grid($postValues['gridWidth'],$postValues['gridHeight'], + $postValues['nbShip1'],$postValues['nbShip2'],$postValues['nbShip3'], + $postValues['nbShip4'],$postValues['nbShip5'],$postValues['nbShip6'])) + { + error (404,"grid is too little for these ships"); + } + + //******vars checked, lets init the initGame ******* + + $_SESSION['matchId']=get_unique_id(); + + + for($player = 1; $player <= 2; $player++){ + + if($player==1){ + $opponentName=$bot2['name']; + $currentBot=$bot1; + }else{ + $opponentName=$bot1['name']; + $currentBot=$bot2; + } + + $botParamsToSend=array( + 'game-id' => $_SESSION['matchId'], + 'game' => 'battleship', + 'action' => 'init', + 'players' => 2 + 'player-index' => $player -1, + 'board' => array( + 'opponent' => $opponentName, + 'width' => $postValues['gridWidth'], + 'height' => $postValues['gridHeight'], + 'ship1' => $postValues['nbShip1'], + 'ship2' => $postValues['nbShip2'], + 'ship3' => $postValues['nbShip3'], + 'ship4' => $postValues['nbShip4'], + 'ship5' => $postValues['nbShip5'], + 'ship6' => $postValues['nbShip6'] + ) + ); + + $anwserPlayerJson=get_IA_Response($currentBot['url'],$botParamsToSend); + if($fulLLogs){ + $fullLogs='Arena send to '.$currentBot['name'].''.htmlentities($anwserPlayerJson['messageSend']).'
+ HTTP status: '.htmlentities($anwserPlayerJson['httpStatus']).'
+ Bot anwser: '.htmlentities($anwserPlayerJson['response']).'
'; + }else{ + $fullLogs=""; + } + + + + $boatsPlayer = json_decode( html_entity_decode($anwserPlayer)); + if(!$boatsPlayer){ + echo $currentBot['name']." a fait une réponse non conforme, il perd.".$anwserPlayer; + if($player==1){ + save_battle('Battleship',$bot1['name'],$bot2['name'],2); + }else{ + save_battle('Battleship',$bot1['name'],$bot2['name'],1); + } + die; + } + + //init grid + for($y = 0; $y < $postValues['gridHeight']; $y++){ + for($x = 0; $x < $postValues['gridWidth']; $x++){ + $grid[$player][$y][$x]=0; + } + } + + //vérifier si'il y a le bon nombre de bateaux et les placer + $nbBoatsIwant=array(0,$postValues['nbShip1'],$postValues['nbShip2'],$postValues['nbShip3'], + $postValues['nbShip4'],$postValues['nbShip5'],$postValues['nbShip6']); + + foreach($boatsPlayer as $boat){ + list($startCoord,$endCoord) = explode("-",$boat); + list($xStart,$yStart)=explode(",",$startCoord); + list($xEnd,$yEnd)=explode(",",$endCoord); + if($xStart == $xEnd){ + $long=abs($yStart - $yEnd) +1; + }else{ + $long=abs($xStart - $xEnd) +1; + } + $nbBoatsIwant[$long]-=1; + $grid[$player]=place_ship_on_map($xStart,$yStart,$xEnd,$yEnd,$grid[$player]); + if(!$grid[$player]){ + echo $currentBot['name']." n'a pas placé correctement ses bateaux. Certains se chevauchent. Il perd."; + if($player==1){ + save_battle('Battleship',$bot1['name'],$bot2['name'],2); + }else{ + save_battle('Battleship',$bot1['name'],$bot2['name'],1); + } + die; + } + //remember each cases of each boats + $boatListOfCases=array(); + if($xStart == $xEnd){ + if($yStart <= $yEnd ){ + $start=$yStart; + $end=$yEnd; + }else{ + $start=$yEnd; + $end=$yStart; + } + for($i = $start; $i <= $end; $i++){ + $boatListOfCases[]=$xStart.",".$i; + } + }else{ + if($xStart <= $xEnd ){ + $start=$xStart; + $end=$xEnd; + }else{ + $start=$xEnd; + $end=$xStart; + } + for($i = $start; $i <= $end; $i++){ + $boatListOfCases[]=$i.",".$yStart; + } + + } + $_SESSION['ships'][$player][]=$boatListOfCases; + } + foreach($nbBoatsIwant as $nb){ + if($nb <> 0){ + echo $currentBot['name']." n'a pas placé le bon nombre de bateaux. Il perd."; + if($player==1){ + save_battle('Battleship',$bot1['name'],$bot2['name'],2); + }else{ + save_battle('Battleship',$bot1['name'],$bot2['name'],1); + } + die; + } + } + } + $_SESSION['ship1']=$postValues['nbShip1']; + $_SESSION['ship2']=$postValues['nbShip2']; + $_SESSION['ship3']=$postValues['nbShip3']; + $_SESSION['ship4']=$postValues['nbShip4']; + $_SESSION['ship5']=$postValues['nbShip5']; + $_SESSION['ship6']=$postValues['nbShip6']; + $_SESSION['strikes'][1]=array(); + $_SESSION['strikes'][2]=array(); + $_SESSION['width']=$postValues['gridWidth']; + $_SESSION['height']=$postValues['gridHeight']; + echo json_encode($grid); die; + + die; + + break; + case "fight": + + if(count($_SESSION['strikes'][1]) == count($_SESSION['strikes'][2])){ + //player 1 has to fight + $currentPlayer=1; + $currentBot=$_SESSION['bot1']; + $opponent=2; + $opponentName=$_SESSION['bot2']['name']; + }else{ + //it's player2 + $currentPlayer=2; + $currentBot=$_SESSION['bot2']; + $opponentName=$_SESSION['bot1']['name']; + $opponent=1; + } + + $botParamsToSend=array( + 'game' => 'Battleship', + 'match_id' => $_SESSION['matchId']."-".$currentPlayer, + 'act' => 'fight', + 'opponent' => $opponentName, + 'width' => $_SESSION['width'], + 'height' => $_SESSION['height'], + 'ship1' => $_SESSION['ship1'], + 'ship2' => $_SESSION['ship2'], + 'ship3' => $_SESSION['ship3'], + 'ship4' => $_SESSION['ship4'], + 'ship5' => $_SESSION['ship5'], + 'ship6' => $_SESSION['ship6'], + 'your_strikes' => json_encode($_SESSION['strikes'][$currentPlayer]), + 'his_strikes' => json_encode($_SESSION['strikes'][$opponent]) + + ); + $anwserPlayer=get_IA_Response($currentBot['url'],$botParamsToSend); + + if(!preg_match('/^[0-9]+,[0-9]+$/',$anwserPlayer)){ + echo json_encode(array( + 'target' => '', + 'log' => $currentBot['name']." a fait une réponse non conforme, il perd.".$anwserPlayer + )); + save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$opponent); + die; + } + list($x,$y)=explode(",",$anwserPlayer); + + //check if shot is under map's limits + if(($x >= $_SESSION['width']) OR ($y >= $_SESSION['height'])){ + echo json_encode(array( + 'target' => '', + 'log' => $currentBot['name']." a fait un tir en dehors des limites de la carte. ".$x.",".$y." C'est interdit par les conventions de Geneve. Il perd" + )); + save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$opponent); + die; + } + + //put previous strikes in a one dimmension array ; + $previousStrikes=array(); + foreach( $_SESSION['strikes'][$currentPlayer] as $strikes){ + $previousStrikes[]=$strikes['target']; + } + + //do this strike hit a boat? + $continue=1; + $result=''; + + for( $shipIndex = 0; $shipIndex < count( $_SESSION['ships'][$opponent]); $shipIndex ++){ + $ennemyBoat = $_SESSION['ships'][$opponent][$shipIndex]; + + if(in_array($x.",".$y, $ennemyBoat)){ + $result='hit'; + //sunk? + $sunk=true; + foreach($ennemyBoat as $boatCase){ + if((!in_array($boatCase,$previousStrikes)) && ($boatCase <> $x.",".$y)) { + $sunk=false; + break; + } + } + if($sunk){ + $result="hit and sunk"; + //remove the ship + unset($_SESSION['ships'][$opponent][$shipIndex]); + $_SESSION['ships'][$opponent] = array_values($_SESSION['ships'][$opponent]); + //var_dump($_SESSION['ships'][$opponent]); + //win the game? + if(count($_SESSION['ships'][$opponent]) == 0){ + $result="hit sunk and win"; + $continue=0; + save_battle('Battleship',$_SESSION['bot1']['name'],$_SESSION['bot2']['name'],$currentPlayer); + } + } + + break; + } + } + + //remember this shot + $_SESSION['strikes'][$currentPlayer][]=array( + 'target' => $x.",".$y, + 'result' => $result + ); + + //send message for the arena's ajax web page + echo json_encode(array( + 'opponent'=> $opponent, + 'target' => $x.",".$y, + 'log' => $currentBot['name']." tire en ".$x.",".$y." ".$result, + 'continue' => $continue + )); + + die; + break; + default: + break; } \ No newline at end of file diff --git a/src/arenas/connectFour/doc-en.html b/src/arenas/connectFour/doc-en.html index 4d549c9..04a347c 100644 --- a/src/arenas/connectFour/doc-en.html +++ b/src/arenas/connectFour/doc-en.html @@ -37,7 +37,7 @@
  • players Int indicating the number of players in the game, still 2 on connect Four.
  • board The map, i'll explain it at next chapter
  • you String, Your bot's character on the grid
  • -
  • player-index Int The order of your bot in turns. The first player is 0, second is 2.
  • +
  • player-index Int The order of your bot in turns. The first player is 0, second is 1.
  • The map

    It is represented by a sub-array, on the "board" parameter.
    Exemple: