アプリ制作記5 シングルトンのパラメータクラス
画面はすんなり表示できるという事がわかったので、次はオセロゲームに必要なコーディングの準備をしようかな。
ゲーム内で必要になる色々な変数を、画面やノードなどに分散させて持たせるのではなく、プロジェクト内で唯一となるパラメータクラスに持たせて管理しようかなと構想してみました。
唯一といえばこれ、シングルトンパターンを使ってみたい!という事で、基本形を描いてみました。
import Foundation
import SpriteKit
import GameplayKit
class Parameter{
static let sharedInstance = Parameter()
//マスの幅と高さ
public let _X : Int = 8
public let _Y : Int = 8
//制限時間
public var _timeBlack : Int?
public var _timeWhite : Int?
//秒読み
public var _sec : Int?
//1マスの幅と高さ
public var _UnitWidth : Int?
public var _UnitHeight : Int?
//駒の幅と高さ
public var _FrameWidth : Int?
public var _FrameHeight : Int?
//座標(右上0,0 右下0,7 左上7,0 左下7,7)
public var _UnitCenterX = [Int]()
public var _UnitCenterY = [Int]()
//座標の状態(0:コマなし 1:黒 2:白)
public var _UnitExist = [Int]()
//現在の手番(1:黒 2:白)
public var _CurrentPlayer = 1
private init() {
}
//黒の時間を返す
func GetTimeForBlack() -> String{
}
//白の時間を返す
func GetTimeForWhite() -> String{
}
//黒駒の画像を返す(引数は盤上の座標 右上0,0 右下0,7 左上7,0 左下7,7)
func GetBlackFrame(aX:Int, aY:Int) -> SKSpriteNode {
}
//白駒の画像を返す(引数は盤上の座標 右上0,0 右下0,7 左上7,0 左下7,7)
func GetWhiteFrame(aX:Int, aY:Int) -> SKSpriteNode {
}
//1マスの幅と高さ、駒の幅と高さを指定(引数はボードのSKSpriteNode)
func SetFrameAndUnitXY(aNode:SKSpriteNode?){
}
//駒を置く(引数:置いた位置 戻り値:true正常に置く false異常位置)
func SetFrame(aX:Int, aY:Int) -> SKSpriteNode? {
}
}
オセロの盤上で必要になると思われる、1マスの幅と高さだったり、黒と白の制限時間だったり、パラメータ絡みで必要になりそうな関数だったり、シングルトンを使ってパラメータクラスを定義しました。
呼び出し側は、
Parameter.sharedInstance.メンバ変数
Parameter.sharedInstance.メンバ関数
とすることで、必要な画面からどこでもパラメータクラス内の変数や関数を呼び出せて、パラメータクラスは乱立しないことになります。これがどこまで使い勝手良く使えるかは今後みていこう。そうしよう。