{"id":20039604,"url":"https://github.com/mukhindev/tiles-based-game-engine","last_synced_at":"2026-06-24T08:31:26.308Z","repository":{"id":147038808,"uuid":"405496755","full_name":"mukhindev/tiles-based-game-engine","owner":"mukhindev","description":"Tiles-based game engine. 2D игровой движок для простейших тайловых игр.","archived":false,"fork":false,"pushed_at":"2021-11-05T13:52:57.000Z","size":2939,"stargazers_count":0,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-06T10:14:30.078Z","etag":null,"topics":["canvas","game","game-development","game-engine","platformer","platformer-game","platformer2d","tiles-game"],"latest_commit_sha":null,"homepage":"https://mukhindev.github.io/tiles-based-game-engine/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mukhindev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-09-11T22:38:11.000Z","updated_at":"2021-11-05T13:48:40.000Z","dependencies_parsed_at":"2023-07-08T05:32:36.208Z","dependency_job_id":null,"html_url":"https://github.com/mukhindev/tiles-based-game-engine","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mukhindev/tiles-based-game-engine","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mukhindev%2Ftiles-based-game-engine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mukhindev%2Ftiles-based-game-engine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mukhindev%2Ftiles-based-game-engine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mukhindev%2Ftiles-based-game-engine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mukhindev","download_url":"https://codeload.github.com/mukhindev/tiles-based-game-engine/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mukhindev%2Ftiles-based-game-engine/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34724735,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","game","game-development","game-engine","platformer","platformer-game","platformer2d","tiles-game"],"created_at":"2024-11-13T10:38:23.005Z","updated_at":"2026-06-24T08:31:26.267Z","avatar_url":"https://github.com/mukhindev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tiles-based game engine (alpha)\n\nСостояние: alpha\n\n2D игровой движок для простейших тайловых игр.\n\nDemo: https://mukhindev.github.io/tiles-based-game-engine/\n\n## История\n\nИгра создавалась в рамках командного модуля курса Яндекс.Практикум [Мидл фронтенд-разработчик](https://practicum.yandex.ru/middle-frontend).\nНеобходимо было разработать игру и сопутствующий портал на React c регистрацией, форумом, таблица лидеров и т.д.\nКак раз мне выпала честь работать непосредственно с игрой.\nПо-условию, для игры нельзя было использовать любые гейм-библиотеки и библиотека работы с `canvas`.\n\nКомандный проект: https://github.com/Minneapolis-7/game\n\nСпасибо [Антону Субботину](https://github.com/kotosha-real) (ментор команды), [Андрею Волокитину](https://github.com/andreyvolokitin) и [Дарье Жеребцовой](https://github.com/DariaZherebtsova),\nза отзывы, мнения, ревью кода и некоторые правки по игре.\n\nЯ решил выделить игру в отдельный проект, чтобы облегчить окружение. Для сравнения в данном проекте `21` явная зависимость, а там `117`.\n\n## Почему tiles-based игра?\n\nЯ впервые занимаюсь разработкой игры, мне показалось,\nчто у игр с тайловой графикой понятная реализация.\n\n## Как работает?\n\nКак минимум нужно описать 4 сущности:\n\n* Спрайты\n* Игровые объекты\n* Уровни\n* Управление\n\nДалее создать экземпляр игры в котором зарегистрировать данные сущности.\n\n### Спрайты\n\nСпрайты — графические изображения.\n\nОдин спрайт может содержать раскадровку, располагать которую следует горизонтально.\nКаждый кадр в спрайте в терминологии данного движка называется `spriteFrame`.\nРекомендуется использовать соотношение сторон `1:1` для каждого кадра.\n\nНапример: `32x32` если 1 кадр, `96x32` если 3 кадра.\n\nИзображения спрайтов по-умолчанию находятся в `./src/assets/sprites`\n\nПример описания спрайтов:\n\n```ts\n/* src/sprites.ts */\n\n// Изображения спрайтов\nimport airSprite from './sprites/air.png';\nimport playerSprite from './sprites/player.png';\nimport brickSprite from './sprites/brick.png';\n\n// Идентификаторы\nexport const SPRITE_ID = {\n  PLAYER: 'player',\n  AIR: 'air',\n  BRICK: 'brick',\n} as const;\n\n// Описываем спрайты \nexport const sprites: SpriteRegisterOptions[] = [\n  { id: SPRITE_ID.PLAYER, src: playerSprite },\n  { id: SPRITE_ID.AIR, src: airSprite },\n  { id: SPRITE_ID.BRICK, src: brickSprite },\n];\n```\n\nОписанные спрайты необходимо зарегистрировать в игре, см. [Игра](#игра)\n\n### Игровые объекты\n\nОписание в работе...\n\n### Уровни\n\nОписание в работе...\n\n### Игра\n\n```ts\n/* src/index.ts */\n\nimport Game from './entities/Game';\nimport { sprites } from './sprites';\nimport { gameObjects } from './gameObjects';\nimport { levels } from './levels';\nimport { CONTROL_KEY } from './shared/constants';\n\n// Контейнер приложения\nconst app = document.querySelector('.app');\n// canvas для игры\nconst canvas = document.createElement('canvas');\n\nconst game = new Game();\n\n// Регистрируем подготовленные сущности\ngame.registerSprites(sprites);\ngame.registerGameObjects(gameObjects);\ngame.registerLevels(levels);\n\n// Регистрируем canvas, на него будет выводиться игра\ngame.view.registerCanvas(canvas);\n\n// Регистрируем управление с клавиатуры\ngame.control.registerKey('ArrowLeft', CONTROL_KEY.LEFT);\ngame.control.registerKey('ArrowRight', CONTROL_KEY.RIGHT);\ngame.control.registerKey('Space', CONTROL_KEY.SPACE);\n\n// Запускаем. Колбек выполнится после заверщения асинхронных загрузок ресурсов\ngame.init(() =\u003e console.log('Игра загружена'));\n\n// Вставляем canvas в контейнер приложения\napp.append(canvas);\n```\n\n### Утилиты\n\n`makeAnimation()`\n\nОписание в работе...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmukhindev%2Ftiles-based-game-engine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmukhindev%2Ftiles-based-game-engine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmukhindev%2Ftiles-based-game-engine/lists"}