{"id":17645756,"url":"https://github.com/retrodaredevil/track-shooter","last_synced_at":"2025-06-21T12:36:14.580Z","repository":{"id":37583563,"uuid":"129270798","full_name":"retrodaredevil/track-shooter","owner":"retrodaredevil","description":"A unique retro shooter style game made with libgdx. Currently unavailable on the Play Store.","archived":false,"fork":false,"pushed_at":"2024-03-05T01:15:06.000Z","size":2114,"stargazers_count":8,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-07T05:30:30.184Z","etag":null,"topics":["android-app","android-application","android-game","libgdx-game","retro","retrogaming","track-shooter"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/retrodaredevil.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}},"created_at":"2018-04-12T15:15:19.000Z","updated_at":"2024-11-19T23:51:45.000Z","dependencies_parsed_at":"2022-09-12T07:52:31.638Z","dependency_job_id":"46eef055-7762-49bf-85c2-cd3cd20df17e","html_url":"https://github.com/retrodaredevil/track-shooter","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/retrodaredevil/track-shooter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retrodaredevil%2Ftrack-shooter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retrodaredevil%2Ftrack-shooter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retrodaredevil%2Ftrack-shooter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retrodaredevil%2Ftrack-shooter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/retrodaredevil","download_url":"https://codeload.github.com/retrodaredevil/track-shooter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/retrodaredevil%2Ftrack-shooter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261125648,"owners_count":23113277,"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":["android-app","android-application","android-game","libgdx-game","retro","retrogaming","track-shooter"],"created_at":"2024-10-23T10:59:26.529Z","updated_at":"2025-06-21T12:36:09.562Z","avatar_url":"https://github.com/retrodaredevil.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# track-shooter\nA retro shooter style game made with libgdx\n## About this game\nIn this game, you go around a track and rotate to shoot enemies. Each level you go up, the more enemies there are.\nAfter 10 seconds in each level (except level 1 and levels divisible by 4), a Snake enemy comes in that has crazy and unique movement. The only point of this game is to\nget the highest score.\n\nLevel 10, and every 8 levels after that are \"easy\" levels.\n\n## Example:\n[Low Quality Video](https://www.youtube.com/watch?v=qpaIXSVZYBI \"Track Shooter Demo Video\")\n\n![alt text](demo-screenshot.png?raw=true \"Demo Screenshot\")\n\n## Running the Game\nYou must have at least Java 8 installed. You must create a local.properties with ```sdk.dir=\"your android installation\"```\n\nWindows: ```gradlew.bat desktop:run```\n\n*nix: ```./gradlew desktop:run```\n\nIf you are using logcat, this may be useful if the console is being spammed: `(?=^((?!Skip ramp).)*$)(?=^((?!This process).)*$)`\n\n## Build Troubleshooting\n\n### On Android `libgdx.so` not found\nRelates to issue: https://github.com/libgdx/libgdx/issues/5863.\nNeed to run this specific gradle task before deploying.\n\n```shell\n./gradlew appgoogle:copyAndroidNatives\n```\n\nIf that does not work, uninstall app from device and then deploy.\n\n\n## Conventions\n* Use conventions found in `.editorconfig`\n* If you come across a file that has mixed spaces and tabs, change the spaces to tabs IF you make other changes in the file\n* If you come across a file with `Objects.requireNonNull()` IF you make other changes, change it to use a static import\n\n## Contributing\nIf you want to get involved, feel free to create an issue about an idea that you have. Pull requests are welcome, but\nif you create an issue I can get back to you if I think the pull request will be accepted.\n\n# Why I made this\nI've always loved \"retro\" arcade games. Some of my favorites are Galaga, Pacman, and Xevious. I wanted to create a game\nwith the \"feel\" of these games: 3 lives each game and you try to get the high score each time you play it. December 2016 I had\na lot of fun creating a Pokemon based game (in my repos). After that I moved onto Unity for a while (2017), then made a text adventure (late 2017)\nand then worked code for a robot (early 2018). After robotics season I knew I needed a new project to work on. While I created this\nI wanted to have the same feeling of designing my game from the ground up like I did with the Pokemon game. (Slick2D was great, but outdated) I didn't want\nthe learning curve of a huge game engine like Unity. I wanted to start programming it right away. That's why I chose LibGDX.\nIt allowed me to have the freedom of designing the structure of my code, unlike game engines where the code is just a way to script. \nLibGDX is object oriented but it never felt like it forced me to design my code a certain way like other game engines do. \nFor instance, with Unity, it forces you to have a very modular scripting approach.\nI didn't want to feel like I was scripting my game so that's why I went with LibGDX.\n\n# Design decisions\n\n### Updateable and Renderable\nThroughout this project, I've made some good and bad design decisions. I had to refactor the Updateable interface to remove\nthe world instance passed through its method and I decided not to use my refactoring of the Renderable/RenderComponent interfaces.\nEarly in the project, I decided to fully separate rendering from Entity's classes by making Entities Renderable. Instead of rendering,\nthe Renderable interface returns a RenderComponent to modularize rendering. This design was perfect, except I made it more complex\nwhen I had to use multiple stages. In some cases, passing a stage through a RenderComponent made things a lot easier, other times it made it\nless elegant.\n\n### Input\nWhen I first created this game, I was tired of input libraries that did abstract anything. I knew that eventually I wanted to\nhave a bunch of different control options, so I started creating an input library that didn't depend on anything else in the\nproject. The input library moved back and forth from being in this project, to being a separate project. I imported it with\njitpack.io and committed almost every change so I could test it. I eventually added unit tests to abstract-controller-lib\nwhich made it a lot easier. I can say that abstract-controller-lib helped me write my input code a lot better than other\nsolutions. I even used it for input in [robot2019](https://github.com/frc1444/robot2019).\n\n### Putting this on Android\nThis game was initially only run on desktop, but I knew that someday I wanted to change that. Because of abstract-controller-lib,\nI was able to create a gyro binding for android and some other simple controls. I had the game up and running on my phone\nsurprisingly quickly.\n\n### Entities\nI'm happy with how the design of Entities turned out and am really glad I made Entity an interface instead of just\nan abstract class. This allowed me to be a lot more flexible with other interfaces that extended Entity, allowing me\nto inherit multiple interfaces that also inherited Entity.\n\n### Entity Movement\nI'm not entirely sure how I feel about my implementation of MoveComponents. This is mostly because after creating the MoveComponent\nframework, I created [action-lib](https://github.com/retrodaredevil/action-lib). If I find huge advantages of using my\nnew library over my old framework, I might change it.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretrodaredevil%2Ftrack-shooter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fretrodaredevil%2Ftrack-shooter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fretrodaredevil%2Ftrack-shooter/lists"}