Push: Ctrl+Y

 技術で遊んで ときどき進む

アプリ ゲームAI

Kotlin × ゲームAI(ステート駆動エージェント)①:最初の一歩

2016/09/15

というわけで、ゲームAIプログラミング編に突入します!こんにちはー。

ディープラーニングが出てきてからこっち、実はAIに興味津々でした。それで画像処理だのネットクローラだのにちょこちょこ手を出してきたわけですが、最近この記事(『デジタルゲームのための人工知能入門』)を見てうずうずしてきたので、今回このテーマを選びました。

この本をやっていきます。今回は、ステート駆動エージェントです。名前かっこいい。

 

 

 

言語選定

けっこう迷ったのですが、Androidアプリにしよう&どうせならKotlin使いたいなあってことで、まさかの新言語チャレンジです。AndroidStudio使わなすぎてver.2.0にアップグレードするのが地味に時間かかりました。。

始める前にざーっと読んだのはこの本です。分かりやすいし、逆引きもしやすいのが良い。

 

Kotlin × AndroidStudio

Kotlinプラグインの基本的な設定等に関してはこちらのサイト(『Hello Kotlin : Android Studio で Kotlin を始める』)に準じています。

上記を設定してパッケージを作成した後、さらにAndroid専用の拡張機能を取り入れるので、以下を設定します。

 

概要

作るもの

FireFoxesキツネの、キツネによる、キツネ色のための物語 -』というゲームを昔考えたことがあったので、なんかそれっぽく作ってみることにしました。キツネ色のものを食べないとキツネとしての形を保てない主人公が周りにあるものをとにかく美味しそうな色に焼いていく的な話で、落ちは特にありません。まあ残るのは荒野のみってやつです。。

ステート遷移概要:

gameai1-1-1

今回の完成図:

 

文字情報だとあんまりテンション上がらないのですが、ちょっとずつ改善していくので今回はこのままで。。

 

デザインパターン

今回重要なのは、Stateパターンです。(他、Object・Singletonも入ってくるので興味があれば・・)

Stateというinterfaceを置いて、その下に実際の状態(今回は「探す」「焼く」「食す」「寝る」の4つ)を紐づけるイメージです。4つの状態はSingletonで、状態を持たず手続きのみを実装します。状態自体を持っているのはキツネ(Fox)で、こいつが状態をがちゃがちゃ入れ替えていろんな動作をする、というイメージでいきます。

gameai1-1-2

 

実装

さっそく実装に入っていきます。

UIを作成する

とりあえず、app/res/layout/activity_main.xmlを開いて編集しておきます。
いろいろ書いていますが、重要なのはidのところだけです。

 

ビジネスロジックのパッケージ分割

まず、java/作ったパッケージ以下にmodelというパッケージを置きます。ついでに後々のためにactivitiesというパッケージも作って、MainActivityも移動して別パッケージにしておきましょう。

パッケージの構成はこんな感じになります。

 

状態を実装

とりあえず今回のメインである「状態」から実装していきます。

まずはinterfaceのState.ktです。

この下に4つの状態を実装していきますが、全部載せるのも何なので「探す」状態だけ載せておきます。他もほとんど同じです。

 

動作主体の実装

主体は今のところキツネだけなので、こいつを作っていきます。登場するモノは全部、BaseGameEntityという抽象クラスをかませてID等を管理する実装です。

これを継承したFoxも作成します。

 

MainActivityを実装

最後にループさせてメッセージを変更するところを作ります。Android開発的にはここで一番引っかかりました。。

Androidはシングルスレッドしか許されていないので、時間ごとに実行するにはちょっと工夫が必要なんですね。。

 

まとめ

ここから先、キツネだけでなく他の存在も追加してひとつの世界を作っていく感じになります。State駆動エージェント編、もうちょっと続きます!

どうでも良い私事ですが、一週間前にまさかのmacbookがいきなり立ち上がらなくなる事件に見舞われました。。スマホは最悪なくても生きていけるけど、ノーパソないと生きていくのが辛いなあと実感。こういうときのためのもう一台を買おうかどうしようか結構悩んでいる今日この頃です。

 

 

-アプリ, ゲームAI
-, ,

おすすめの記事

1
React + Redux入門① - Reduxの概念を理解

React+Reduxでサイトを作っているので、復習がてら「検索画面を作成する」 ...

2
React + Redux + D3.js アニメーション:ドラッグ&ドロップでキングスライムを作った

はい、今回は要素のドラッグ&ドロップを中心に作ってみました。 Mater ...