Как сделать игру на телефон в домашних условиях

Как сделать игру на телефон в домашних условиях Полезное

Сделать игру на телефон в домашних условиях можно бесплатно: нужен обычный компьютер, смартфон и одно из приложений для создания мобильных игр — конструктор (GDevelop, Construct 3), движок (Unity, Godot) или редактор, который работает прямо на телефоне. Платить на старте не обязательно, а знание программирования нужно не для всех путей.

Сразу разведу три разных результата, которые часто называют одним словом «сделал игру»:

  • игра в редакторе — работает в окне предпросмотра на компьютере;
  • игра на своем телефоне — запускается на вашем смартфоне: в браузере или как установленное приложение (APK на Android);
  • игра в магазине — опубликована в Google Play, App Store или RuStore, ее может скачать любой.

Эта статья доводит до второго уровня: обзор приложений, первая игра за вечер и запуск на своем смартфоне. Сведения актуальны на 24.09.2026.

Что нужно дома

Что Минимум Когда нужно больше
Компьютер Windows, macOS или Linux, браузер Для Unity и 3D комфортнее SSD и от 16 ГБ памяти (ориентир, не требование)
Телефон Любой Android или iPhone с браузером Для установки своего APK — Android с включенной отладкой по USB
Сеть Домашний Wi-Fi, общий для компьютера и телефона —
Mac Не нужен для Android и браузерных игр Нужен, чтобы собрать и поставить игру на iPhone через Xcode
Деньги 0: у всех инструментов ниже есть бесплатный вход Аккаунт разработчика в магазине — только для публикации

Приложения для создания мобильных игр: обзор

Инструменты различаются тем, нужен ли код и каким путем игра попадает на телефон.

Приложение Где работает Нужен ли код Как игра попадает на телефон Условия (на 24.09.2026)
GDevelop Компьютер, браузер Нет, события; можно дописать JavaScript Экспорт в Android, веб-версия Бесплатный, открытый исходный код; облачные сборки на бесплатном тарифе ограничены
Construct 3 Браузер Нет, события; можно дописать JavaScript Экспорт в Android и iOS — только на платной подписке, в бесплатном режиме — веб-версия Подписка; бесплатный режим: до 50 событий и 2 слоев, публикация только в веб
Unity 6 Компьютер Да, C#; для прототипов есть Visual Scripting Сборка APK/AAB, iOS через Mac Unity Personal бесплатен, пока выручка и финансирование за 12 месяцев ниже 200 000 USD
Godot 4 Компьютер; есть редактор для Android Да, GDScript (похож на Python) Экспорт в APK, веб-версия Бесплатный, лицензия MIT
GameMaker Компьютер Визуальные блоки или язык GML Экспорт на мобильные платформы Бесплатно для некоммерческих проектов, коммерческая лицензия платная
Pocket Code (Catrobat) Смартфон Android Нет, блоки как в Scratch Игра запускается внутри приложения Бесплатное, учебное

Как выбрать под свою задачу:

  • Хочу игру без программирования, 2D — GDevelop (бесплатно) или Construct 3 (APK — только на подписке). Подробный разбор этого пути — в статье о создании игр на Android через конструкторы.
  • Хочу научиться делать игры всерьез — Unity или Godot: придется учить язык, зато нет потолка возможностей. Выбор движка, этапы до стора и монетизация — в материале о том, как создать мобильную игру.
  • Компьютера нет или делает ребенок — Pocket Code или редактор Godot на планшете.
  • Хочу понять, как игра устроена изнутри, за один вечер — браузерная игра на HTML и JavaScript: ничего не нужно устанавливать, а открыть ее можно и на Android, и на iPhone. Этот путь разберу по шагам.

Первая игра за вечер: браузерная игра для телефона

Игра «Поймай круг»: на экране появляется желтый круг, касание по нему дает очко, после каждого очка круг становится меньше и прыгает в новое место. Раунд длится 30 секунд, рекорд сохраняется в памяти браузера.

