{"id":15014593,"url":"https://github.com/noooway/love2d_arkanoid_tutorial","last_synced_at":"2025-08-21T12:31:06.743Z","repository":{"id":192252439,"uuid":"71053375","full_name":"noooway/love2d_arkanoid_tutorial","owner":"noooway","description":"Tutorial on making a full-featured arkanoid (breakout)-type game with LÖVE framework.","archived":false,"fork":false,"pushed_at":"2018-03-01T12:51:43.000Z","size":5603,"stargazers_count":206,"open_issues_count":5,"forks_count":17,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-12-09T13:03:51.291Z","etag":null,"topics":["arkanoid","gamedev","love2d","tutorial"],"latest_commit_sha":null,"homepage":"","language":"Lua","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/noooway.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}},"created_at":"2016-10-16T13:52:07.000Z","updated_at":"2024-12-02T14:43:46.000Z","dependencies_parsed_at":"2023-09-03T18:59:47.561Z","dependency_job_id":null,"html_url":"https://github.com/noooway/love2d_arkanoid_tutorial","commit_stats":null,"previous_names":["noooway/love2d_arkanoid_tutorial"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noooway%2Flove2d_arkanoid_tutorial","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noooway%2Flove2d_arkanoid_tutorial/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noooway%2Flove2d_arkanoid_tutorial/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/noooway%2Flove2d_arkanoid_tutorial/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/noooway","download_url":"https://codeload.github.com/noooway/love2d_arkanoid_tutorial/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230511482,"owners_count":18237658,"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":["arkanoid","gamedev","love2d","tutorial"],"created_at":"2024-09-24T19:45:49.037Z","updated_at":"2024-12-19T23:15:22.965Z","avatar_url":"https://github.com/noooway.png","language":"Lua","readme":"This tutorial describes how to write a more or less full-featured [Arkanoid](https://en.wikipedia.org/wiki/Arkanoid) ([Breakout](https://en.wikipedia.org/wiki/Breakout_%28video_game%29)) clone. \n\nHere are several screenshots from various stages of the development process:\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://github.com/noooway/love2d_arkanoid_tutorial/wiki/The-Ball,-The-Brick,-The-Platform\"\u003e\u003cimg src=\"https://github.com/noooway/love2d_arkanoid_tutorial/blob/master/doc/img/1-01.png\" width=\"300\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Levels\"\u003e\u003cimg src=\"https://github.com/noooway/love2d_arkanoid_tutorial/blob/master/doc/img/1-06.png\" width=\"300\"/\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Add-New-Ball-Bonus\"\u003e\u003cimg src=\"https://github.com/noooway/love2d_arkanoid_tutorial/blob/master/doc/img/3-07.png\" width=\"300\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Wall-Tiles\"\u003e\u003cimg src=\"https://github.com/noooway/love2d_arkanoid_tutorial/blob/master/doc/img/3-11.png\" width=\"300\"/\u003e\u003c/a\u003e\n\u003cbr\u003e\n\u003ca href=\"https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Packaging\"\u003e\u003cimg src=\"https://github.com/noooway/love2d_arkanoid_tutorial/blob/master/doc/img/3-17.png\" width=\"300\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nThe intended audience are people, who have basic programming experience, but have\ntrouble structuring their code for projects bigger than \"Hello World\".\nAn Arkanoid, while simple, contains many elements found in more elaborate games.\nMy aim is to introduce a typical code structure,\nand to provide a starting point for further modifications.\n\n**Chapter 1** describes how to build a prototype for an Arkanoid-type \ngame in the most straightforward way,\nwithout relying too much on any external libraries or advanced language features. \n\n**Chapter 2** expands the prototype, introducing gamestates, basic graphics and sound.\nAt the end of this chapter, the general frame of the game is complete. What is left\nis to fill it with the details. \n\n**Chapter 3** proceeds to add functionality to achieve a full-featured game. \nWhile the first two chapters are rather general, material in this chapter is mostly \nspecific for Arkanoid-type games.\n\n**Appendices** - which are not written yet :) - demonstrate some additional topics, such as how to use environments to \ndefine Lua modules, classes, and so on.\n\nI realize that the length of the tutorial - almost 30 parts -\nis probably a bit too much. On the other hand,\nthe amount of work necessary to write a game is\ncommonly underestimated and this tutorial \nclearly shows what it actually takes to develop even a simple one.\n\nLua programming language and [LÖVE](https://love2d.org/) framework are used.\nBasic programming experience is assumed.\nFamiliarity with Lua and LÖVE is beneficial but not necessary.\nSome non-obvious Lua idioms are briefly explained.\n\nThe code can be downloaded using `git` \n```\ncd /your-path/\ngit clone https://github.com/noooway/love2d_arkanoid_tutorial\n```\nor by Github's [\"Clone or download -\u003e Download ZIP\"](https://github.com/noooway/love2d_arkanoid_tutorial/archive/master.zip) button.\n\nEach step can be run with the LÖVE interpreter by issuing a `love` \ncommand followed by the folder name, for example\n```\ncd /your-path/love2d_arkanoid_tutorial\nlove 1-01_TheBallTheBrickThePlatform \n```\n\nOne last thing before we start: feedback is crucial.\nIf you have any critique, suggestions, improvements or just any other ideas, please let me know. \n\nContents:\n\n**Chapter 1: Prototype**  \n\n1. [The Ball, The Brick, The Platform](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/The-Ball,-The-Brick,-The-Platform)\n2. [Game Objects as Lua Tables](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Game-Objects-as-Lua-Tables)\n3. [Bricks and Walls](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Bricks-and-Walls)\n4. [Detecting Collisions](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Detecting-Collisions)\n5. [Resolving Collisions](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Resolving-Collisions)\n6. [Levels](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Levels)  \n\n\u0026nbsp;\u0026nbsp;\u0026nbsp; Appendix A: [Storing Levels as Strings](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Storing-Levels-as-Strings)  \n\u0026nbsp;\u0026nbsp;\u0026nbsp; Appendix B: Optimized Collision Detection ([draft](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Optimized-Collision-Detection))\n\u003c!-- --\u003e\n\n**Chapter 2: General Code Structure**  \n\n1. [Splitting Code into Several Files](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Splitting-Code-Into-Several-Files)  \n2. [Loading Levels from Files](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Loading-Levels-From-Files)\n3. [Straightforward Gamestates](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Straightforward-Gamestates)\n4. [Advanced Gamestates](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Advanced-Gamestates)    \n5. [Basic Tiles](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Basic-Tiles)\n6. [Different Brick Types](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Different-Brick-Types)  \n7. [Basic Sound](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Basic-Sound)  \n8. [Game Over](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Game-Over)\n\n\u0026nbsp;\u0026nbsp;\u0026nbsp; Appendix B: Stricter Modules  \n\u0026nbsp;\u0026nbsp;\u0026nbsp; Appendix C-1: Intro to Classes  \n\u0026nbsp;\u0026nbsp;\u0026nbsp; Appendix C-2: Chapter 2 Using Classes.  \n\n\u003c!-- --\u003e\n **Chapter 3 (deprecated): Details**\n\n1. [Improved Ball Rebounds](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Improved-Ball-Rebounds)\n2. [Ball Launch From Platform (Two Objects Moving Together)](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Ball-Launch-From-Platform)\n3. [Mouse Controls](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Mouse-Controls)\n4. [Spawning Bonuses](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Spawning-Bonuses)\n5. [Bonus Effects](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Bonus-effects)\n6. [Glue Bonus](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Glue-Bonus)\n7. [Add New Ball Bonus](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Add-New-Ball-Bonus)\n8. [Life and Next Level Bonuses](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Life-and-Next-Level-Bonuses)\n9. [Random Bonuses](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Random-Bonuses)\n10. [Menu Buttons](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Menu-Buttons)\n11. [Wall Tiles](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Wall-Tiles)\n12. [Side Panel](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Side-Panel)  \n13. [Score](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Score)\n14. [Fonts](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Fonts)\n15. [More Sounds](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/More-Sounds)\n16. [Final Screen](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Final-Screen)\n17. [Packaging](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Packaging)\n\n\u003c!-- --\u003e\n**Additional Topics:**\n\n1. Game Design\n2. Minimal Marketing ([draft](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Minimal-Marketing))  \n3. Finding a Team \n\n[Acknowledgements](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Acknowledgements)  \n[Archive](https://github.com/noooway/love2d_arkanoid_tutorial/wiki/Archive)  \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoooway%2Flove2d_arkanoid_tutorial","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnoooway%2Flove2d_arkanoid_tutorial","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnoooway%2Flove2d_arkanoid_tutorial/lists"}