読者です 読者をやめる 読者になる 読者になる

simplestarの技術ブログ

目的を書いて、思想と試行、結果と考察、そして具体的な手段を記録します。

対戦ゲームで一喜一憂するAI

強化学習でまるばつゲーム(3目ならべ)を作ったことがありましたが、ふと相手の手や自分の手に関して一喜一憂するAIが作れるのではないかと思ったわけです。
作ってみます。

AIには最近扱いに慣れてきたSDユニティちゃんを使わせてもらおうと思います。
感情表現としては、用意されている表情でやってみますか。

smile2, confuse, sad, scold, strain, surprise, damaged, relux の計 8 種類の感情表現とします。

状況に応じて、どの感情を表すかは後で決めることにしますか。
まずは対戦ゲームの方を完成させます。

簡単なユースケース駆動開発をしてみます。
まずは「リトライ(開始)ボタン」を押すとゲームが最初からやり直しとなります。
最初に「先攻後攻決めアニメ」が走ります。
自分の番になると、「青い Your Turn」のボードが一瞬出てきて消えます。
「盤面」の「マス」にホバーすると「半透明の〇 or ×マーク」がマス内に表示されます。
ホバーするマス目ごとに「SDユニティちゃん」が「感情表現」を変化させます。
配置したいマスをクリックすると、「配置音」と同時に「不透明の〇×マーク」がマス内に配置されます。
配置されたマス目ごとに「SDユニティちゃん」が「感情表現」を変化させます。
相手の番になると「赤い Enemy Turn」のボードが一瞬でてきて消えます。
「SDユニティちゃん」が感情表現しながら、マウスをホバーして「半透明の〇 or ×マーク」がマス内に表示され、そのマスごとに「感情表現」を変えます。
意思決定をしたら、SDユニティちゃんは、空いているマスに配置、「配置音」と同時に「不透明の〇×マーク」がマス内に配置されます。
配置されたマス目ごとに「SDユニティちゃん」が「感情表現」を変化させます。
「ゲームが終了、勝敗」が決まると、「SDユニティちゃん」が「感情表現」を変化させます。
「リトライ(開始)ボタン」を押すとゲームが最初からやり直しとなります。

ここで出てきたオブジェクトを列挙します。
・リトライ(開始)ボタン
・先攻後攻決めアニメ
・赤い Enemy Turn ボード、青い Your Turn ボード
・盤面/マス
・SDユニティちゃん
・感情
・配置音
・半透明、不透明の〇×マーク
・ゲーム結果、勝敗
まずはこれらのアセットを準備します。

…そろいました。
f:id:simplestar_tech:20170205202442j:plain

ではユースケースを実装してみましょう。
「リトライ(開始)ボタン」を押すとゲームが最初からやり直し
「先攻後攻決めアニメ」が走る
自分・相手の番になると、「青い・赤い Turn」のボードが一瞬出てきて消える
「盤面」の「マス」にマウスがホバーすると「半透明の〇 or ×マーク」がマス内に表示
ホバーするマス目ごとに「SDユニティちゃん」が「感情表現」を変化させます。
配置したいマスをクリックすると、「配置音」と同時に「不透明の〇×マーク」がマス内に配置される。
相手の番になると「赤い Enemy Turn」のボードが一瞬でてきて消える。

f:id:simplestar_tech:20170206004929j:plain

とりあえず、今ここまで実装を進めてます。

意思決定をしたら、SDユニティちゃんは、空いているマスに配置、「配置音」と同時に「不透明の〇×マーク」がマス内に配置されます。
配置されたマス目ごとに「SDユニティちゃん」が「感情表現」を変化させます。
「ゲームが終了、勝敗」が決まると、「SDユニティちゃん」が「感情表現」を変化させます。
「リトライ(開始)ボタン」を押すとゲームが最初からやり直しとなります。

f:id:simplestar_tech:20170227090030j:plain

をやりました。

次のだけ入っていない
「SDユニティちゃん」が感情表現しながら、マウスをホバーして「半透明の〇 or ×マーク」がマス内に表示され、そのマスごとに「感情表現」を変えます。

時間が空いてしまって、熱量が足りない…
気が向いたら、入れようと思います。

一喜一憂するAIは、わかっていても対戦していてなかなか楽しいことがわかりました。

f:id:simplestar_tech:20170227090243j:plain

ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています