75 lines
2.6 KiB
PHP
75 lines
2.6 KiB
PHP
|
<?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();
|