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