{"id":22305008,"url":"https://github.com/octcarp-courses/SUSTech-CS209A-LinkGame","last_synced_at":"2025-10-14T00:30:53.205Z","repository":{"id":265226615,"uuid":"879676487","full_name":"OctCarp/SUSTech-CS209A-LinkGame","owner":"OctCarp","description":"(JavaFX 23 + Java socket) A Linking Game (a.k.a. '连连看') with simple online multiplayer functionality.  SUSTech CS209A 2024 Fall Assignment 2.","archived":false,"fork":false,"pushed_at":"2024-11-28T11:02:38.000Z","size":4883,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-28T12:19:07.806Z","etag":null,"topics":["cs209a","javafx","socket-programming","sustech"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","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/OctCarp.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":"2024-10-28T10:59:18.000Z","updated_at":"2024-11-28T11:02:41.000Z","dependencies_parsed_at":"2024-11-28T12:19:09.859Z","dependency_job_id":"ad100f92-5d86-4e33-ac09-a7ea05339900","html_url":"https://github.com/OctCarp/SUSTech-CS209A-LinkGame","commit_stats":null,"previous_names":["octcarp/sustech-cs209a-linkgame"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OctCarp%2FSUSTech-CS209A-LinkGame","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OctCarp%2FSUSTech-CS209A-LinkGame/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OctCarp%2FSUSTech-CS209A-LinkGame/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OctCarp%2FSUSTech-CS209A-LinkGame/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OctCarp","download_url":"https://codeload.github.com/OctCarp/SUSTech-CS209A-LinkGame/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":236426385,"owners_count":19147000,"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":["cs209a","javafx","socket-programming","sustech"],"created_at":"2024-12-03T19:09:22.111Z","updated_at":"2025-10-14T00:30:47.719Z","avatar_url":"https://github.com/OctCarp.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SUSTech-CS209A-Linking-Game\n\n(JavaFX 23 + Java socket) A Linking Game (a.k.a. '连连看') with simple online multiplayer functionality.\n\nSUSTech CS209A 2024 Fall Assignment 2.\n\n### Versions\n\n- Main branch ( `main` ): Kotlin implementation version\n- [Java implementation version](https://github.com/OctCarp/SUSTech-CS209A-LinkGame/tree/java-backup) ( `java-backup` branch), you can check this for Java native implementation.\n\nFor documentation, it is recommended to first refer to the `main` branch, as the documentation for the backup branch is no longer being updated, and there may be some minor errors in it.\n\n### About\n\nA toy game. I wrote it in a short time span, and by the end the project structure was a little messy. \n\nThere may be some minor bugs that have not been addressed. \n\nAfter completing the Java version, I refactored the project into Kotlin with the help of JetBrains Intellij IDEA and LLM, exploring Kotlin's syntactic sugar.\n\nKotlin version may have more bugs (due to rewrites) or fewer bugs (as some issues from the Java version were addressed during refactoring).\n\nIt is not a native Kotlin project, and does not use features such as `coroutines`.\n\n### Documentation\n\n- [requirement.pdf](docs/requirement.pdf)\n- [grading_criteria.xlsx](docs/grading_criteria.xlsx) or [grading_criteria_CHS.xlsx](docs/grading_criteria_CHS.xlsx)\n\nI completed both the basic and bonus features.\n\n### Modules\n\n- [game-common](game-common/): Shared model components used by both the client and the server.\n    - `model` : Different models for C/S transmission through `ObjectI/OStream` .\n    - `packet` : General `Request` / `Response` model.\n\n- [game-client](game-client/): JavaFX game client application.\n    - `controller` : Controllers for JavaFX `.fxml` files.\n    - `net` : Singletons for managing various types of client-side data.\n\n- [game-server](game-server/): Java socket game server.\n    - `net` : Singletons for managing different kinds of data for all clients.\n\n\n### Login / Register\n\n![login](docs/img/login.png)\n\nThere are 3 pre-define users:\n\n- \"1\" , \"1\"\n- \"2\" , \"2\"\n- \"2\" , \"2\"\n\n### Main Menu\n\n![main_menu](docs/img/main_menu.png)\n\n### Start Matching (Lobby)\n\n![lobby](docs/img/lobby.png)\n\n### Choose Size\n\nA random player to choose size.\n\n![select_board](docs/img/select_board.png)\n\n### Link!\n\nLines key frame animation for both players.\n\nYou can shuffle for a new shape of grids.\n\n![link](docs/img/link.png)\n\n### Game Result\n\n![end](docs/img/end.png)\n\n### Match Record\n\nNo beautification.\n\n![record](docs/img/record.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foctcarp-courses%2FSUSTech-CS209A-LinkGame","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foctcarp-courses%2FSUSTech-CS209A-LinkGame","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foctcarp-courses%2FSUSTech-CS209A-LinkGame/lists"}