Skip to content

estel1997/reversi_tutorial

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

reversi_tutorial

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 とゲームロジックの学習用です。商用ゲームや完成アプリとしての公開を目的としたものではありません。

About

SwiftUI reversi practice project focused on board state management and legal move detection.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages