Swift
久々に。 前回はマイナス点一覧まで実装した。 今日はコントローラ(シーン)を実装して、SarsaAI同士が対戦する様子を見れるようにする。 GameScene SpriteKitでは、シーン(SKScene)がコントローラの役割を果たす。 そこで、SKSceneを継承したGameSceneを…
BirdHeadのUIを作っていたら、ノードをタッチをしてもタッチの通知が来ないということがあった。 しかも、iOS8で動かしたときだけ。(iOS9だと大丈夫) 少し実験してみると、iOS8とiOS9でSpriteKitのタッチ判定の挙動に違いがあり、それが原因だった。 今日…
昨日はマイナス点一覧に必要な部品の実装を行った。 今日はそれらを使ってマイナス点一覧を実装していく。 MinusPointInfoNode さっそくコードを。 //============================== // BirdHead //------------------------------ // MinusPointInfoNode.s…
昨日はアクションを実行するためのコードに関してリファクタリングを実施した。 今日はマイナス点一覧に使う部品を実装していく。 必要なもの マイナス点一覧を表示するときに、必要になるものをリストアップしてみると、以下。 ボタン テキスト(プレイヤー…
前回は手札の表示の実装を行った。 次はマイナス点情報の表示の予定だったんだけど、その前にちょっとリファクタリングを行う。 気になったコード さて、リファクタリングを行うということは、何か気になったコードがあったということ。 それは何かというと…
昨日は手札の表示の設計を行った。 今日はそれを元に実装を行っていく。 HandNode 手札はSKNodeを継承したHandNodeとして実装する。 //============================== // BirdHead //------------------------------ // HandNode.swift //=================…
昨日はプレイエリアの表示の実装を行った。 今日は手札の表示の設計を行っていく。 (※なお、タッチ処理の設計、実装はあとで) 手札表示の方法 手札を表示する上で考えないといけないのが、どうやって表示するか。 方法としては、 シンプルに横に並べて表示…
昨日はデッキの表示を実装した。 今日はプレイエリアの表示を実装していく。 PlayAreaNode プレイエリアは、SKNodeを継承したPlayAreaNodeとして実装していく。 //============================== // BirdHead //------------------------------ // PlayArea…
昨日はカードの表示を実装した。 今日はデッキの表示を実装していく。 デッキとフレーム デッキは、単純に考えると中央にカードを表示するだけなんだけど、実際には各プレイヤーにカードを配る必要があるので、もうちょい工夫が必要。 具体的には、デッキの…
昨日は画面構成とモデル/コントローラ/ビューの関係について説明した。 今日はカードの表示を作っていく。 CardNode カードはSKSpriteNodeを継承したノードとして実装した。 //============================== // BirdHead //------------------------------…
ということで、今日から「BirdHead」をiOSで遊べるようにしていく。 「BirdHead」に関しては、以下の記事を参照。 画面構成 まずは大雑把な画面構成から。 「BirdHead」はカードゲームなので、まずは以下のような要素が必要になってくる: デッキ 手札 カー…
BirdHeadのUI作りは難航中・・・ 簡単なようでいて、けっこう難しい(^^; 今日はUIを作ってる中で確立したテクニックを一つ紹介したい。 なお、NSOperationQueueを使うので、それについては以下を参照。 画像を追加し、整列させる 今回題材として考えるの…
これまでの各記事は以下から。 ランダムAI 「BirdHead」の思考ルーチンを作ってみた。(その1) - いものやま。 グリーディAI 「BirdHead」の思考ルーチンを作ってみた。(その2) - いものやま。 強化学習AI 「BirdHead」の思考ルーチンを作ってみた。(そ…
昨日はアクション選択と学習のアルゴリズムを実装した。 今日は、パラメータの保存とロードを実装して、クラスとして完成させる。 SarsaComクラス(続き) 保存とロード 保存とロードの実装を入れたクラス全体の様子は、以下のようになる。 (省略されている…
昨日はプレイヤー・ビューの特徴ベクトル化とそれを使った価値の計算について説明した。 今日はそれを使ったアクションの選択と学習について説明していく。 SarsaComクラス(続き) アクションの選択 アクションの選択は、Sarsa()法を使うので、任意のソフト…
昨日はグリーディAIを実装した。 今日からは強化学習を使ってAIを作っていく。 方針 まず、方針について。 強化学習にはいくつかのアルゴリズムがあるけれど、今回はSarsa()法を使う。 これは強化学習について学んでみた。(その19) - いものやま。で説明し…
昨日は「BirdHead」に対するランダムAIを実装した。 今日はもうちょっとマシなAIを実装してみる。 グリーディAI 「22」や「5本のキュウリ」のルールを聞いたときに誰もが思うのが、「それなら一番強いカードを出し続ければいいんじゃないの?」というもの。 …
前回までで「BirdHead」を遊べるようにした。 今回からは「BirdHead」の思考ルーチンを作っていく。 ランダムAI まずは一番簡単なところから。 合法手からランダムにアクションを選択するだけの、ランダムAI。 //============================== // BirdHead…
これまでの各記事は以下から。 デッキの実装 「BirdHead」を遊べるようにしてみた。(その1) - いものやま。 モデル全体の構成 「BirdHead」を遊べるようにしてみた。(その2) - いものやま。 アクション、プレイヤーの実装 「BirdHead」を遊べるようにし…
昨日はコントローラの実装を行った。 今日は人間プレイヤーの実装を行って、実際に遊べるようにしてみる。 Humanクラス ということで、さっそくコードを。 //============================== // BirdHead //------------------------------ // Human.swift /…
昨日までで、モデルの大部分は実装できた。 今日は、これらを繋ぎ合わせて動作させるコントローラを実装していく。 GameControllerクラス コントローラはビューとモデルを結びつける「糊」の役割を果たすので、UIごとに作っていくことになる。 ここで作るの…
昨日はゲーム情報の実装を行った。 今日はプレイヤー・ビューの実装を行っていく。 GameInfo.PlayerViewクラス プレイヤー・ビューはGameInfoクラスの内部クラスとして定義していく。 // 続き class PlayerView { // 続く なお、YWFのBoardと同じく、本質的…
昨日はアクションとプレイヤーの実装をした。 今日からは、ゲーム情報、および、プレイヤー・ビューの実装をしていく。 GameInfoObserverプロトコル その前に、ゲーム情報のオブザーバになるGameInfoObserverプロトコルのインタフェースを定義しておく。 ビ…
昨日はモデル全体の構成について説明した。 今日はアクションを表すAction列挙型とプレイヤーを表すPlayerプロトコルを実装していく。 Action列挙型 まずはAction列挙型から。 //============================== // BirdHead //----------------------------…
昨日はデッキの実装をした。 今日はモデル全体の設計を書いていきたいと思う。 モデル全体の構成をどうするか? YWFを作っていたときは、モデル全体の構成をどうすればいいかは、簡単だった。 すなわち、目に見えるボードがあって、プレイヤーがいて、プレイ…
昨日はトランプゲーム「22」のルールをちょっと変えてテーマを乗せたゲーム「BirdHead」を考えた。 今日からは、このゲームを実際に(CUIで)遊べるようにしてみる。 カード、デッキ まずは、カードとデッキを実装するところから。 といっても、BirdHeadの場…
このブログでずっと開発の様子を伝えていた変種オセロ「YWF」がリリースされました。 これまでの開発の様子 これまでの開発の様子は、以下の各まとめから。 考案〜Rubyによる実装(CUI) AIの作成 Swiftへの移植(CUI) ゲーム画面でのUIの作成 スタート画面…
これまでの各記事は以下から。 アイコンの作成 変種オセロの仕上げをしてみた。(その1) - いものやま。 勝敗の表示 変種オセロの仕上げをしてみた。(その2) - いものやま。 LabelButtonNodeの反応性の向上 変種オセロの仕上げをしてみた。(その3) - い…
前回までで、改善が必要だった部分についての改善を行った。 あとは、ストアに提出するだけ。 提出前の準備 まず、当然だけどAppleのDeveloper Programに登録していないとダメ。 さらに、契約やらなんやらもいろいろ済ましておく・・・(正直、プログラマに…
Xcode 7にアップデートして、それによってSwift 2.0への変更を含め、いくつか修正が必要だったので、それについて。 マイグレーション まず、Xcode 7にアップデートして既存のプロジェクトを開くと、Swift 2.0に合わせて変更を行うかどうかを確認するダイア…