Создайте папку tapgame и в ней файл index.html с этим кодом целиком:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
  <title>Поймай круг</title>
  <style>
    html, body { margin: 0; height: 100%; background: #111; }
    canvas { display: block; width: 100vw; height: 100vh; touch-action: none; }
  </style>
</head>
<body>
<canvas id="game"></canvas>
<script>
const canvas = document.getElementById("game");
const ctx = canvas.getContext("2d");
const GAME_TIME = 30;                 // длительность раунда, секунд
let w, h, circle, score, timeLeft, lastTime, running;

function resize() {
  const dpr = window.devicePixelRatio || 1;   // четкость на экранах высокой плотности
  w = window.innerWidth; h = window.innerHeight;
  canvas.width = w * dpr; canvas.height = h * dpr;
  ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
  if (running) newCircle();                   // поворот экрана: круг заново в пределах поля
}

function newCircle() {
  const r = Math.max(18, 50 - score * 2);     // с каждым очком круг меньше
  circle = { x: r + Math.random() * (w - 2 * r),
             y: r + 60 + Math.random() * (h - 2 * r - 60), r };
}

function start() {
  score = 0; timeLeft = GAME_TIME; running = true;
  newCircle();
  lastTime = performance.now();
  requestAnimationFrame(loop);
}

function loop(now) {
  const dt = (now - lastTime) / 1000;         // секунды с прошлого кадра
  lastTime = now;
  timeLeft -= dt;
  if (timeLeft <= 0) { running = false; finish(); return; }
  draw();
  requestAnimationFrame(loop);
}

function draw() {
  ctx.clearRect(0, 0, w, h);
  ctx.fillStyle = "#f5c518";
  ctx.beginPath(); ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2); ctx.fill();
  ctx.fillStyle = "#fff"; ctx.font = "20px sans-serif";
  ctx.fillText("Очки: " + score + "   Время: " + Math.ceil(timeLeft), 16, 32);
}

function finish() {
  let best = 0;
  try { best = Number(localStorage.getItem("best")) || 0; } catch (e) {}
  if (score > best) {
    best = score;
    try { localStorage.setItem("best", String(best)); } catch (e) {}
  }
  ctx.clearRect(0, 0, w, h);
  ctx.fillStyle = "#fff"; ctx.font = "24px sans-serif";
  ctx.fillText("Итог: " + score + ", рекорд: " + best, 16, h / 2);
  ctx.fillText("Коснитесь - новый раунд", 16, h / 2 + 36);
}

canvas.addEventListener("pointerdown", (e) => {
  if (!running) { start(); return; }
  const dx = e.clientX - circle.x, dy = e.clientY - circle.y;
  if (dx * dx + dy * dy <= circle.r * circle.r) {   // касание внутри круга
    score += 1;
    newCircle();
  }
});

window.addEventListener("resize", resize);
resize();
start();
</script>
</body>
</html>

Откройте файл в браузере на компьютере. Ожидаемый результат: темный экран, в углу «Очки: 0 Время: 30», таймер идет вниз, щелчок по кругу добавляет очко, промах не засчитывается. Через 30 секунд — итог и рекорд, следующий щелчок начинает новый раунд. Таймер идет по реальному времени: если свернуть браузер посреди раунда, после возврата раунд сразу закончится. Я проверил сценарий в Chromium: попадание — счет 1, промах — без изменений, рекорд записан.

Разбор главного:

  • requestAnimationFrame(loop) — игровой цикл: браузер вызывает функцию перед каждой отрисовкой, она обновляет состояние и рисует кадр.
  • dt — время кадра в секундах: таймер идет по реальному времени и на экране 60 Гц, и на 120 Гц.
  • pointerdown — одно событие для пальца и мыши; попадание — квадрат расстояния до центра не больше квадрата радиуса.
  • touch-action: none не дает браузеру прокручивать и масштабировать страницу при быстрых тапах.
  • devicePixelRatio убирает размытость на экранах высокой плотности.
  • localStorage хранит рекорд; обращения обернуты в try, так как в приватном режиме хранилище бывает недоступно.

Как открыть игру на телефоне по домашнему Wi-Fi

Файл нужно отдать телефону по сети. Для этого хватит встроенного в Python учебного веб-сервера (нужен установленный Python 3).

  1. Узнайте адрес компьютера в домашней сети: Windows — команда ipconfig, строка «IPv4-адрес»; Linux — hostname -I; macOS — ipconfig getifaddr en0. Обычно это адрес вида 192.168.x.x.
  2. Перейдите в папку с игрой и запустите сервер только на этом адресе (в примере адрес 192.168.1.10, подставьте свой):
cd tapgame
python3 -m http.server 8000 --bind 192.168.1.10

В консоли появится строка вида:

