いものやま。

雑多な知識の寄せ集め

ゲーム開発

「BirdHead」の思考ルーチンを作ってみた。(その5)

昨日はアクション選択と学習のアルゴリズムを実装した。 今日は、パラメータの保存とロードを実装して、クラスとして完成させる。 SarsaComクラス(続き) 保存とロード 保存とロードの実装を入れたクラス全体の様子は、以下のようになる。 (省略されている…

「BirdHead」の思考ルーチンを作ってみた。(その4)

昨日はプレイヤー・ビューの特徴ベクトル化とそれを使った価値の計算について説明した。 今日はそれを使ったアクションの選択と学習について説明していく。 SarsaComクラス(続き) アクションの選択 アクションの選択は、Sarsa()法を使うので、任意のソフト…

「BirdHead」の思考ルーチンを作ってみた。(その3)

昨日はグリーディAIを実装した。 今日からは強化学習を使ってAIを作っていく。 方針 まず、方針について。 強化学習にはいくつかのアルゴリズムがあるけれど、今回はSarsa()法を使う。 これは強化学習について学んでみた。(その19) - いものやま。で説明し…

「BirdHead」の思考ルーチンを作ってみた。(その2)

昨日は「BirdHead」に対するランダムAIを実装した。 今日はもうちょっとマシなAIを実装してみる。 グリーディAI 「22」や「5本のキュウリ」のルールを聞いたときに誰もが思うのが、「それなら一番強いカードを出し続ければいいんじゃないの?」というもの。 …

「BirdHead」の思考ルーチンを作ってみた。(その1)

前回までで「BirdHead」を遊べるようにした。 今回からは「BirdHead」の思考ルーチンを作っていく。 ランダムAI まずは一番簡単なところから。 合法手からランダムにアクションを選択するだけの、ランダムAI。 //============================== // BirdHead…

「BirdHead」を遊べるようにしてみた。(まとめ)

これまでの各記事は以下から。 デッキの実装 「BirdHead」を遊べるようにしてみた。(その1) - いものやま。 モデル全体の構成 「BirdHead」を遊べるようにしてみた。(その2) - いものやま。 アクション、プレイヤーの実装 「BirdHead」を遊べるようにし…

「BirdHead」を遊べるようにしてみた。(その7)

昨日はコントローラの実装を行った。 今日は人間プレイヤーの実装を行って、実際に遊べるようにしてみる。 Humanクラス ということで、さっそくコードを。 //============================== // BirdHead //------------------------------ // Human.swift /…

「BirdHead」を遊べるようにしてみた。(その6)

昨日までで、モデルの大部分は実装できた。 今日は、これらを繋ぎ合わせて動作させるコントローラを実装していく。 GameControllerクラス コントローラはビューとモデルを結びつける「糊」の役割を果たすので、UIごとに作っていくことになる。 ここで作るの…

「BirdHead」を遊べるようにしてみた。(その5)

昨日はゲーム情報の実装を行った。 今日はプレイヤー・ビューの実装を行っていく。 GameInfo.PlayerViewクラス プレイヤー・ビューはGameInfoクラスの内部クラスとして定義していく。 // 続き class PlayerView { // 続く なお、YWFのBoardと同じく、本質的…

「BirdHead」を遊べるようにしてみた。(その4)

昨日はアクションとプレイヤーの実装をした。 今日からは、ゲーム情報、および、プレイヤー・ビューの実装をしていく。 GameInfoObserverプロトコル その前に、ゲーム情報のオブザーバになるGameInfoObserverプロトコルのインタフェースを定義しておく。 ビ…

「BirdHead」を遊べるようにしてみた。(その3)

昨日はモデル全体の構成について説明した。 今日はアクションを表すAction列挙型とプレイヤーを表すPlayerプロトコルを実装していく。 Action列挙型 まずはAction列挙型から。 //============================== // BirdHead //----------------------------…

「BirdHead」を遊べるようにしてみた。(その2)

昨日はデッキの実装をした。 今日はモデル全体の設計を書いていきたいと思う。 モデル全体の構成をどうするか? YWFを作っていたときは、モデル全体の構成をどうすればいいかは、簡単だった。 すなわち、目に見えるボードがあって、プレイヤーがいて、プレイ…

「BirdHead」を遊べるようにしてみた。(その1)

昨日はトランプゲーム「22」のルールをちょっと変えてテーマを乗せたゲーム「BirdHead」を考えた。 今日からは、このゲームを実際に(CUIで)遊べるようにしてみる。 カード、デッキ まずは、カードとデッキを実装するところから。 といっても、BirdHeadの場…

トランプゲーム「22」をちょっと変えて、テーマも乗せてみた。

昨日はトランプゲーム「22」の紹介をした。 実はこれは今日への布石・・・ ということで、「22」のルールをちょっと変更して、さらにテーマを乗せることを考えてみた。 「22」のちょっと不満なところ 「22」はすごくいいゲームで大好きなんだけど、ちょっと…

変種オセロの仕上げをしてみた。(まとめ)

これまでの各記事は以下から。 アイコンの作成 変種オセロの仕上げをしてみた。(その1) - いものやま。 勝敗の表示 変種オセロの仕上げをしてみた。(その2) - いものやま。 LabelButtonNodeの反応性の向上 変種オセロの仕上げをしてみた。(その3) - い…

変種オセロの仕上げをしてみた。(その7)

前回までで、改善が必要だった部分についての改善を行った。 あとは、ストアに提出するだけ。 提出前の準備 まず、当然だけどAppleのDeveloper Programに登録していないとダメ。 さらに、契約やらなんやらもいろいろ済ましておく・・・(正直、プログラマに…

変種オセロの仕上げをしてみた。(その6)

昨日はHistoryクラスを実装し、棋譜の保存が出来るようにした。 今日は、ライフサイクルのイベントに合わせて、棋譜の保存を実行できるようにしていく。 UIApplicationDelegateプロトコル iOSでは、アプリの状態が切り替わるタイミングに呼ばれるメソッドがU…

変種オセロの仕上げをしてみた。(その5)

LabelButtonNodeの反応性の向上は出来た。 次は中断されたゲームの再開。 Historyクラス まずは、ゲームを再開できるようにするために、棋譜を保存してやる必要がある。 けど、モデル(Boardクラス)で扱っているのは一つの盤面の情報だけで、棋譜全体の情報…

変種オセロの仕上げをしてみた。(その4)

昨日はLabelButtonNodeの反応が悪い原因を調査した。 今日は実際にLabelButtonNodeの修正を行っていく。 原因と解決策 まず、おさらいということで、反応性が悪かった原因と、その解決策について。 原因は、文字列をタップしているつもりで、そのちょっと下…

変種オセロの仕上げをしてみた。(その3)

昨日は勝敗の表示を実装した。 今日はLabelButtonNodeの反応性の向上を行っていく。 原因の調査 まずは原因の調査から。 変種オセロのルール画面を作ってみた。(まとめ) - いものやま。では、文字でなく背景をタッチしたときに反応が返ってきてないんじゃ…

変種オセロの仕上げをしてみた。(その2)

昨日はアイコンの作成を行った。 今日は勝敗の表示を行っていく。 勝敗表示の方法 なお、勝敗を表示するには、いくつかの方法が考えられる。 一番単純なのは、ダイアログ(アラート)を表示するという方法。 もうちょい手の込んだことをするなら、結果を表示…

変種オセロの仕上げをしてみた。(その1)

前回までで、変種オセロをゲームとして遊べるところまで作った。 あとは仕上げということで、残ったタスクをこなしていく。 アイコンの作成 まずはアイコンから。 App Storeに提出するときには、さらに大きいサイズのアイコンが必要なようだけど、とりあえず…

変種オセロのルール画面を作ってみた。(まとめ)

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

変種オセロのルール画面を作ってみた。(その5)

昨日はルール画面を作った。 今日はスタート画面とルール画面の遷移を実装していく。 スタート画面の修正 まずはスタート画面→ルール画面の遷移から。 //============================== // YWF //------------------------------ // StartScene.swift //===…

変種オセロのルール画面を作ってみた。(その4)

昨日はルールの変更に合わせてボードの修正をした。 今日は実際にルールを表示する画面を作る。 ルール画面 さっそくコードを。 //============================== // YWF //------------------------------ // RuleScene.swift //=========================…

変種オセロのルール画面を作ってみた。(その3)

昨日は英語のルールを書いた。 今日は、ルールの変更に合わせて、ボードのコードを修正。 ボードの修正 といっても、修正内容は簡単。 結果として、前より簡単なコードになった感じ。 とりあえず、何を修正したのかが分かるように、diffの出力。 diff --git …

変種オセロのルール画面を作ってみた。(その2)

昨日はYWFの日本語ルールを書いた。 今日は英語ルールを書いていく。 ルール書き(英語) ということで、英語のルール。 Overview YWF (Yoi-ko, Warui-ko, Futsu-no-ko) is a strategy board game for two players. One plays as Yoi-ko, which means Good b…

変種オセロのルール画面を作ってみた。(その1)

前回までは、スタート画面を作っていた。 残すは、ルール画面のみ。 ルール書き まずは、ルールを書くところから。 概要 YWF(良い子悪い子普通の子)は、2人用の戦略ボードゲームです。 一人が「良い子」、もう一人が「悪い子」となり、ボード上で多数派に…

変種オセロのスタート画面を作ってみた。(まとめ)

これまでの各記事は以下から。 変種オセロのスタート画面を作ってみた。(その1) - いものやま。 変種オセロのスタート画面を作ってみた。(その2) - いものやま。 変種オセロのスタート画面を作ってみた。(その3) - いものやま。 変種オセロのスタート…

変種オセロのスタート画面を作ってみた。(その7)

昨日はゲーム画面からスタート画面への遷移を作った。 今日は遷移するときに確認のダイアログを出すようにしていく。 UIAlertController 確認のダイアログを出すときに使えるのが、UIAlertController。 (なお、以前はUIAlertViewが使われていたけれど、非推…