.
This commit is contained in:
parent
6286837f64
commit
734e4d9a61
|
@ -12,6 +12,10 @@ class Trail {
|
||||||
return $this->trail->top();
|
return $this->trail->top();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function emptyTrail(){
|
||||||
|
$this->trail = new SplStack();
|
||||||
|
}
|
||||||
|
|
||||||
public function add($value) {
|
public function add($value) {
|
||||||
if(!$this->trail->isEmpty()) {
|
if(!$this->trail->isEmpty()) {
|
||||||
if(Trail::kind($this->trail->bottom()) !== Trail::kind($value)) {
|
if(Trail::kind($this->trail->bottom()) !== Trail::kind($value)) {
|
|
@ -5,146 +5,6 @@ class TronGame
|
||||||
private $gameId;
|
private $gameId;
|
||||||
private $status; //false => Game ended or not initialised
|
private $status; //false => Game ended or not initialised
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
class TronGame
|
|
||||||
{
|
|
||||||
private $bots;
|
|
||||||
private $gameId;
|
|
||||||
public function getBotsPositions(){
|
|
||||||
$nbeBots = count($this->bots);
|
|
||||||
$arr = array();
|
|
||||||
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
|
|
||||||
$arr[$botCount] = array(
|
|
||||||
"name" => $this->bots[$botCount]->getName(),
|
|
||||||
"tail" => $this->bots[$botCount]->getTail()
|
|
||||||
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return $arr;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getGameId(){
|
|
||||||
return $this->gameId;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getBoard(){
|
|
||||||
$board = array();
|
|
||||||
$nbeBots = count($this->bots);
|
|
||||||
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
|
|
||||||
$board[] = $this->bots[$botCount]->getTail();
|
|
||||||
}
|
|
||||||
return $board;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function save_draw_bots($arr){
|
|
||||||
*
|
|
||||||
* Recursive function who save all combionaisons of draw matches
|
|
||||||
*
|
|
||||||
|
|
||||||
if(count($arr) < 2){
|
|
||||||
return;
|
|
||||||
}else{
|
|
||||||
$a = $arr[0];
|
|
||||||
array_shift($arr);
|
|
||||||
foreach($arr as $bot){
|
|
||||||
save_battle('tron',$a,$bot,0,'id');
|
|
||||||
}
|
|
||||||
$this->save_draw_bots($arr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function save_losers_winers($arrLoosers,$arrWiners){
|
|
||||||
foreach($arrWiners as $winner){
|
|
||||||
foreach($arrLoosers as $loser){
|
|
||||||
save_battle('tron',$winer,$loser,1,'id');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private function get_multi_IAS_Responses($iasUrls, $postParams){
|
|
||||||
//same as the get_IAS_Responses function
|
|
||||||
// but more than one bot requested parallely
|
|
||||||
|
|
||||||
$cmh = curl_multi_init();
|
|
||||||
for ($i = 0; $i < count($iasUrls); $i++){
|
|
||||||
$data_string = json_encode($postParams[$i]);
|
|
||||||
|
|
||||||
$ch[$i] = curl_init($iasUrls[$i]);
|
|
||||||
curl_setopt($ch[$i], CURLOPT_CUSTOMREQUEST, "POST");
|
|
||||||
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, false);
|
|
||||||
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
|
|
||||||
curl_setopt($ch[$i], CURLOPT_POSTFIELDS, $data_string);
|
|
||||||
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($ch[$i], CURLOPT_HTTPHEADER, array(
|
|
||||||
'Content-Type: application/json',
|
|
||||||
'Content-Length: ' . strlen($data_string))
|
|
||||||
);
|
|
||||||
curl_multi_add_handle($cmh,$ch[$i]);
|
|
||||||
}
|
|
||||||
//send the requests
|
|
||||||
do {
|
|
||||||
$returnVal = curl_multi_exec($cmh, $runningHandles);
|
|
||||||
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
|
|
||||||
// Loop and continue processing the request
|
|
||||||
while ($runningHandles && $returnVal== CURLM_OK) {
|
|
||||||
// Wait forever for network
|
|
||||||
$numberReady = curl_multi_select($cmh);
|
|
||||||
if ($numberReady != -1) {
|
|
||||||
// Pull in any new data, or at least handle timeouts
|
|
||||||
do {
|
|
||||||
$returnVal = curl_multi_exec($cmh, $runningHandles);
|
|
||||||
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Get results
|
|
||||||
for ($i = 0; $i < count($iasUrls); $i++){
|
|
||||||
// Check for errors
|
|
||||||
$curlError = curl_error($ch[$i]);
|
|
||||||
if($curlError == "") {
|
|
||||||
$response = curl_multi_getcontent($ch[$i]);
|
|
||||||
if(! $arr = json_decode($response,TRUE)){
|
|
||||||
$arr=array();
|
|
||||||
}
|
|
||||||
$res[$i] = array(
|
|
||||||
'messageSend' => json_encode($postParams[$i]),
|
|
||||||
'response' => $response,
|
|
||||||
'httpStatus' => curl_getinfo($ch[$i])['http_code'],
|
|
||||||
'responseArr' => $arr
|
|
||||||
);
|
|
||||||
|
|
||||||
}else{
|
|
||||||
$res[$i] = false;
|
|
||||||
}
|
|
||||||
//close
|
|
||||||
curl_multi_remove_handle($cmh, $ch[$i]);
|
|
||||||
curl_close($ch[$i]);
|
|
||||||
}
|
|
||||||
// Clean up the curl_multi handle
|
|
||||||
curl_multi_close($cmh);
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
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 new_lap(){
|
public function new_lap(){
|
||||||
// for all alive bots
|
// for all alive bots
|
||||||
$logs = "";
|
$logs = "";
|
||||||
|
@ -169,6 +29,8 @@ class TronGame
|
||||||
}
|
}
|
||||||
|
|
||||||
$responses = $this->get_multi_IAS_Responses($urls,$paramsToSend);
|
$responses = $this->get_multi_IAS_Responses($urls,$paramsToSend);
|
||||||
|
|
||||||
|
|
||||||
//print_r($responses);
|
//print_r($responses);
|
||||||
$targetsList = array();
|
$targetsList = array();
|
||||||
$busyCells = $this->getBusyCells();
|
$busyCells = $this->getBusyCells();
|
||||||
|
@ -241,6 +103,216 @@ class TronGame
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function get_multi_IAS_Responses($iasUrls, $postParams){
|
||||||
|
//same as the get_IAS_Responses function
|
||||||
|
// but more than one bot requested parallely
|
||||||
|
|
||||||
|
$cmh = curl_multi_init();
|
||||||
|
for ($i = 0; $i < count($iasUrls); $i++){
|
||||||
|
$data_string = json_encode($postParams[$i]);
|
||||||
|
|
||||||
|
$ch[$i] = curl_init($iasUrls[$i]);
|
||||||
|
curl_setopt($ch[$i], CURLOPT_CUSTOMREQUEST, "POST");
|
||||||
|
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYHOST, false);
|
||||||
|
curl_setopt($ch[$i], CURLOPT_SSL_VERIFYPEER, false);
|
||||||
|
curl_setopt($ch[$i], CURLOPT_POSTFIELDS, $data_string);
|
||||||
|
curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
|
||||||
|
curl_setopt($ch[$i], CURLOPT_HTTPHEADER, array(
|
||||||
|
'Content-Type: application/json',
|
||||||
|
'Content-Length: ' . strlen($data_string))
|
||||||
|
);
|
||||||
|
curl_multi_add_handle($cmh,$ch[$i]);
|
||||||
|
}
|
||||||
|
//send the requests
|
||||||
|
do {
|
||||||
|
$returnVal = curl_multi_exec($cmh, $runningHandles);
|
||||||
|
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
|
||||||
|
// Loop and continue processing the request
|
||||||
|
while ($runningHandles && $returnVal== CURLM_OK) {
|
||||||
|
// Wait forever for network
|
||||||
|
$numberReady = curl_multi_select($cmh);
|
||||||
|
if ($numberReady != -1) {
|
||||||
|
// Pull in any new data, or at least handle timeouts
|
||||||
|
do {
|
||||||
|
$returnVal = curl_multi_exec($cmh, $runningHandles);
|
||||||
|
} while ($returnVal == CURLM_CALL_MULTI_PERFORM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Get results
|
||||||
|
for ($i = 0; $i < count($iasUrls); $i++){
|
||||||
|
// Check for errors
|
||||||
|
$curlError = curl_error($ch[$i]);
|
||||||
|
if($curlError == "") {
|
||||||
|
$response = curl_multi_getcontent($ch[$i]);
|
||||||
|
if(! $arr = json_decode($response,TRUE)){
|
||||||
|
$arr=array();
|
||||||
|
}
|
||||||
|
$res[$i] = array(
|
||||||
|
'messageSend' => json_encode($postParams[$i]),
|
||||||
|
'response' => $response,
|
||||||
|
'httpStatus' => curl_getinfo($ch[$i])['http_code'],
|
||||||
|
'responseArr' => $arr
|
||||||
|
);
|
||||||
|
|
||||||
|
}else{
|
||||||
|
$res[$i] = false;
|
||||||
|
}
|
||||||
|
//close
|
||||||
|
curl_multi_remove_handle($cmh, $ch[$i]);
|
||||||
|
curl_close($ch[$i]);
|
||||||
|
}
|
||||||
|
// Clean up the curl_multi handle
|
||||||
|
curl_multi_close($cmh);
|
||||||
|
return $res;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function init_game(){
|
||||||
|
//send init messages to bots
|
||||||
|
$logs = "";
|
||||||
|
$fullLogs = "";
|
||||||
|
$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($this->bots[$botCount]->getURL(),$messageArr);
|
||||||
|
$fullLogs .= 'Arena send to '.$bots[$botCount]->getName().'<em>'.htmlentities($resp['messageSend']).'</em><br/>
|
||||||
|
HTTP status: <em>'.htmlentities($resp['httpStatus']).'</em><br/>
|
||||||
|
Bot anwser: <em>'.htmlentities($resp['response']).'</em><br/>';
|
||||||
|
$logs.="Init message send to ".$this->bots[$botCount]->getName()."<br/>";
|
||||||
|
}
|
||||||
|
return array($logs,$fullLogs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public function __construct($botsInfos){
|
||||||
|
/*
|
||||||
|
* $botsInfo like:
|
||||||
|
* $botsInfo = array(
|
||||||
|
array(
|
||||||
|
'id' =>
|
||||||
|
'name' =>
|
||||||
|
'url' =>
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'id' =>
|
||||||
|
'name' =>
|
||||||
|
'url' =>
|
||||||
|
)
|
||||||
|
)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
$this->gameId = get_unique_id();
|
||||||
|
$this->bots = array();
|
||||||
|
$positions = array();
|
||||||
|
$botCount = 0;
|
||||||
|
$err = "";
|
||||||
|
foreach($botsInfo as $bot){
|
||||||
|
//find a random start position
|
||||||
|
do{
|
||||||
|
$x = rand(1,999);
|
||||||
|
$y = rand(1,999);
|
||||||
|
}while(in_array($x.",".$y,$positions));
|
||||||
|
|
||||||
|
$positions[] = $x.",".$y;
|
||||||
|
$startCoord = new Coords($x,$y);
|
||||||
|
|
||||||
|
$this->bots[$botCount] = new TronPlayer($bot['id'],$startCoord,$bot['name'],$bot['url']);
|
||||||
|
|
||||||
|
if ($this->bots[$botCount]->getStatus() === false){
|
||||||
|
$err .= "Something went wrong for ".$this->bots[$botCount]->getName()."<br/>";
|
||||||
|
}else{
|
||||||
|
$botCount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
class TronGame
|
||||||
|
{
|
||||||
|
private $bots;
|
||||||
|
private $gameId;
|
||||||
|
public function getBotsPositions(){
|
||||||
|
$nbeBots = count($this->bots);
|
||||||
|
$arr = array();
|
||||||
|
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
|
||||||
|
$arr[$botCount] = array(
|
||||||
|
"name" => $this->bots[$botCount]->getName(),
|
||||||
|
"tail" => $this->bots[$botCount]->getTail()
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return $arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getGameId(){
|
||||||
|
return $this->gameId;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function getBoard(){
|
||||||
|
$board = array();
|
||||||
|
$nbeBots = count($this->bots);
|
||||||
|
for ($botCount = 0; $botCount < $nbeBots; $botCount++){
|
||||||
|
$board[] = $this->bots[$botCount]->getTail();
|
||||||
|
}
|
||||||
|
return $board;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function save_draw_bots($arr){
|
||||||
|
*
|
||||||
|
* Recursive function who save all combionaisons of draw matches
|
||||||
|
*
|
||||||
|
|
||||||
|
if(count($arr) < 2){
|
||||||
|
return;
|
||||||
|
}else{
|
||||||
|
$a = $arr[0];
|
||||||
|
array_shift($arr);
|
||||||
|
foreach($arr as $bot){
|
||||||
|
save_battle('tron',$a,$bot,0,'id');
|
||||||
|
}
|
||||||
|
$this->save_draw_bots($arr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function save_losers_winers($arrLoosers,$arrWiners){
|
||||||
|
foreach($arrWiners as $winner){
|
||||||
|
foreach($arrLoosers as $loser){
|
||||||
|
save_battle('tron',$winer,$loser,1,'id');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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(){
|
public function init_game(){
|
||||||
//send init messages to bots
|
//send init messages to bots
|
||||||
$logs = "";
|
$logs = "";
|
||||||
|
@ -277,31 +349,6 @@ class TronGame
|
||||||
return $arr;
|
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()."<br/>";
|
|
||||||
}else{
|
|
||||||
$botCount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*/
|
*/
|
|
@ -10,25 +10,24 @@ class TronPlayer{
|
||||||
|
|
||||||
|
|
||||||
public function grow(Direction $dir){
|
public function grow(Direction $dir){
|
||||||
//$targetCell = $this->getTargetCell($dir);
|
$this->trail->add($this->trail->last()->addDirection($dir));
|
||||||
//$this->tail[] = $targetCell;
|
|
||||||
//return $targetCell;
|
|
||||||
$this->trail->grow($dir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function loose(){
|
public function loose(){
|
||||||
$this->isAlive = false;
|
$this->isAlive = false;
|
||||||
$this->tail->empty_tail();
|
$this->trail->emptyTrail();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
public function __make($botId, Coords $initialsCoords,$name,$url){
|
public function __make($botId, Coords $initialsCoords,$name,$url){
|
||||||
$this->id = $botId;
|
$this->id = $botId;
|
||||||
$this->tail = Trail::make($initialsCoords);
|
$this->trail = new Trail;
|
||||||
|
$this->trail->add($initialsCoords);
|
||||||
$this->name = $name;
|
$this->name = $name;
|
||||||
$this->url = $url;
|
$this->url = $url;
|
||||||
|
$this->state = true;
|
||||||
}
|
}
|
||||||
public function __construct(){
|
public function __construct(){
|
||||||
$this->state = true;
|
$this->state = false;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
public function __construct($id,$initialX,$initialY,$initialDirection){
|
public function __construct($id,$initialX,$initialY,$initialDirection){
|
||||||
|
@ -49,4 +48,3 @@ class TronPlayer{
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
?>
|
|
Loading…
Reference in New Issue
Block a user