diff options
Diffstat (limited to 'pages/gallery.php')
-rw-r--r-- | pages/gallery.php | 315 |
1 files changed, 302 insertions, 13 deletions
diff --git a/pages/gallery.php b/pages/gallery.php index 259ac2a..4bcdc05 100644 --- a/pages/gallery.php +++ b/pages/gallery.php @@ -1,26 +1,15 @@ <?PHP -htmlHeader(); +set_time_limit(45); +htmlHeader(array()); ?> <body> <?php topbar($Links); - include('../mazetd/includes/maps.php'); include('../mazetd/includes/mapoftheday.php'); - -echo "<br />"; -echo "<br />"; -echo ""; - -echo rand(0,1); -echo rand(0,1); -echo rand(0,1); -echo rand(0,1); -echo rand(0,1); - //15x9.c3.r28.w12.t2.:0s.8r.4f.0s.9r.3f.0s.12r.0f.0s.8r.0r.3f.0s.5r.5r.1f.0s.1r.11f.0s.0r.8r.1r.1f.0s.8r.4f.0s.4r.3r.4f. $map = GenerateMap( @@ -128,6 +117,306 @@ $a[1] = 't'; $a['1'] = 'hi'; echo $a[1]; + + +$myshape[] = "qqqqqfffffqqqqq"; +$myshape[] = "qqqqq?????qqqqq"; +$myshape[] = "qqooo??b??oooqq"; +$myshape[] = "qqoRR?????RRoqq"; +$myshape[] = "qqoRR?????RRoqq"; +$myshape[] = "f?????????????f"; +$myshape[] = "f?????????????f"; +$myshape[] = "f?a????s????c?f"; +$myshape[] = "f?????????????f"; +$myshape[] = "f?p???????????f"; +$myshape[] = "qqpRR?????RRoqq"; +$myshape[] = "qqpRR?????RRoqq"; +$myshape[] = "qqpppp?d??oooqq"; +$myshape[] = "qqqqq?????qqqqq"; +$myshape[] = "qqqqqfffffqqqqq"; + +$basic[] = "soooooooootoof"; +$basic[] = "soooooooooooof"; +$basic[] = "soooooooooooof"; +$basic[] = "soobooooroooof"; +$basic[] = "sooroooooaooof"; +$basic[] = "srorooooorroof"; +$basic[] = "soooooooorooof"; +$basic[] = "soooooocodooof"; +$basic[] = "soorooorroooof"; +$basic[] = "soooeoooooooof"; +$basic[] = "suooooooooooof"; + + +$basic2[] = "soooooooorotof"; +$basic2[] = "soooooooodooof"; +$basic2[] = "soorooooooooof"; +$basic2[] = "soooooooooooof"; +$basic2[] = "soooaoooooooof"; +$basic2[] = "suocooooooobof"; + + +$basic3[] = "soooooooooof"; +$basic3[] = "soooooooooof"; +$basic3[] = "sooooaooooof"; +$basic3[] = "soooooooooof"; +$basic3[] = "soooooooooof"; + + +$myparams['checkpoints'] = 1; +$myparams['teleports'] = 0; +$myparams['rockchance'] = 100; +$myparams['walls'] = 10; +//$map = GenerateShapedMap($basic3, $myparams); + +$motd = MapOfTheDay(2); +$map = $motd['map']; + + +//Benchmark +$time_start = microtime(true); + + +$newmap = executeTryMaze($map); +echo DisplayMap($newmap, 2); + + +$time_end = microtime(true); +$time = round($time_end - $time_start, 4); +echo "<br />Solution created in $time seconds\n<br />"; + +//Return an array of effected tiles. +function getEffected($route) { + //Determin starting location. + $start = explode(",", $route['start']); + $x=$start[0]; + $y=$start[1]; + + //Run through the path + $pathary = str_split($route['path']); + foreach ($pathary as $position => $char) { + switch($char) { + case 1: $y--; break; //up + case 2: $x++; break; //right + case 3: $y++; break; //down + case 4: $x--; break; //left + default: continue 2; + } + //add the positions + $effected["$y,$x"]++; + } + //arsort($effected); + return $effected; +} +// http://awesomescreenshot.com/0d7nyx9b2 + +function executeTryMaze($mapMatrix, $intensity = 1) { + $mapdata['height'] = $mapMatrix[0][0]; + $mapdata['width'] = $mapMatrix[0][1]; + $mapdata['points'] = $mapMatrix[0][2]; + $mapdata['rocks'] = $mapMatrix[0][3]; + $mapdata['walls'] = $mapMatrix[0][4]; + //Override hack. + //$mapdata['walls'] = 12; + $mapdata['teleports'] = $mapMatrix[0][5]; + + + //PROCSES BEGIN + $wallcount = 0; + $iterations = 0; + $lastRefresh = 0; + do { + $iterations++; + $done = false; + $path = routePath($mapMatrix); + $effected = getEffected($path); + + $curcount = 1000; + $bestmoves = $path['moves'] - 1; + + foreach ($effected as $position => $count) { + //Find location + $loc = explode(",", $position); + $x=$loc[0]; + $y=$loc[1]; + //Is it open? + if ($mapMatrix[$x][$y] != "o") { + continue; + } + + + //Set a wall and calculate the new path + $mapMatrix[$x][$y] = 'R'; + $curpath = routePath($mapMatrix); + $trymoves = $curpath['moves']; + + //echo "T($x,$y)\n:"; + + //path blocked? + if ($curpath['blocked'] == true) { + //Sometimes it's better to remove a different wall; + + //Put a wall here. + $arrayWalls[$x][$y] = true; + + //determin wall values. + $walllist = wallvalues($mapMatrix, $arrayWalls); + + //Put the best wall to remove on top; - A mono directional bubble sort would be better here. + $walllist["$x,$y"]++; + asort($walllist); + + //Get location of wall to remove. + $nwallposition = key($walllist); + + echo "*$nwallposition vs $x,$y*\n"; + + $nloc = explode(",", $nwallposition); + $x=$nloc[0]; + $y=$nloc[1]; + //Remove that wall instead. + $mapMatrix[$x][$y] = 'o'; + + //echo "Rem[$x,$y]"; + + //$curpath = routePath($mapMatrix); + //echo $curpath['blocked']; + //echo "]"; + + unset($arrayWalls[$x][$y]); + continue; + } + //The last choice, or first choice? + //if ($trymoves >= $bestmoves) { + if ($trymoves >= $bestmoves) { + $bestmoves = $trymoves; + $bestx = $x; + $besty = $y; + $mapMatrix[$x][$y] = 'o'; + break; + } + $mapMatrix[$x][$y] = 'o'; + } + //Place the wall in the best spot we found; + $arrayWalls[$bestx][$besty] = true; + echo $mapMatrix[$bestx][$besty]; + $mapMatrix[$bestx][$besty] = 'R'; + $wallcount++; + echo "B($bestx,$besty)\n:"; + + //Refresh walls (Remove obsolete walls) + if ($iterations % 4 == 0 AND $wallcount > ($mapdata['walls'] * .6)) + { + echo "RW"; + $walllist = wallvalues($mapMatrix, $arrayWalls); + //Remove low valued wall; + $lowvaluewall = true; + $nullwalls = 0; + foreach ($walllist as $nwallposition => $wallvalue) { + if ($wallvalue == 0 OR ($lowvaluewall == true AND $wallvalue == 1)) + { + $nloc = explode(",", $nwallposition); + $x=$nloc[0]; + $y=$nloc[1]; + $mapMatrix[$x][$y] = 'o'; + unset($arrayWalls[$x][$y]); + $wallcount--; + + $nullwalls++; + if ($nullwalls >= 2) { + break; + } + if ($lowvaluewall == true AND $wallvalue == 1) { + $lowvaluewall = false; + } + } + } + } + + //Refresh walls if we hit the wall count limit, once. + if($wallcount >= $mapdata['walls'] && $lastRefresh == 0) + { + $lastRefresh = 1; + $walllist = wallvalue($mapMatrix, "R"); + foreach ($walllist as $nwallposition => $wallvalue) { + if ($wallvalue <= 1) { + $nloc = explode(",", $nwallposition); + $i=$nloc[0]; + $j=$nloc[1]; + $mapMatrix[$i][$j] = 'o'; + $wallcount--; + } + } + echo "End Refresh walls to:[$wallcount]"; + } + + //If all walls are placed even after refresh, we're done + if ($wallcount >= $mapdata['walls']) { + echo "END;($wallcount)"; + break; + } + } while ($done == false); + + echo "print"; + print_r(wallvalue($mapMatrix, "R")); + echo "endprint"; + return $mapMatrix; +} + + +//Returns the essential 'move value' of individual walls in an array. +function wallValues($mapMatrix, $arrayWalls) { + $curpath = routePath($mapMatrix); + $curmoves = $curpath['moves']; + //Prepare to return an array. + $r = Array(); + foreach ($arrayWalls as $x => $a) { + foreach ($a as $y => $v) { + //echo "{O".$mapMatrix[$x][$y]."O}"; + if ($mapMatrix[$x][$y] <> 'R') { + continue; + } + //Imagine the maze without the wall. + $mapMatrix[$x][$y] = 'o'; + $newpath = routePath($mapMatrix); + $newmoves = $newpath['moves']; + //Great; so the value of that wall is: + $r["$x,$y"] = $curmoves - $newmoves; + //Okay, you can have your wall back. + $mapMatrix[$x][$y] = 'R'; + } + } + return $r; +} + + +//Returns the essential 'move value' of a wall. +function wallvalue($mapMatrix, $wall) { + $curpath = routePath($mapMatrix); + $curmoves = $curpath['moves']; + for( $i = 1; $i <= $mapMatrix[0][1]; $i++) { //Number of Rows + for( $j = 0; $j < $mapMatrix[0][0]; $j++) { //Number of Columns + if ($mapMatrix[$i][$j] == $wall) { + $mapMatrix[$i][$j] = 'o'; + $newpath = routePath($mapMatrix); + $mapMatrix[$i][$j] = 'r'; + $newmoves = $newpath['moves']; + + $r["$i,$j"] = $curmoves - $newmoves; + + } + } + } + return $r; +} + + + + + +echo "<br >Path: "; +echo $bla['moves']; +echo "<br >"; $mapdisplay = DisplayMap($map); $code = GenerateMapCode($map); |