こんにちは、FUKUOKAゲームインターンシップに参加している牟田勇貴です。
インターンシップ開始から1ヶ月が経ち、制作も終盤に差し掛かっています。
今回のブログでは、私が担当したAI(敵コンピュータ(CPU)の挙動)について書いていこうと思います。
今回制作するゲームのテーマが「PONG 2012」ということで、私たちは円形のフィールドで打ち合う「PONG」を考えました。
ボールを打ち合うゲームなので、対戦がメインとなるゲームになります。
対戦形式のゲームというのは、相手が居て、同じレベルでの対戦をとおして、初めて「楽しい!」と思えるゲームであり、自分の担当箇所であるAIは、ゲームの面白さの肝となる部分になります。
また、対戦というのは、もちろんCPUとの対戦より、人間対人間の対戦の方が楽しいものです。
ですので、CPUに「人間らしさ」をどれだけ盛り込めるかによって、CPU戦の楽しさが変わってきます。
今回「人間らしいAI」を目指すにあたり、私は"人間の起こすミスの種類"を場合分けするところからはじめました。
ゲームの人間対人間で対戦する部分は出来上がっていたので、実際にチームのみんなと対戦し、どういった時にミスをするのかを調査しました。
こういったところでも、他人とコミュニケーションが取れないと、作業が捗りません。
ゲームが面白くなり得る部分は、必ずチームみんなで相談し、方針を固める。
一人でゲームをつくる際には、絶対に体験できないことです。
ゲーム制作にコミュニケーション能力が必須だということを、再認識させられました。
そして、調査した結果、人間のミスというのは以下のように分類されると考えました。
・誤った操作
・誤った判断
・ゲームルール無理解
これらをAIに反映させることによって、まるで人間と対戦しているような感覚を得ることができるようになります。
次に、難易度調整のため、これらを数値化し、AIにどのようなパラメータを持たせるかを考察します。
AIには以下のようなパラメータを持たせることにしました。
・相手がボールを打ち出してからAIが動き出すまでの反応速度
・ボールの到達予測地点をずらす値
・ボールの到達予測地点までAIが追いかける時の最大の距離
これらの値を調整、計算することで、AIの挙動を最適化し、難易度の設定を行います。
これらの値が、AIに「人間らしさ」を与えるパラメータとなります。
「現在のボールの位置から、どの場所に動けばよいかを判断し移動する」という、人間の頭の良さ・判断力は、反応速度を調整することで、それらしく見せることができます。
AIは予め計算されたボールの到達予測地点に向かうようになっていますが、そのボールの到達予測地点をずらすことで、人間の誤操作や勘違いなどを表現し、また、追いかけられるギリギリの位置にボールが移動する際、追いかけるかどうかで、人の積極性も表現することにしました。
プログラマーはキーボードを叩いていれば良いというイメージを持っている方もいらっしゃるでしょうが、そんなことはありません。
今回のインターンシップがそうだったように、キーボードを叩いている時間の方が短く、プログラムの動き方を考えたり話し合ったりする時間の方が長いのです。
「こういうものを作ってください」と言われたものをプログラムに起こすスキルというのももちろん大事なのですが、プログラムの動き方や必要なパラメータを素早く把握するスキルの方がもっと大事だと思います。
これは、与えられた課題をこなすだけでは絶対に身につかないスキルなので、今回のインターンシップでは、このことを学ぶことができ、大変有意義なものでした。
そして、完成したゲームがこちらになります。
私が担当した部分はAIの他に、ボールとバーの挙動、反射の当たり判定と計算です。
今回のインターンシップでは、プログラミングに関することはもちろん、他にもスケジュール管理など、今後業界へ入るつもりならば知っておいた方がいいことを、たくさん学ばせていただきました。
そして、何度も書いていますが、チームでのゲーム制作で最も重要な「コミュニケーションの大切さ」を学ばせていただきました。
ゲームの企画やアイデア、画像、音楽、そしてそれらをまとめるプログラム、すばらしいゲームには、どれも欠けてはいけないものです。
そして、チーム内のコミュニケーションというのは、これらを繋げる重要なファクターなのです。
これからゲーム業界を目指すにあたり、これらのことを意識して頑張っていこうと思います。
今回のような貴重な機会を下さったFUKUOKAゲームインターンシップ関係者様、サイバーコネクトツー様、そして一緒にゲームをつくったチームのみんなには本当に感謝しています。
実際の現場で、また一緒にゲーム制作できる日が来るように、しっかりと精進していきたいです。
短い間ですが、本当にありがとうございました!
次回(6/4)は、サイバーコネクトツーのインターン生レポートをお送りします。
お楽しみに♪
<関連記事>
■【2012春】サイバーコネクトツー/プログラマーコース 牟田勇貴さん①
インターンシップ開始から1ヶ月が経ち、制作も終盤に差し掛かっています。
今回のブログでは、私が担当したAI(敵コンピュータ(CPU)の挙動)について書いていこうと思います。
今回制作するゲームのテーマが「PONG 2012」ということで、私たちは円形のフィールドで打ち合う「PONG」を考えました。

