いものやま。

雑多な知識の寄せ集め

YWF

変種オセロのUIを作ってみた。(その14)

さて、レイアウトの修正は出来た。 次はボタンのタッチ処理を出来るようにする。 また、ボードのタッチ処理についても、修正を行う。 オブザーバパターンの実現 SwiftでSetの型パラメータにプロトコルを指定する方法について。 - いものやま。で言及したよう…

変種オセロのUIを作ってみた。(その13)

昨日はレイアウトのリデザインを行った。 今日はこのレイアウトを実現するための仕組みを実装する。 レイアウトマネージャ SpriteKitでレイアウトを決めるときに必要になるのが、プロパティのpositionの値。 なので、各要素のpositionの適切な値を返すクラス…

変種オセロのUIを作ってみた。(その12)

昨日はボタンの描画を実装した。 しかし、レイアウトに問題があることが発覚したので、今日はその解決を。 レイアウトのリデザイン とりあえず、今まではどの画面サイズについても、縦方向の構成はどれも同じでいいやと思っていたけれど、画面サイズでこうも…

変種オセロのUIを作ってみた。(その11)

ちょっと間が空いたけど、続き。 今日はUndoなどを行うためのボタンを作っていく。 ボタンの描画 ということで、まずはボタンの描画から。 SKSpriteNodeを継承して、ButtonNodeを作る。 //============================== // YWF //------------------------…

変種オセロのUIを作ってみた。(その10)

昨日はタッチ処理の実装を行った。 今日はタッチ処理の実装をちょっと修正する。 タッチ処理の修正 作ったタッチ処理を実際に触ってみた分かったのは、選択を確定させるのに2回タッチするのは面倒ということ。 なので、1回のタッチで選択を確定させるように…

変種オセロのUIを作ってみた。(その9)

