Мы собираем файлы cookie и применяемрекомендательные технологии

Выход из лабиринта: тестируем новое интерактивное приложение - 584 - МТС Exolve

Выход из лабиринта: тестируем новое интерактивное приложение

На днях мне написали интересный запрос. А мы можем создать приложение (веб страницу) где будет управление машинкой, который будет выходить из лабиринта. В будущем чтобы управление осуществлялось посредством СМС сообщений.

Эта инструкция поможет вам создать простой и интерактивный лабиринт с машинкой, которой можно управлять при помощи кнопок или клавиш для начало, а далее подключим еще управление через SMS как элемент  интерактивности для мероприятий. Машинка может перемещаться по лабиринту, избегая стен и стремясь достичь конечной цели.

Начнем с базовой разметки HTML и стилей для лабиринта. Он будет состоять из 10x10 ячеек, в которых расположены стены, начальная и конечная точки.

Создайте новый файл, например maze.html.

Вставьте следующий код, который создаст сетку лабиринта (надеюсь ничего что выкладываю полный код, не хочу долго расписывать):
Код

<!DO CTYPE html>
<ht ml lang="ru">
<head>
    <met a charset="UTF-8">
    <met a name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Лабиринт с управлением</title>
    <st yle>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            background-color: #f0f0f0;
            flex-direction: column;
        }
        #maze {
            display: grid;
            grid-template-columns: repeat(10, 40px);
            grid-template-rows: repeat(10, 40px);
            gap: 2px;
            margin-bottom: 20px;
        }
        .cell {
            width: 40px;
            height: 40px;
            background-color: white;
            border: 2px solid black;
        }
        .wall {
            background-color: black;
        }
        .start {
            background-color: green;
        }
        .end {
            background-color: red;
        }
        .player {
            background-color: blue;
        }
        #controls {
            display: flex;
            flex-direction: column;
            align-items: center;
        }
        .control-row {
            display: flex;
            margin: 5px;
        }
        button {
            width: 100px;
            height: 50px;
            font-size: 18px;
            margin: 2px;
        }
    </style>
</head>
<body>

<div id="maze">
    <div class="cell start player"></div><div class="cell"></div><div class="cell wall"></div><div class="cell"></div><div class="cell"></div><div class="cell wall"></div><div class="cell wall"></div><div class="cell"></div><div class="cell"></div><div class="cell"></div>
    <div class="cell"></div><div class="cell"></div><div class="cell wall"></div><div class="cell"></div><div class="cell wall"></div><div class="cell"></div><div class="cell"></div><div class="cell wall"></div><div class="cell"></div><div class="cell wall"></div>
    <!-- ...другие ячейки лабиринта... -->
</div>

Описание классов CSS:

  • .cell — базовая ячейка лабиринта.
  • .wall — черные ячейки, представляющие стены.
  • .start — начальная точка (зелёная).
  • .end — конечная точка лабиринта (красная).
  • .player — ячейка, в которой находится персонаж (синяя).
Кнопки управления

Добавьте блок кнопок управления под лабиринтом, чтобы можно было двигать персонажа с помощью нажатий.

Код
<div id="controls">
    <div class="control-row">
        <button id="up">Вперед</button>
    </div>
    <div class="control-row">
        <button id="left">Влево</button>
        <button id="down">Назад</button>
        <button id="right">Вправо</button>
    </div>
</div>

JavaScript для управления машинкой (условно просто квадрат:)

Теперь мы добавим JavaScript, который позволит перемещать машинку (персонажа) с помощью кнопок и клавиш.

Код
<sc ript>
    const maze = document.getElementById("maze");
    let playerPosition = { row: 0, col: 0 };

    function movePlayer(rowChange, colChange) {
        const newRow = playerPosition.row + rowChange;
        const newCol = playerPosition.col + colChange;

        // Проверка границ лабиринта
        if (newRow < 0 || newRow >= 10 || newCol < 0 || newCol >= 10) {
            return;
        }

        const newCell = maze.children[newRow * 10 + newCol];

        // Проверка на стены
        if (newCell && !newCell.classList.contains('wall')) {
            maze.children[playerPosition.row * 10 + playerPosition.col].classList.remove('player');
            playerPosition = { row: newRow, col: newCol };
            newCell.classList.add('player');

            // Проверка на финиш
            if (newCell.classList.contains('end')) {
                alert("Вы выиграли!");
            }
        }
    }

    document.getElementById('up').addEventListener('click', () => movePlayer(-1, 0));
    document.getElementById('down').addEventListener('click', () => movePlayer(1, 0));
    document.getElementById('left').addEventListener('click', () => movePlayer(0, -1));
    document.getElementById('right').addEventListener('click', () => movePlayer(0, 1));

    // Управление с клавиатуры
    document.addEventListener('keydown', (e) => {
        switch (e.key) {
            case 'ArrowUp':
                movePlayer(-1, 0);
                break;
            case 'ArrowDown':
                movePlayer(1, 0);
                break;
            case 'ArrowLeft':
                movePlayer(0, -1);
                break;
            case 'ArrowRight':
                movePlayer(0, 1);
                break;
        }
    });
</sc ript>

Описание JavaScript-функций:
  • movePlayer — функция, которая изменяет позицию персонажа, проверяет границы лабиринта и предотвращает движение через стены.
  • addEventListener — добавляет обработку нажатия на кнопки и клавиши (стрелки на клавиатуре) для управления персонажем. Добавил чтобы можно было проверить движение пока не внедрим СМС-управление.
Проверка работы

Теперь, когда HTML, CSS и JavaScript добавлены, откройте файл в браузере и попробуйте двигать персонажа, избегая стен и достигнув конечной точки.

Получилось?

3
143
Открытая тема
0 баллов

Для того, чтобы оставлять комментарии, необходимо пройти авторизацию

Авторизоваться
Ждем реализации с управлением по SMS  ;)
Отличное демо, запустил, все работает!
moderator
moderator
0 баллов
30 октября 2024 в 15:06
А как можно генерировать новые лабиринты?
moderator
moderator
0 баллов
30 октября 2024 в 15:06
Отличная идея!
community
community
0 баллов
05 ноября 2024 в 07:31