diff --git a/countBattles.txt b/countBattles.txt index faf0797..ac3f740 100644 --- a/countBattles.txt +++ b/countBattles.txt @@ -1 +1 @@ -1448 \ No newline at end of file +1456 \ No newline at end of file diff --git a/src/arenas/tron/act.php b/src/arenas/tron/act.php index 397fd9b..902dc41 100644 --- a/src/arenas/tron/act.php +++ b/src/arenas/tron/act.php @@ -16,70 +16,19 @@ require_once(__DIR__."/functions.php"); switch ($_POST['act']){ case "initGame": - //check if bots exists $botsArrayTemp = json_decode($_POST['bots']); - - $bots = array(); - $positions = array(); - $botCount = 0; - foreach($botsArrayTemp as $botId){ - do{ - $x = rand(1,999); - $y = rand(1,999); - }while(in_array($x.",".$y,$positions)); - - $positions[] = $x.",".$y; - $bots[$botCount] = new TronPlayer($botId,$x,$y,'y+'); - - if ($bots[$botCount]->getStatus() === false){ - unset($bots[$botCount]); - }else{ - $botCount++; - } - - } - $_SESSION['players'] = $botCount; - if ($botCount < 2){ - error (500,"missing bots"); - } - - $logs=""; - - //send init message - $gameId = get_unique_id(); - $responses = array(); - - for ($botCount = 0; $botCount < count($bots); $botCount ++){ - $messageArr = array( - 'game-id' => "".$gameId, - 'action' => 'init', - 'game' => 'tron', - 'board' => '', - 'players' => $_SESSION['players'], - 'player-index' => $botCount - ); - - $resp = get_IA_Response($bots[$botCount]->getURL(),$messageArr); - if($_POST['fullLogs'] == "true"){ - $logs.='Arena send to '.$bots[$botCount]->getName().''.htmlentities($resp['messageSend']).'
- HTTP status: '.htmlentities($resp['httpStatus']).'
- Bot anwser: '.htmlentities($resp['response']).'
'; - }else{ - $logs.="Init message send to ".$bots[$botCount]->getName()."
"; - } - - } - - //save bots on session var - $_SESSION['bots'] = serialize($bots); - $_SESSION['gameId'] = $gameId; + $game = new TronGame($botsArrayTemp); + $logs = $game->init_game(); echo json_encode(array( - 'status' => 'OK', - 'logs' => $logs, - 'gameId' => $gameId + 'status' => $game->getStatus();, + 'logs' => $logs + 'gameId' => $game->getGameId(); )); + $_SESSION['game'] = serialize($game); + + die; break; case "play": @@ -114,19 +63,19 @@ switch ($_POST['act']){ $busyCells = array_merge($busyCells, $bots[$botCount]->getTail()); $responses[$botCount] = get_IA_Response($bots[$botCount]->getURL(),$messageArr); - - if(in_array($responses[$botCount]['responseArr']['play'], $busyCells)){ + print_r($responses[$botCount]); + if(in_array($bots[$botCount]->getTargetCell($responses[$botCount]['responseArr']['play']), $busyCells)){ //this bot plays on a non empty cell, it looses $bots[$botCount]->loose(); $logs.= $bots[$botCount]->getName()." Played on a non empty cell, he loses.
"; $loosingBots[] = $bots[$botCount]->getName(); }else{ - $targets[] = $responses[$botCount]['responseArr']['play']; + $targets[] = $bots[$botCount]->getTargetCell($responses[$botCount]['responseArr']['play']); } } } - + //test if some bots plays at the same place for ($botCount = 0; $botCount < count($bots); $botCount ++){ if($bots[$botCount]->getStatus()){ diff --git a/src/arenas/tron/functions.php b/src/arenas/tron/functions.php index aeb6dc5..95dd157 100644 --- a/src/arenas/tron/functions.php +++ b/src/arenas/tron/functions.php @@ -17,6 +17,95 @@ function save_draw_bots($arr){ save_draw_bots($arr); } } +class TronGame{ + private $bots; + private $gameId; + public function getGameId(){ + return $this->gameId; + } + public function get_continue(){ + //count bots alive. if less than 1, game is ended + $count = 0; + foreach($this->bots as $bot){ + if( $bot->getStatus() == true){ + $count++; + } + } + if($count > 1){ + return true; + }else{ + return false; + } + } + public function init_game(){ + //send init messages to bots + + $nbeBots = count($this->bots); + for ($botCount = 0; $botCount < $nbeBots; $botCount++){ + $messageArr = array( + 'game-id' => "".$this->gameId, + 'action' => 'init', + 'game' => 'tron', + 'board' => '', + 'players' => $nbeBots, + 'player-index' => $botCount + ); + + $resp = get_IA_Response($bots[$botCount]->getURL(),$messageArr); + + if($_POST['fullLogs'] == "true"){ + $logs.='Arena send to '.$bots[$botCount]->getName().''.htmlentities($resp['messageSend']).'
+ HTTP status: '.htmlentities($resp['httpStatus']).'
+ Bot anwser: '.htmlentities($resp['response']).'
'; + }else{ + $logs.="Init message send to ".$bots[$botCount]->getName()."
"; + } + + //check response + if( + ($resp['httpStatus'] <> 200) + OR (!pregmatch('^[0-9]*,[0-9]*$', $resp['responseArr'])) + ){ + $this->bots[$botCount]->loose(); + $logs.= $this->bots[$botCount]->getName." Made a non conform response
"; + } + + } + + return $logs; + } + private function getBusyCells(){ + $arr=array(); + foreach($this->bots as $bot){ + $arr = array_merge($arr,$bot->getTail); + } + return $arr; + } + public function __construct($botsIds){ + + $this->gameId = get_unique_id(); + $this->bots = array(); + $positions = array(); + $botCount = 0; + $err = ""; + foreach($botsIds as $botId){ + //find a random start position + do{ + $x = rand(1,999); + $y = rand(1,999); + }while(in_array($x.",".$y,$positions)); + + $positions[] = $x.",".$y; + $this->bots[$botCount] = new TronPlayer($botId,$x,$y,'y+'); + + if ($this->bots[$botCount]->getStatus() === false){ + $err = "Something went wrong for ".$this->bots[$botCount]->getName()."
"; + } + } + return $err; + } +} + class TronPlayer{ private $url; private $name; @@ -45,39 +134,42 @@ class TronPlayer{ ){ return false; } - $this->direction = $newdir; + $this->direction = $newDir; return true; } - - public function grow($dir=""){ + public function getTargetCell($dir){ + if($dir == ""){ $dir = $this->direction; } - if(!$this->set_direction()){ + if(!$this->set_direction($dir)){ return false; } $headCoords = end($this->tail); switch ($dir){ case "y+": - $targetCoords = array($headCoords[0],$headCoords[1]++); + return array($headCoords[0],$headCoords[1]++); break; case "y-": - $targetCoords = array($headCoords[0],$headCoords[1]--); + return array($headCoords[0],$headCoords[1]--); break; case "x+": - $targetCoords = array($headCoords[0]++,$headCoords[1]); + return array($headCoords[0]++,$headCoords[1]); break; case "x-": - $targetCoords = array($headCoords[0]--,$headCoords[1]); + return array($headCoords[0]--,$headCoords[1]); break; default: return false; } - $this->tail[] = $targetCoords; - + + } + public function grow($dir=""){ + $this->tail[] = $this->getTargetCell($dir); + } public function loose(){ $this->state = false; $this->tail = array(); @@ -97,8 +189,5 @@ class TronPlayer{ }else{ $this->state = false; } - - - } } \ No newline at end of file