昨日はタッチ処理の実装を途中まで行った。 今日はその続き。 タッチ処理の実装 さて、肝心のタッチ処理の実装は、次のような感じ。 public class BoardNode: SKSpriteNode { // 省略 private var touch: UITouch! private var previousSelectedSquare: Squa…

変種オセロのUIを作ってみた。(その8)

BoardNodeの実装の続き。 今日はタッチ処理を実装していく。 タッチの仕様 まず、タッチの仕様を考えてみる。 基本的な仕様は、以下。 選択可能なマスが、ハイライトで表示される。 選択可能なマスを1回タッチすると、マスが選択状態になる。 選択状態になっ…

変種オセロのUIを作ってみた。(その7)

昨日の続き。 今日はボードの描画を実装していく。 ボードの描画 ボードの描画は、SKSpriteNodeを継承したBoardNodeを作って実装する。 //============================== // YWF //------------------------------ // BoardNode.swift //==================…

変種オセロのUIを作ってみた。(その6)

昨日は駒の描画を実装した。 今日からはボードの描画を実装していく。 ボードの構成について まずは、ボードの構成について。 ボードを単に一つのスプライトにしてもいいのだけど、その場合、タッチされた場所を都度計算したり、駒の場所を管理したりと、ち…

変種オセロのUIを作ってみた。(その5)

素材作りは昨日でとりあえず完了。 今日からはコーディングをしていく。 駒の描画 まずは、駒を描画するところから。 ということで、SKSpriteNodeを継承して、PieceNodeを作る。 駒の状態 まず、駒の状態を表す列挙型を定義。 //===========================…

変種オセロのUIを作ってみた。(その4)

昨日は駒を作った。 今日は残りの部品を作っていく。 ボードの作成 変種オセロのUIを作ってみた。(その2) - いものやま。で作ったマットと木材を使って、ボードを作っていく。 まず、ボードのマット部分を用意。 柔らかみを出すために枠を角丸にしようと思…

変種オセロのUIを作ってみた。(その3)

昨日は素材の作成で、マットと木材を作った。 今日は駒を作っていく。 駒のデザイン ボードゲームで駒といったら、やっぱりミープル。 ということで、ネットの画像などを参考に、パスをいじって作成したのがこちら。 ただ、これだと立体感が出ないので、影を…

変種オセロのUIを作ってみた。(その2)

昨日は画面設計を行った。 今日は必要な素材を作っていく。 素材の話 ボードゲームをテーマにしたアプリを見てみると、素材にあまりこだわりのないアプリと、素材をちゃんと作り込んであるアプリがあるように思う。 例えば、自分がインストールしたバックギ…

変種オセロのUIを作ってみた。(その1)

変種オセロをiOSで遊べるようにするために、変種オセロのUIを作ってみた。 変種オセロ「良い子悪い子普通の子」については、以下を参照。 画面設計 まずは、画面設計から。 とりあえず、出来上がりがどんなふうになれば良さそうかを書いたラフが、以下。 汚…

変種オセロをSwiftに移植してみた。(まとめ)

これまでの各記事は、以下から。 変種オセロをSwiftに移植してみた。(その1) - いものやま。 変種オセロをSwiftに移植してみた。(その2) - いものやま。 変種オセロをSwiftに移植してみた。(その3) - いものやま。 変種オセロをSwiftに移植してみた。…

変種オセロをSwiftに移植してみた。(その11)

昨日はランダムAIを実装した。 今日はアルファベータAIの実装。 アルファベータAI さっそくコードを。 public class AlphaBetaCom: Player { private var color: Board.Color private lazy var opponent: Board.Color = self.color.opponent private var dep…

変種オセロをSwiftに移植してみた。(その10)

昨日はプレイヤーの実装。 今日はランダムAIを実装していく。 乱数の取得 さて、ランダムAIを実装するのだけど、やはりRubyのArray#sampleのような気の利いたメソッドはないわけで。 ということで、まずは乱数の取得から。 乱数の話 乱数といえば、srand()で…

変種オセロをSwiftに移植してみた。(その9)

昨日の記事は以下。 残すは実際のプレイヤーの実装。 プレイヤーの実装をするためのTips 標準入力、標準出力の扱い さて、プレイヤーを実装しようとするとまず必要となるのが、標準入力から文字列を受け取るという処理。 ただ、なんということか・・・そんな…

変種オセロをSwiftに移植してみた。(その8)

ボードの表示まで出来るようになった。 次は、人同士が対戦できるようにする。 Playerプロトコル Rubyの場合、ダック・タイピングが出来るので、プレイヤーに共通のインタフェースをコード上に定義する必要はないのだけど、Swiftはそうではないので、プレイ…

変種オセロをSwiftに移植してみた。(その7)

ボードの実装が終わったので、次はボードの表示の実装。 ボードの表示 さっそくコードを。 /* BoardViewer.swift */ import Foundation public struct BoardViewer { private static let COL_INDEX = " 1 2 3 4 5 6 7 8 9" private static let LINE = " +---…

変種オセロをSwiftに移植してみた。(その6)

あともうちょい。 ボードの実装(続き) 走査メソッド まずは走査メソッドから。 // 続き private func traverseFrom(row: Int, _ col: Int, to direction: (Int, Int), _ block: (Int, Int, Int, Color) -> Bool) { var traverseRow = row + direction.0 va…

変種オセロをSwiftに移植してみた。(その5)

さらに続く。 ボードの実装(続き) 合法手の実行 // 続き public func play(row: Int, _ col: Int) -> Board { assert( self.isPlayable(row, col), "not playable. [row: \(row), col: \(col)]") let newBoard = Board(self) newBoard.putPiece(row, col) …

変種オセロをSwiftに移植してみた。(その4)

まだまだ続くよー。 ボードの実装(続き) ボードの情報へのアクセス ざくっと。 // 続き public func color(row: Int, _ col: Int) -> Color { assert( (Board.ROW_MIN <= row) && (row <= Board.ROW_MAX), "invalid row. [row: \(row)]") assert( (Board.C…

変種オセロをSwiftに移植してみた。(その3)

まだまだ続くよ。 ボードの実装(続き) 初期化 プロパティを定義したので、次は初期化。 // 続き public init() { self.board = [ [.WALL, .WALL , .WALL , .WALL , .WALL , .WALL , .WALL , .WALL , .WALL , .WALL , .WALL], [.WALL, .EMPTY, .EMPTY, .EMP…

変種オセロをSwiftに移植してみた。(その2)

昨日の続き。 ボードの実装(続き) アクションの定義 色に続いて、アクションも列挙型として定義。 // 続き public enum Action { case Pass case Play(Int, Int) case Change(Int, Int) } // 続く Swiftの列挙型の面白い機能として、パラメータを取ること…

変種オセロをSwiftに移植してみた。(その1)

変種オセロ「良い子悪い子普通の子」については、以下を参照。 これをSwiftで書き直してみた。 なお、Swiftのバージョンは1.2なので、2.0とはちょっと違うところもある。 ボードの実装 まずは、ボードの実装から。 次のように、ボードをクラスとして定義した…

変種オセロの思考ルーチンを作ってみた。(まとめ)

これまでの各記事は、以下から。 変種オセロの思考ルーチンを作ってみた。(その1) - いものやま。 変種オセロの思考ルーチンを作ってみた。(その2) - いものやま。 変種オセロの思考ルーチンを作ってみた。(その3) - いものやま。 変種オセロの思考ル…

変種オセロの思考ルーチンを作ってみた。(その6)

昨日の記事は、以下から。 今日は、ミニマックスAIのさらなる高速化を目指す。 アルファベータ法 アルファベータ法の基本的な考え方は、ミニマックス法と同様、「相手が自分にとって一番都合の悪い手を打ってくる前提で、その中で一番マシな局面になる手を選…

変種オセロの思考ルーチンを作ってみた。(その5)

昨日は、パフォーマンスを改善して、ミニマックスAIがそれなりのスピードで動くようにした。 今日はちょっと話題を変えて、千日手の話。 千日手 将棋の場合、何度も同じ局面になってしまって、手が進まなくなってしまうことがある。 これを「千日手」といっ…

変種オセロの思考ルーチンを作ってみた。(その4)

昨日はミニマックス法を実装したけど、処理が遅いという問題が。 そこで、今日はパフォーマンスの改善を行っていく。 プロファイル パフォーマンスの改善を考えるときに、まず最初にやらないといけないことが、プロファイル。 ボトルネックを勘違いして修正…