▲案出しの際にアーティストに描いてもらったイメージボード
ボールを打ち合うゲームなので、対戦がメインとなるゲームになります。
対戦形式のゲームというのは、相手が居て、同じレベルでの対戦をとおして、初めて「楽しい!」と思えるゲームであり、自分の担当箇所であるAIは、ゲームの面白さの肝となる部分になります。
また、対戦というのは、もちろんCPUとの対戦より、人間対人間の対戦の方が楽しいものです。
ですので、CPUに「人間らしさ」をどれだけ盛り込めるかによって、CPU戦の楽しさが変わってきます。
今回「人間らしいAI」を目指すにあたり、私は"人間の起こすミスの種類"を場合分けするところからはじめました。
ゲームの人間対人間で対戦する部分は出来上がっていたので、実際にチームのみんなと対戦し、どういった時にミスをするのかを調査しました。
こういったところでも、他人とコミュニケーションが取れないと、作業が捗りません。
ゲームが面白くなり得る部分は、必ずチームみんなで相談し、方針を固める。
一人でゲームをつくる際には、絶対に体験できないことです。
ゲーム制作にコミュニケーション能力が必須だということを、再認識させられました。
そして、調査した結果、人間のミスというのは以下のように分類されると考えました。
・誤った操作
・誤った判断
・ゲームルール無理解
これらをAIに反映させることによって、まるで人間と対戦しているような感覚を得ることができるようになります。
次に、難易度調整のため、これらを数値化し、AIにどのようなパラメータを持たせるかを考察します。
AIには以下のようなパラメータを持たせることにしました。
・相手がボールを打ち出してからAIが動き出すまでの反応速度
・ボールの到達予測地点をずらす値
・ボールの到達予測地点までAIが追いかける時の最大の距離
これらの値を調整、計算することで、AIの挙動を最適化し、難易度の設定を行います。
![12サイバーコネクトツー_牟田氏2[1].jpg](https://www.gff.jp/internship/12%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%88%E3%83%84%E3%83%BC_%E7%89%9F%E7%94%B0%E6%B0%8F%EF%BC%92%5B1%5D.jpg)
▲AIの仕様書
これらの値が、AIに「人間らしさ」を与えるパラメータとなります。
「現在のボールの位置から、どの場所に動けばよいかを判断し移動する」という、人間の頭の良さ・判断力は、反応速度を調整することで、それらしく見せることができます。
AIは予め計算されたボールの到達予測地点に向かうようになっていますが、そのボールの到達予測地点をずらすことで、人間の誤操作や勘違いなどを表現し、また、追いかけられるギリギリの位置にボールが移動する際、追いかけるかどうかで、人の積極性も表現することにしました。
プログラマーはキーボードを叩いていれば良いというイメージを持っている方もいらっしゃるでしょうが、そんなことはありません。
今回のインターンシップがそうだったように、キーボードを叩いている時間の方が短く、プログラムの動き方を考えたり話し合ったりする時間の方が長いのです。
「こういうものを作ってください」と言われたものをプログラムに起こすスキルというのももちろん大事なのですが、プログラムの動き方や必要なパラメータを素早く把握するスキルの方がもっと大事だと思います。
これは、与えられた課題をこなすだけでは絶対に身につかないスキルなので、今回のインターンシップでは、このことを学ぶことができ、大変有意義なものでした。
そして、完成したゲームがこちらになります。
![12サイバーコネクトツー_牟田氏2[2].jpg](https://www.gff.jp/internship/12%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%88%E3%83%84%E3%83%BC_%E7%89%9F%E7%94%B0%E6%B0%8F%EF%BC%92%5B2%5D.jpg)
▲ゲーム画面
私が担当した部分はAIの他に、ボールとバーの挙動、反射の当たり判定と計算です。
![12サイバーコネクトツー_牟田氏2[2].jpg](https://www.gff.jp/internship/12%E3%82%B5%E3%82%A4%E3%83%90%E3%83%BC%E3%82%B3%E3%83%8D%E3%82%AF%E3%83%88%E3%83%84%E3%83%BC_%E7%89%9F%E7%94%B0%E6%B0%8F%EF%BC%92%5B2%5D.jpg)
▲実際に自分でプレイしてみながら調整をします
今回のインターンシップでは、プログラミングに関することはもちろん、他にもスケジュール管理など、今後業界へ入るつもりならば知っておいた方がいいことを、たくさん学ばせていただきました。
そして、何度も書いていますが、チームでのゲーム制作で最も重要な「コミュニケーションの大切さ」を学ばせていただきました。
ゲームの企画やアイデア、画像、音楽、そしてそれらをまとめるプログラム、すばらしいゲームには、どれも欠けてはいけないものです。
そして、チーム内のコミュニケーションというのは、これらを繋げる重要なファクターなのです。
これからゲーム業界を目指すにあたり、これらのことを意識して頑張っていこうと思います。
今回のような貴重な機会を下さったFUKUOKAゲームインターンシップ関係者様、サイバーコネクトツー様、そして一緒にゲームをつくったチームのみんなには本当に感謝しています。
実際の現場で、また一緒にゲーム制作できる日が来るように、しっかりと精進していきたいです。
短い間ですが、本当にありがとうございました!
次回(6/4)は、サイバーコネクトツーのインターン生レポートをお送りします。
お楽しみに♪
<関連記事>
■【2012春】サイバーコネクトツー/プログラマーコース 牟田勇貴さん①