Tower Blocks Game — это увлекательная аркадная игра, в которой игрок должен строить башню, размещая блоки друг на друге. Цель — разместить блоки как можно точнее, чтобы башня оставалась устойчивой.
В этом руководстве мы создадим Tower Blocks Game с использованием HTML, CSS и JavaScript. Мы будем использовать Three.js для 3D-визуализации и GSAP для плавных анимаций. Игра включает в себя:
Анимацию блоков, которые движутся и останавливаются.
Изменение размеров и положения блоков в зависимости от точности размещения.
Подсчет очков и игровой интерфейс.
Tower Blocks Game — это игра, где вам нужно строить башню, размещая движущиеся блоки. Чем точнее вы кладете блоки, тем выше будет башня. Если блок выходит за пределы предыдущего, часть блока отрезается. Игра завершается, если блоки полностью промахиваются мимо башни.
Особенности:
Удобное управление (клик или пробел).
Красочная 3D-графика.
Постепенно усложняющийся геймплей.
Добавьте основные элементы: контейнер для игры, блоки для интерфейса (счет, инструкции, экран окончания игры).
Подключите стили и скрипты: Three.js, GSAP, и основной файл JavaScript.
Используйте стили для центрирования игрового контейнера.
Создайте анимации появления интерфейсных элементов.
Настройте адаптивность интерфейса для различных экранов.
Класс Stage: настройка сцены, камеры и освещения.
Класс Block: управление отдельными блоками (размеры, движение, размещение).
Класс Game: управление процессом игры (добавление блоков, подсчет очков, состояния игры).
Движение блока по оси.
Определение места соприкосновения с предыдущим блоком.
Обрезка блока, если он выходит за границы.
Реагируйте на нажатие клавиш и клики мыши для размещения блоков.
Увеличивайте счет за каждый правильно размещенный блок.
Завершайте игру, если блок промахивается.
Убедитесь, что игра работает на всех устройствах и экранах.
Проверьте, что переходы между состояниями игры плавные.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>Tower Blocks Game</title>
<link rel="stylesheet" href="style.css"> <!-- Подключение стилей -->
</head>
<body>
<div id="container">
<!-- Основная область игры -->
<div id="game"></div>
<!-- Счет игры -->
<div id="score">0</div>
<!-- Инструкции -->
<div id="instructions">Кликните, чтобы разместить блок</div>
<!-- Экран окончания игры -->
<div class="game-over">
<h2>Игра окончена</h2>
<p>Вы отлично справились, вы лучший.</p>
<p>Кликните, чтобы начать заново</p>
</div>
<!-- Экран готовности к началу игры -->
<div class="game-ready">
<div id="start-button">Начать</div>
</div>
</div>
<!-- Подключение скриптов -->
<script src="https://codepen.io/steveg3003/pen/zBVakw.js"></script> <!-- Библиотека для вспомогательных функций -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r83/three.min.js"></script> <!-- Three.js для работы с 3D -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/latest/TweenMax.min.js"></script> <!-- GSAP для анимации -->
<script src="script.js"></script> <!-- Основная логика игры -->
</body>
</html>
Добавляем структуру игры:
Создаем контейнер с id="container"
, который будет основной областью игры.
Внутри контейнера размещаем:
#game
— область для отрисовки 3D-графики с помощью Three.js.
#score
— счет игры, который обновляется в реальном времени.
#instructions
— подсказка для игрока, которая отображается в начале игры.
.game-over
— экран, который появляется, когда игра завершена.
.game-ready
— экран с кнопкой для начала игры.
Подключаем стили:
Используем <link>
для подключения файла style.css
, который задает внешний вид игры и стилизует интерфейс.
Подключаем библиотеки и скрипты:
Three.js
— библиотека для создания и работы с 3D-графикой.
GSAP
— библиотека для плавной анимации элементов.
script.js
— основной файл с логикой игры.
Добавляем мета-теги:
<meta charset="UTF-8">
— задает кодировку UTF-8, чтобы корректно отображать текст на русском.
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
— обеспечивает адаптивность интерфейса игры на мобильных устройствах.
Сценарии взаимодействия:
Подключенные скрипты реализуют механику игры:
#start-button
начинает игру.
Взаимодействие с #instructions
происходит при начале игры.
Экран .game-over
появляется, если игрок допускает ошибку.
Для стилизации Tower Blocks Game мы используем CSS, чтобы создать приятный и удобный интерфейс, поддерживающий адаптивность и анимации.
Мы отключаем стандартные отступы и прокрутку, чтобы игра занимала весь экран:
html, body {
margin: 0;
overflow: hidden;
height: 100%;
width: 100%;
font-family: "Comfortaa", cursive;
}
Контейнер занимает весь экран и служит основной областью для игры:
#container {
width: 100%;
height: 100%;
}
Счет игры отображается в верхней части экрана, имеет крупный размер и плавную анимацию появления:
#container #score {
position: absolute;
top: 20px;
width: 100%;
text-align: center;
font-size: 10vh;
color: #333344;
transition: transform 0.5s ease;
}
Область #game
предназначена для отображения 3D-графики с помощью Three.js и занимает весь экран:
#container #game {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
Экраны .game-over
и .game-ready
появляются в центре экрана с анимацией:
#container .game-over, #container .game-ready {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
Полный CSS-код доступен в приложении Кодик или на GitHub проекта. Это позволит изучить всю стилизацию и при необходимости настроить внешний вид под свои нужды.
JavaScript является основой для реализации всей игровой логики Tower Blocks Game. Он отвечает за управление 3D-сценой, движением блоков, подсчетом очков и взаимодействием с игроком.
Для работы с 3D-графикой мы используем библиотеку Three.js. С помощью класса Stage
создается сцена, камера и освещение:
class Stage {
constructor() {
this.renderer = new THREE.WebGLRenderer({ antialias: true });
this.scene = new THREE.Scene();
this.camera = new THREE.OrthographicCamera(...);
this.light = new THREE.DirectionalLight(0xffffff, 0.5);
this.scene.add(this.light);
}
}
Что мы делаем:
Настраиваем камеру для ортографической проекции (подходит для игр с "вида сверху").
Добавляем освещение для создания визуального объема.
Класс Block
управляет отдельными блоками, их размерами, движением и размещением:
class Block {
constructor(previousBlock) {
this.dimension = { width: 10, height: 2, depth: 10 };
this.position = { x: 0, y: ..., z: 0 };
this.mesh = new THREE.Mesh(new THREE.BoxGeometry(...), new THREE.MeshToonMaterial(...));
}
tick() {
// Управляет движением блока
this.position[this.workingPlane] += this.direction;
}
place() {
// Логика обрезки блока при несовпадении с предыдущим
}
}
Что мы делаем:
Задаем размеры и начальные позиции блоков.
Реализуем движение блоков и их остановку при нажатии.
Класс Game
объединяет логику игры, управление состояниями, добавление новых блоков и подсчет очков:
class Game {
constructor() {
this.blocks = [];
this.stage = new Stage();
this.state = 'READY';
this.score = 0;
}
addBlock() {
// Добавляет новый блок на башню
}
placeBlock() {
// Размещает текущий блок и проверяет на завершение игры
}
restartGame() {
// Сбрасывает игру при завершении
}
}
Что мы делаем:
Обрабатываем состояния игры: начало, игра, окончание, перезапуск.
Управляем добавлением новых блоков и обновлением сцены.
Считаем очки за успешно размещенные блоки.
Игра реагирует на действия пользователя: нажатие пробела или клик мышью для размещения блоков:
document.addEventListener('click', () => game.onAction());
document.addEventListener('keydown', (e) => {
if (e.keyCode === 32) game.onAction(); // Нажатие пробела
});
С помощью библиотеки GSAP мы реализуем плавное перемещение камеры и анимации блоков:
TweenLite.to(this.camera.position, 0.3, { y: newY });
TweenLite.to(block.position, 1, { x: ... });
Что мы делаем:
Камера плавно поднимается вверх, следуя за блоками.
Блоки, которые не совпадают, отлетают в сторону и исчезают.
Полный JavaScript-код доступен в приложении Кодик или на GitHub проекта. Вы сможете изучить его подробнее и при необходимости адаптировать под свои нужды.
Создание игры Tower Blocks Game — это увлекательный процесс, который сочетает в себе работу с 3D-графикой, анимациями и игровыми механиками. Мы рассмотрели ключевые моменты разработки: настройку сцены, управление блоками, реализацию взаимодействий и стилизацию интерфейса.
Поиграть в Tower Blocks Game и детально изучить код можно в приложении Кодик. Это отличная возможность не только насладиться игрой, но и научиться разрабатывать собственные проекты, изучая пример на практике. Также полный исходный код доступен на GitHub проекта, где вы можете скачать и адаптировать его под свои нужды.
Попробуйте создать игру сами, экспериментируйте с настройками и улучшайте её — в этом и заключается магия программирования! 🚀
Не нашли нужной статьи?
Напишите нам и ее сделаем!