<?php session_start(); error_reporting(E_ALL); # Date: 20.02.2022 (16:17) use Insallah\Map\Map; use Insallah\Map\MapData; use Insallah\Player\Player; /** Автозагрузка классов с учётом неймспейсов. */ spl_autoload_register(function ($className) { $fileName = dirname(__DIR__) . '/src/' . str_replace('\\', '/', $className . '.php'); if (file_exists($fileName)) { require_once $fileName; } }); $_POST['action'] ??= null; $_SESSION['x'] ??= null; $_SESSION['y'] ??= null; $_SESSION['force'] ??= null; // Для насильной смены локации. $_SESSION['mapname'] ??= 'map'; /** Пример смены локации. * Да, можно сделать функцию. * И это будет более правильно. * Это просто принцип для демонстрации. */ if ($_SESSION['x'] === 0 && $_SESSION['y'] === 2 && $_SESSION['mapname'] === 'map') { $_SESSION['mapname'] = 'map2'; $_SESSION['force'] = true; header('Location: ' . $_SERVER['REQUEST_URI']); exit; } if ($_SESSION['x'] === 4 && $_SESSION['y'] === 2 && $_SESSION['mapname'] === 'map2') { $_SESSION['mapname'] = 'map'; $_SESSION['force'] = true; header('Location: ' . $_SERVER['REQUEST_URI']); exit; } $map = new Map(new MapData($_SESSION['mapname']), $_SESSION['force']); unset($_SESSION['force']); if ($_POST['action'] === 'up') { $map->goUp(); } if ($_POST['action'] === 'down') { $map->goDown(); } if ($_POST['action'] === 'left') { $map->goLeft(); } if ($_POST['action'] === 'right') { $map->goRight(); } if ($_POST['action'] === 'clear') { Player::clear(); } /** Для отладки. */ ?> <div style="width: 600px; border: lightcoral dashed 2px; background-color: antiquewhite; padding: 2px;"> <strong>P:[<?= Player::getPos()[0] ?>,<?= Player::getPos()[1] ?>] MAP:[<?= $_SESSION['mapname'] ?>]</strong><br> Смена локаций на MAP:[0,2] и MAP2:[4,2]. Да, там надо повторно клацнуть чтобы всё сменилось, но опять же, это принцип на коленке, а не готовое решение. Если хранить всё хоть в какой-то базе, а не в сессиях от половины этих костылей можно отказаться. </div> <?php echo $map->drawVisible(); require_once '../resources/views/map-controls.html'; echo 'Карта целиком:<br><br>'; MapData::drawFullMap();