{"id":25517830,"url":"https://github.com/s4k10503/watermelongameclone","last_synced_at":"2025-07-04T04:32:22.670Z","repository":{"id":263193121,"uuid":"862270445","full_name":"s4k10503/WatermelonGameClone","owner":"s4k10503","description":"\"Watermelon Game\" is a puzzle game that combines the systems of a falling object puzzle game and a merge game.","archived":false,"fork":false,"pushed_at":"2025-07-02T16:49:08.000Z","size":6027,"stargazers_count":4,"open_issues_count":10,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-02T17:34:28.134Z","etag":null,"topics":["game","unity"],"latest_commit_sha":null,"homepage":"https://zenn.dev/s4k1/scraps/6ffa4a143ec4a9","language":"C#","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/s4k10503.png","metadata":{"files":{"readme":"README-ja.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,"zenodo":null}},"created_at":"2024-09-24T10:18:18.000Z","updated_at":"2025-05-03T23:17:08.000Z","dependencies_parsed_at":"2024-12-22T08:34:50.581Z","dependency_job_id":"f2a89b3e-070c-49bc-8acc-12502d13f79a","html_url":"https://github.com/s4k10503/WatermelonGameClone","commit_stats":null,"previous_names":["s4k10503/watermelongameclone"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/s4k10503/WatermelonGameClone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s4k10503%2FWatermelonGameClone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s4k10503%2FWatermelonGameClone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s4k10503%2FWatermelonGameClone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s4k10503%2FWatermelonGameClone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s4k10503","download_url":"https://codeload.github.com/s4k10503/WatermelonGameClone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s4k10503%2FWatermelonGameClone/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263445808,"owners_count":23467618,"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","unity"],"created_at":"2025-02-19T15:38:03.566Z","updated_at":"2025-07-04T04:32:22.662Z","avatar_url":"https://github.com/s4k10503.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"[English](./README.md)\n\n# Watermelon Game Clone\n\n「スイカゲーム」は、落ち物パズルとマージゲームの要素を組み合わせたパズルゲームです  \nこのクローンはオニオンアーキテクチャとMVPパターンを用いて設計されており、関心の分離が明確になっています\n\n![WatermelonGameClone](https://github.com/user-attachments/assets/9fac8743-cc80-443a-9c88-c53c01932522)  \n\n\u003chttps://github.com/user-attachments/assets/6c3802fb-9c43-45b4-883c-1352ca3f9884\u003e  \n\n## 主なアーキテクチャ上の特徴\n\nオニオンアーキテクチャ + MVPパターン：モジュール性とテストのしやすさを促進\n\n```mermaid\ngraph TD\n    %% Node definition\n    UI[Presentation Layer]\n    UseCase[UseCase Layer]\n    Domain[Domain Layer]\n    Infra[Infrastructure Layer]\n\n    %% Control flow (execution order)\n    UI --\u003e UseCase\n    UseCase --\u003e Domain\n\n    %% Dependency flow (dependency direction)\n    Infra -.-\u003e Domain\n```\n\n### Domain層\n\n- 目的\n  - ゲームのルールやロジックを中心に据えたビジネスロジックを実装\n- 依存関係\n  - どこにも依存しない（UniRxやUniTaskへの依存は許可）\n- 主な責務\n  - アイテムのエンティティを生成\n  - アイテムのマージ条件を判定\n  - スコアを計算\n- 構成要素\n  - Interfaces：Domain ServiceおよびInfrastructure層のインタフェースを定義\n  - Services：Domain Serviceを実装\n  - ValueObject：Domain Modelを実装\n  - Entity：Domain Modelを実装\n\n### UseCase層\n\n- 目的\n  - Domain層のロジックを活用し、ユースケースごとの処理をまとめる\n- 依存関係\n  - Domain層に依存\n- 主な責務\n  - Presentation層からのリクエストを受け取り、適切なドメインロジックを実行\n- 構成要素\n  - Interfaces：UseCaseのインタフェースを定義\n  - UseCases：ServiceやRepositoryを利用してUseCaseを実装\n  - DTO：Presentation層にDomain層のデータを渡すためのDTOを実装\n\n### Infrastructure層\n\n- 目的\n  - 外部データソースや永続化の管理\n- 依存関係\n  - Domain層に依存\n- 主な責務\n  - ゲームスコアの保存や読み込み\n  - サウンドやリソースのロード\n- 構成要素\n  - Repositories：Domain ModelやDomain Serviceを利用してリポジトリを実装\n  - Services：外部APIなどを利用してサービスを実装\n  - SODefinitions：スクリプタブルオブジェクトを定義\n\n### Presentation層\n\n- 目的\n  - UI操作やゲームの見た目を管理\n- 依存関係\n  - Domain層やUseCase層に依存（注意：Domain層への依存は要修正）\n- 主な責務\n  - Interfaces：Viewのインタフェースを定義\n  - Presenter：Presenterを実装（UseCase層とViewのバインド）\n  - View：Viewを実装（MonoBehaviourの継承許可）\n  - State：各画面状態の定義とそれに対応する状態管理ハンドラを実装\n  - DTO：UseCaseのデータをPresenterからViewに渡すDTOを実装\n  - SODefinitions：スクリプタブルオブジェクトを定義\n\n### 画面状態管理\n\nステートパターンを用いてページとモーダルの状態を管理\n\n- PageState / ModalStateを定義\n  - PageState：シーン内のPage（メイン画面）のバリエーション\n  - ModalState：オーバーレイ的に表示されるModal（サブ画面）のバリエーション\n- Dictionaryによる状態ごとのハンドラクラス実装\n  - 各ハンドラクラスは「その状態になったときにView(画面)でどのような表示・非表示を行うか」を実装\n- UIイベントに応じた状態変更\n  - Presenterではユーザー操作やアプリのイベントが発生したときに該当のPageStateやModalStateに切り替え\n- ReactivePropertyを使った状態変更の検知と画面切り替え\n  - PresenterではPageStateやModalStateが変更されるたびにUpdatePageStateUI() または UpdateModalStateUI()が呼ばれる\n\n## 動作環境\n\nUnity 2022.3.22f1 LTS以降\n\n## 実行方法\n\n1. 本リポジトリをクローンして Unity エディタで開きます\n2. Asset Store から Extenject および DOTween を取得（未取得の場合）\n3. パッケージマネージャーで「My Assets」から Extenject と DOTween をインポート\n4. Extenject に同梱されている AutoSubstitute.zip を TestFramework フォルダに展開\n5. Zenject-TestFramework.asmdef および EditMode.asmdef に NSubstitute.dll の参照を追加\n\n## サードパーティ製アセット\n\n- UniRx\n  - \u003chttps://github.com/neuecc/UniRx\u003e\n  - リアクティブプログラミングによるレスポンシブなUIやゲームロジックの実装\n\n- UniTask\n  - \u003chttps://github.com/Cysharp/UniTask\u003e\n  - 効率的な非同期処理の実装\n\n- Extenject\n  - \u003chttps://assetstore.unity.com/packages/tools/utilities/extenject-dependency-injection-ioc-157735\u003e\n  - レイヤー間の依存関係の注入\n\n- DOTween\n  - \u003chttps://assetstore.unity.com/packages/tools/animation/dotween-hotween-v2-27676\u003e\n  - 滑らかなUIアニメーションの実装\n\n- おひさまハミング\n  - \u003chttps://bgmer.net/music/212\u003e\n  - オリジナルファイル名：「212_BPM132」\n  - ループ用に編集\n\n## 参考\n\n\u003chttps://nosystemnolife.com/suicaclone001/\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs4k10503%2Fwatermelongameclone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs4k10503%2Fwatermelongameclone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs4k10503%2Fwatermelongameclone/lists"}