SwiftUI でリバーシの盤面ロジックを学習するための小さなプロジェクトです。完成したゲームアプリとしてではなく、盤面状態、合法手判定、石の反転、パス判定、勝敗判定を実装して理解することを目的にしています。
- SwiftUI で 8 x 8 の盤面 UI を表示する
- 盤面状態を model と presenter で管理する
- 合法手判定を実装する
- 8 方向探索で反転する石を求める
- パスとゲーム終了を判定する
- UI とロジックの責務を分ける
| 区分 | 技術 |
|---|---|
| App | Swift / SwiftUI |
| Logic | Board state, legal move detection |
| State | @StateObject, presenter |
| UI | LazyVGrid |
| Version Control | Git / GitHub |
- 8 x 8 の初期盤面
- 黒・白・空マスの状態管理
- 8 方向の探索
- 相手の石を挟める場所だけを合法手とする
- 着手時に挟んだ石を反転する
- 置ける場所がない場合はパス表示
- 両者が置けない場合はゲーム終了
- 石数を数えて勝敗を表示
BoardView
-> Cell
-> PassPopupView
-> GameOverPopupView
GameModel
-> initialBoard()
-> stonesToFlip()
-> hasLegalMove()
-> applyMove()
-> count()
GamePresenter
-> board state
-> current player
-> tap handling
-> pass / game over popup
- 石の反転候補を
Coordの配列として返すようにした - 8 方向探索を配列でまとめ、同じロジックで処理できるようにした
- View 側では盤面表示と tap 処理に集中し、ルール判定は model に寄せた
- パスとゲーム終了を popup として表示できるようにした
- 盤面ゲームでは UI より先に状態とルールを整理する必要がある
- 8 方向探索は共通処理にすると見通しが良くなる
- SwiftUI の Grid 表示と状態更新を組み合わせる練習になった
- 小さな学習 repo でも、README で目的を明確にすると見られ方が良くなる
Xcode でプロジェクトを開き、Run で起動します。
この repo は SwiftUI とゲームロジックの学習用です。商用ゲームや完成アプリとしての公開を目的としたものではありません。