name = $name; $this-> width = $width; $this-> height = $height; $this-> is_chan = $is_chan; $this-> is_secret = $is_secret; $this-> key = $name; } public function setKeyForDir($key_,$dir_){ switch($dir_){ case 0: $this -> door_key_n = $key_; break; case 1: $this -> door_key_e = $key_; break; case 2: $this -> door_key_s = $key_; break; case 3: $this -> door_key_w = $key_; break; } } public function getNumDoors(){ $num = 0; if(isset($this -> door_key_n)) $num ++; if(isset($this -> door_key_e)) $num ++; if(isset($this -> door_key_s)) $num ++; if(isset($this -> door_key_w)) $num ++; return $num; } public function getDoorCoordKey($key_){ $x = 0; $y = 0; //test N if($key_ == $this -> door_key_n){ for($x = 0 ; $x < $this->width ; $x++ ){ $tile = $this -> pickTile($this->width, $this->height,new Coord($x , $y)); if($tile == Tile::getValueForName("gate")) return new Coord($x,$y); } } else if($key_ == $this -> door_key_e){ $x = $this->width - 1; for($y = 0 ; $y < $this->height ; $y++ ){ $tile = $this -> pickTile( $this->width, $this->height, new Coord($x , $y)); if($tile == Tile::getValueForName("gate")) return new Coord($x,$y); } } else if($key_ == $this -> door_key_s){ $y = $this->height - 1; for($x = 0 ; $x < $this->width ; $x++ ){ $tile = $this -> pickTile($this->width, $this->height,new Coord($x , $y)); if($tile == Tile::getValueForName("gate")) return new Coord($x,$y); } }else if($key_ == $this -> door_key_w){ for($y = 0 ; $y < $this->height ; $y++ ){ $tile = $this -> pickTile($this->width, $this->height,new Coord($x , $y)); if($tile == Tile::getValueForName("gate")) return new Coord($x,$y); } } return null; } public function placePlayerForKey($key_){ $coord = $this -> getDoorCoordKey($key_); if($coord->y == 0) { return new Coord($coord->x , $coord->y+1); } else if($coord->x == $this->width-1) { return new Coord($coord->x-1 , $coord->y); }else if($coord->y == $this->height-1) { return new Coord($coord->x , $coord->y-1); }else if($coord->x == 0) { return new Coord($coord->x+1 , $coord->y); } return new Coord(1 , 1); } public function initLevelData(){ //New version: all the level are the same $this->level_data = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, 1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1, 1,0,0,1,0,0,0,0,0,1,0,4,0,0,1,0,0,1, 1,0,0,1,0,0,13,0,0,1,0,1,0,0,1,0,0,1, 1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,0,0,1, 1,0,0,1,0,0,0,0,0,1,3,1,0,0,1,0,0,1, 1,0,0,1,1,1,4,1,1,1,1,1,0,0,1,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1, 1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1, 14,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,1, 1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ]; $this-> width = 18; $this-> height = 15; /* //Create a middle room //Middle room looks cool everywhere $this->fillgrid(Tile::getValueForName("ground"), $this->width, $this->height); //Place wall $this->makeWallForLevel(); //place gates $coord = new Coord(0,0); if(isset( $this -> door_key_n)){ $coord ->y = 0; $coord ->x = rand(1, $this->width-2); $this->placeToLevel(Tile::getValueForName("gate"), $this->width, $this->height, $coord); } if(isset( $this -> door_key_e)){ $coord ->y = rand(1, $this->height-2); $coord ->x = $this->width-1; $this->placeToLevel(Tile::getValueForName("gate"), $this->width, $this->height, $coord); } if(isset( $this -> door_key_s)){ $coord ->y = $this->height-1; $coord ->x = rand(1, $this->width-2); $this->placeToLevel(Tile::getValueForName("gate"), $this->width, $this->height, $coord); } if(isset( $this -> door_key_w)){ $coord ->y = rand(1, $this->height-2); $coord ->x = 0; $this->placeToLevel(Tile::getValueForName("gate"), $this->width, $this->height, $coord); }*/ //Display the level $this -> displayLevelData(); } function makeWallForLevel(){ //North wall $y = 0; for ($x = 0 ; $x <= $this-> width ; $x++){ $coord = new Coord($x,$y); $this->placeToLevel(Tile::getValueForName("wall"), $this->width, $this->height, $coord); } //South wall $y = $this->height-1; for ($x = 0 ; $x < $this-> width ; $x++){ $coord = new Coord($x,$y); $this->placeToLevel(Tile::getValueForName("wall"), $this->width, $this->height, $coord); } //West $x = 0; for ($y = 0 ; $y < $this-> height ; $y++){ $coord = new Coord($x,$y); $this->placeToLevel(Tile::getValueForName("wall"), $this->width, $this->height, $coord); } //Est $x = $this->width-1; for ($y = 0 ; $y < $this-> height ; $y++){ $coord = new Coord($x,$y); $this->placeToLevel(Tile::getValueForName("wall"), $this->width, $this->height, $coord); } } public function displayLevelData(){ echo "# MAP ".$this->name." num tiles:".count($this->level_data)."
"; $x = 0; $y = 0; foreach($this->level_data as $data){ //echo "x:".$x."y:".$y."
"; /* if(!isset( $data ) || $data == Tile::getValueForName("wall") ){ echo "#"; } else if($data == Tile::getValueForName("ground")) { echo "."; } else if($data == Tile::getValueForName("door")) { //echo "x:".$x."y:".$y."
"; echo "D"; }*/ echo Tile::getDisplayForVal($data); $x ++; if($x >= $this -> width){ $x = 0; $y ++; echo "
"; } } } //Level Data management function fillgrid($defaultTile_, $width_, $height_){ $this->level_data = array(); for ($i = 0; $i < $height_*$width_; $i++) { array_push( $this->level_data ,$defaultTile_); } } function placeToLevel($data, $width_, $height_, $coord){ $this->level_data [ ( $coord->y *$width_) + $coord->x] = $data; } function pickTile($width_, $height_, $coord){ return $this->level_data [ ( $coord->y *$width_)+ $coord->x]; } //Fill a data base row public function fillRow($row_){ echo "Write level: ".$this-> name."; for key".$this-> key." with ".count($this-> level_data)." data"; $row_ -> key = $this-> key; $row_ -> name = $this-> name; $row_ -> theme = $this-> theme; /* $row_ -> x = $this-> x; $row_ -> y = $this-> y; */ $row_ -> width = $this-> width; $row_ -> height = $this-> height; if(isset( $this-> door_key_n))$row_ -> door_key_n = $this-> door_key_n; if(isset( $this-> door_key_e)) $row_ -> door_key_e = $this-> door_key_e; if(isset( $this-> door_key_s)) $row_ -> door_key_s = $this-> door_key_s; if(isset( $this-> door_key_w)) $row_ -> door_key_w = $this-> door_key_w; $dataString = ""; foreach( $this-> level_data as $data ){ $dataString = $dataString.$data.","; } $dataString = $dataString .substr(0, strlen($dataString) - 1); $row_ -> level_data = $dataString; $row_ -> is_safe = $this-> is_safe; $row_ -> is_chan = $this-> is_chan; $row_ -> is_secret = $this-> is_secret; //var_dump( $row_); return $row_; } //Get Ground tiles public function getEmptyCoord(){ $coords = array(); $x = 0; $y = 0; foreach( $this-> level_data as $data ){ if((int) $data == Tile::getValueForName("ground")){ $coord = new Coord($x,$y); array_push($coords,$coord); } $x ++; if($x >= $this-> width){ $y ++; $x = 0; } } return $coords[rand( 0, count( $coords )-1)]; } //Fill a data base row public static function parseRow($row_){ $level = new Level("",0,0,false, false); $level -> key = $row_ -> key; $level -> name = $row_ -> name; $level -> theme = $row_ -> theme; $level -> is_secret = $row_ -> is_secret; $level -> x = $row_ -> x; $level -> y = $row_ -> y; $level -> width = $row_ -> width; $level -> height = $row_ -> height; if(isset( $row_-> door_key_n)) $level -> door_key_n = $row_-> door_key_n; if(isset( $row_-> door_key_e)) $level -> door_key_e = $row_-> door_key_e; if(isset( $row_-> door_key_s)) $level -> door_key_s = $row_-> door_key_s; if(isset( $row_-> door_key_w)) $level -> door_key_w = $row_-> door_key_w; //parse the data $level -> level_data = explode(",",$row_ -> level_data); $level -> is_safe = $row_-> is_safe; $level -> is_chan = $row_-> is_chan; return $level ; } //Fill a data base row public static function getDim($num){ $minTile = 4; if($num < $minTile ) $num = $minTile; $width = rand ( $minTile , $num - $minTile ); $height = $num - $width; return new Coord( $width, $height); } }