Serving HTTP on 192.168.1.10 port 8000 (http://192.168.1.10:8000/) ...
  1. На телефоне, подключенном к тому же Wi-Fi, откройте в браузере http://192.168.1.10:8000. Игра запустится на весь экран.
  2. Чтобы игра открывалась как приложение, добавьте страницу на главный экран через меню браузера («Добавить на главный экран» или «На экран Домой»).
  3. Закончив, остановите сервер в консоли сочетанием Ctrl+C.

Границы этого способа. Сервер отдает всем устройствам в сети все файлы из папки, где он запущен: запускайте его только из папки с игрой и только в своей домашней сети, не в кафе или гостевом Wi-Fi. Модуль http.server — учебный, документация Python прямо не рекомендует его для рабочих сайтов. Ярлык на главном экране открывает страницу с компьютера, поэтому без запущенного сервера игра не загрузится; чтобы она работала офлайн и открывалась у друзей, ее выкладывают на хостинг с HTTPS или пересобирают в приложение.

Ошибка, которую я поймал на прогоне: круг за краем экрана

Первая версия создавала круг один раз при старте, а при изменении размера окна пересчитывала только холст:

function resize() {
  const dpr = window.devicePixelRatio || 1;
  w = window.innerWidth; h = window.innerHeight;
  canvas.width = w * dpr; canvas.height = h * dpr;
  ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
}

Результат: вкладка в момент старта еще не имела размера, и круг получил координаты около x = 7, y = -5 — наполовину за краем экрана. Та же беда при повороте телефона в альбомное положение: круг, рассчитанный под высокий экран, оказывается ниже нижней границы.

Исправление — в итоговом коде выше: после пересчета размеров resize() вызывает newCircle(), если раунд идет, и круг заново ставится в пределах поля.

От браузерной игры к приложению

Браузерная игра — учебный первый шаг. Когда нужны значок, работа без интернета и публикация, механику переносят в конструктор (GDevelop, Construct 3) и собирают APK экспортом либо переписывают на Unity или Godot: логика та же (цикл, время кадра, проверка касания), но добавляются редактор сцен, физика, звук и сборка под Android и iOS.

Свой APK на Android ставят через отладку по USB (adb install) или разрешив установку из неизвестных источников для конкретного приложения. Второй способ Google постепенно ограничивает: с 30.09.2026 сертифицированные Android-устройства в Бразилии, Индонезии, Сингапуре и Таиланде блокируют обычную установку приложений от незарегистрированных разработчиков, расширение на другие страны запланировано позже; установка через adb для разработчика остается. На iPhone собственную сборку ставят только через Xcode на Mac.

Если не получилось

Симптом Частая причина Что делать
Телефон не открывает страницу, долго грузит Телефон в другой сети (мобильный интернет, гостевой Wi-Fi) или сервер слушает другой адрес Подключить телефон к тому же Wi-Fi, сверить адрес из ipconfig с адресом в --bind
На компьютере открывается, на телефоне нет Брандмауэр блокирует входящие подключения к Python Разрешить Python в брандмауэре для частной (домашней) сети, не для общедоступных
При быстрых касаниях страница прыгает и масштабируется Нет touch-action: none или метатега viewport Проверить стили холста и <meta name="viewport">
python3 не найден в Windows Python не установлен или вызывается как python / py Установить Python 3 или использовать py -m http.server 8000 ...

Выводы

  • Для игры на телефон в домашних условиях хватает компьютера, смартфона и бесплатного приложения: конструктор — без кода, движок — с программированием, Pocket Code или Godot для Android — прямо на устройстве.
  • «Игра в редакторе», «игра на своем телефоне» и «игра в магазине» — три разных результата; для первых двух платить не нужно.
  • Самый быстрый путь от нуля до игры на смартфоне — браузерная игра на HTML и JavaScript, открытая по домашнему Wi-Fi: она работает и на Android, и на iPhone.
  • В любой игре есть одни и те же основы: игровой цикл, время кадра, обработка касаний и подстройка под экран — они переносятся в Unity, Godot и конструкторы.
  • Учебный сервер Python запускают только из папки с игрой, в своей сети и выключают после проверки.

Где применяется / связь с практикой

Освойте тему на практике

Браузерная игра показывает основы, но мобильные проекты в индустрии чаще собирают на движках, и Unity среди них — один из самых распространенных. На курсе «Unity-разработчик. Базовый уровень» разбирают C#, устройство сцены и компонентов, геймдизайн и сборку проектов — следующий шаг после первой игры, сделанной дома. Посмотреть формат занятий и задать вопросы практикующим разработчикам можно на открытых уроках Otus.

FAQ

Можно ли сделать игру прямо на телефоне, без компьютера?
Да, для учебных проектов: Pocket Code позволяет собирать игры из блоков на Android, а у Godot есть редактор для Android. Для проектов крупнее удобнее компьютер — экран, клавиатура и производительность заметно влияют на скорость работы.

Сколько стоит сделать первую игру дома?
Ноль: GDevelop, Godot и браузерная игра бесплатны, Unity Personal бесплатен до порога выручки. Деньги понадобятся только на публикацию — аккаунт разработчика в магазине, — и на платные ассеты, если захочется.

Подойдет ли такой способ для iPhone?
Браузерная игра из статьи открывается на iPhone так же, как на Android. Установить же на iPhone собственное приложение можно только через Xcode, а он работает на Mac.

OTUS Журнал
Скидка 5% 14-20 сентября на курсы (popup)