{"id":20852637,"url":"https://github.com/eleev/15-puzzle","last_synced_at":"2025-07-10T12:14:47.384Z","repository":{"id":83808505,"uuid":"170878614","full_name":"eleev/15-puzzle","owner":"eleev","description":"🧩 iOS game - classic 15 Puzzle game [Swift + SpriteKit].","archived":false,"fork":false,"pushed_at":"2020-06-04T15:13:10.000Z","size":16503,"stargazers_count":22,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-12T17:12:07.808Z","etag":null,"topics":["game","gameplaykit","ios","spritekit","swift"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eleev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2019-02-15T14:35:56.000Z","updated_at":"2025-03-23T13:21:31.000Z","dependencies_parsed_at":"2023-06-03T03:45:45.581Z","dependency_job_id":null,"html_url":"https://github.com/eleev/15-puzzle","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/eleev/15-puzzle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eleev%2F15-puzzle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eleev%2F15-puzzle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eleev%2F15-puzzle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eleev%2F15-puzzle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eleev","download_url":"https://codeload.github.com/eleev/15-puzzle/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eleev%2F15-puzzle/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264578381,"owners_count":23631543,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["game","gameplaykit","ios","spritekit","swift"],"created_at":"2024-11-18T03:18:18.172Z","updated_at":"2025-07-10T12:14:47.367Z","avatar_url":"https://github.com/eleev.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 15-puzzle [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)\n\n[![Language](https://img.shields.io/badge/language-Swift_5.0-orange.svg)]()\n[![Framework](https://img.shields.io/badge/framework-SpriteKit-red.svg)]()\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)]()\n\n**Last Update: 06/April/2019.**\n\n![](logo-15_puzzle.png)\n\n### If you like the project, please give it a star ⭐ It will show the creator your appreciation and help others to discover the repo.\n\n# ✍️ About\n🧩 Classic 15 Puzzle game for iOS.\n\n# 📺 Demo \nPlease wait while the `.gif` files are loading...\n\n\u003cimg src=\"/assets/15_puzzle-ipad-pro.gif\" width=\"61%\"\u003e \u003cimg src=\"/assets/15_puzzle-iphone-xs.gif\" width=\"37.7%\"\u003e\n\n# 🕹 Controls\n- **Swipe** anywhere to move the cells\n- **Tap** ↶ button to shuffle the cells\n- When you solve the puzzle, you will see the corresponding overlay dialog\n- When time exceeds (01:00:00 / 1 hour) or the number of moves will reach it's maximum (10.000) the game will be over\n\n# 👻 Features\n- [x] Supports both `iPhone` \u0026 `iPad`\n- [x] Moves counter\n- [x] Timer\n- [x] Solution validator\n- [x] Rendering backend implemented on top of `SpriteKit`\n- [x] Shuffling\n- [x] Haptic Feedback for supported devices\n- [x] Minimal supported `iOS` deployment target is `11.0`\n\n# ⏱ Futher Improvements / Current Limitations\n- [ ] Only **portrait** mode \n- [ ] Game **timer** works even when the app is in background (for a while). Ideally it needs to be paused/resumed when entering/resuming the app\n- [ ] Missing **unit tests** coverage, despite the possibility to test most of the code\n- [ ] Ideally, the in-game state needs to be modelled by **state machines** (`playing`, `shuffling`, `game over` and `puzzle solved` states, and when **solver** is implemented a new state for `solving` needs to be modelled as well)\n- [ ] Missing **solver**: can be implemented by using `A*` or `BFS` algorithms. Since it's an `NP-complete` algorithm, it needs to be carefully designed and tested (performance implications)\n- [ ] Add **macOS** target\n\n# 👨‍💻 Author \n[Astemir Eleev](https://github.com/jVirus)\n\n# 🔖 Licence\nThe project is available under the [MIT licence](https://github.com/jVirus/ios-15-puzzle/blob/master/LICENSE)\n\nThe project uses assets from [kenney.nl](https://kenney.nl) under [CC0 1.0 Universal (CC0 1.0)\nPublic Domain Dedication licence](https://creativecommons.org/publicdomain/zero/1.0/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feleev%2F15-puzzle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feleev%2F15-puzzle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feleev%2F15-puzzle/lists"}