これまでの各記事は以下から。
- イントロ、画面設計
- 素材作成
- 駒、ボードの描画
- タッチ処理の実装
- ボタンの描画
- レイアウトマネージャの実装
- ターン処理の実装
- オブザーバパターンの実現
- ターンコントローラの実装
- Passボタン対応
- Undoボタン対応
- ユーザ情報の表示
- ゲームシーンの実装
また、関係の深い記事は、以下。
- YWF関係
- Swift関係
- SpriteKitのサンプルコード関係
正直、ここまで長くなるとは思わなかった・・・
クラス図
コードを全部載せてももはや何なのかという感じなので、大雑把なクラス図だけ書いておこうと思う。
(※クラス名の後ろにコロンで区切って書いてあるのは、親クラス名)
==> ViewController, View, Scene <==
+--------------------+
| GameViewController |
+--------------------+
|
V
+--------+
| SKView |
+--------+
|
V
+--------------------+
| GameScene: SKScene |
+--------------------+
----
==> Scene, etc. <==
+--------------------+ +----------------+
| GameScene: SKScene |--->| TurnController |
+--------------------+ +----------------+
| | | |
| | | | +---------------+
| | | +---->| LayoutManager |
| | | child +---------------+
| | V
| | +----------------------+
| | | UserInfoNode: SKNode |
| | +----------------------+
| |
| | child
| V
| +--------------------+
| | ButtonNode: SKNode |
| +--------------------+
|
| child
V
+-------------------------+
| BoardNode: SKSpriteNode |
+-------------------------+
----
==> BoardNode, etc. <==
+-------------------------+ model +-------+
| BoardNode: SKSpriteNode |------>| Board |
+-------------------------+ +-------+
| |
| | notify +-------------------+
| child +-------->| BoardNodeObserver |
V +-------------------+
+--------------------+
| SquareNode: SKNode |
+--------------------+
|
| child
V
+-------------------------+
| PieceNode: SKSpriteNode |
+-------------------------+
----
==> ButtonNode, etc <==
+--------------------------+
| ButtonNode: SKSpriteNode |
+--------------------------+
|
| notify
V
+--------------------+
| ButtonNodeObserver |
+--------------------+
----
==> UserInfoNode, etc <==
+-------------------+
| BoardNodeObserver |
+-------------------+
A
| implement
+----------------------+
| UserInfoNode: SKNode |
+----------------------+
----
==> TurnController, etc. <==
+-------------------+
| BoardNodeObserver |
+-------------------+
A
| implement
|
| +--------------------+
| | ButtonNodeObserver |
| +--------------------+
| A
| | implement
+----------------+ +--------+
| TurnController |--->| Player |
+----------------+ +--------+
| |
| V
| +------------+
| | ButtonNode |
| +------------+
|
V
+-----------+
| BoardNode |
+-----------+
----
==> Player, etc. <==
+--------+ implement +--------------+
| Player |<|-----------| AlphaBetaCom |
+--------+ +--------------+
A
| implement
|
| +-------------------+
| | BoardNodeObserver |
| +-------------------+
| A
| | implement
| |
| | +--------------------+
| | | ButtonNodeObserver |
| | +--------------------+
| | A
| | | implement
+-------------+ +------------+
| Human |--->| ButtonNode |
+-------------+ +------------+
|
V
+-----------+
| BoardNode |
+-----------+
----
メソッド名とかも書いてないし、本当に大雑把だけど、名前からそれぞれのクラスがどんな関係になってるのかは大体分かるんじゃないかな。
今日はここまで!