人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

2004-01-01から1年間の記事一覧

AIの実装/ミニマックス法

コンピュータと対戦できるようにAIを実装します。ここでは思考ゲームのもっとも基本的なアルゴリズムであるミニマックス法について解説します。othello06.jar プレイヤーとAIが交互に打つ AIとは人工知能(Artificial Intelligence)のことです。人工知能っ…

ライフゲーム

人工知能というより人工生命の分野ですが最初はライフゲームを作ってみます。ライフは人生という意味もありますがライフゲームは人生ゲームとはまったく関係ありません。とある理由でJARではなく自己解凍exeにしました。解凍したらclickme.batをダブルクリッ…

はさんだ石をひっくり返す

はさんだ石がひっくり返るようにしてみます。othello04.jar 石をひっくり返す 石をひっくり返す処理はmouseClicked()で呼び出しているreverse()です。 public void mouseClicked(MouseEvent e) { // どこのマスかを調べる int x = e.getX() / GS; int y = e.…

勝敗を判定する

勝敗判定機能をつけます。また黒と白の石の数が上部に表示されるようにします。othello05.jar 石の数を数える 勝敗を判定するにはまず黒と白の石の数を数える必要があります。countStone()で数えています。 private Counter countStone() { Counter counter …

石が打てる場所か判定する

オセロで石が打てる場所は相手の石をひっくり返せるところだけです。今回は石が打てる場所を判定する処理を実装します。othello03.jar 石が打てるか判定する 石を打つmouseClicked()に注目してください。 public void mouseClicked(MouseEvent e) { ・・・ /…

マウスで石を打つ

盤面に白石と黒石を交互に打てるようにします。打ったときにはカチッっと気持ちい音が鳴るようにもしています。othello02.jar マウスで石を打つ 盤面をマウスでクリックしたとき石が打たれるようにするためにmouseClicked()を実装します。 public void mouse…

オセロ盤を作る

まず手始めにオセロ盤を描くところまで作ります。othello01.jar オセロ盤の構造 盤面の構成は下の図のようになってます。オセロ盤は2次元のint型並列で表現します。 // 盤面 private int[][] board = new int[MASU][MASU]; 盤面に入る数字は何もないとき0、…

マウスクリック

マウスで画面をクリックすると点が描かれるプログラムを作ります。マウスはキーボードと並んで基本的な入力インタフェースなので簡単なプログラムを書いて慣れておくといいです。mouse_click.jar クリックイベント マウスのクリックイベントを検出するにはま…

イメージを表示する

イメージを表示してみます。ゲーム作成ではイメージを頻繁に使うためとっても重要です。draw_image.jar イメージの表示 JavaがサポートしているのはGIF、JPG、PNGです。BMPも表示できるにはできますが実装は少し面倒です。ここではGIFを使いますが、JPG、PNG…

WAVEの再生

音を鳴らしてみます。ただ鳴らすだけではつまらないのでボールが跳ねるプログラムを改造し、ボールが壁に当たったら「ポン」と鳴るようにしてみます。ちなみに効果音はwav形式のファイルを使います。効果音はザ・マッチメイカァズさんからお借りしました。so…

勇者はがにまたが直った

前回までの勇者はどの方向に移動してもこっちを向いていました。ドラクエ1と同じです。これだとあまりかっこよくないので移動する方向をちゃんと向くようにしてみます。rpg06.jar 四方向の画像を用意する 用意した画像は下のです。前回と同じく足踏みさせる…

勇者は足踏みした

前回の勇者は移動はできますが足踏みしてませんね。足踏みってのは言うまでもないと思いますがのことです。rpg05.jar アニメーション ボールを動かす(2004/9/19)にも書きましたが、アニメーションはいくつかの画像を順番に切り替えることで作れます。今回…

勇者は壁にぶつかった

勇者が壁にぶつかるようにしてみます。あっ、別に挫折するわけじゃないですよ(笑)rpg04.jar 壁にぶつかる処理 壁にぶつかる=壁のあるマスには移動できないようにするということです。なので、前回勇者の移動処理を書いていたkeyPressed()から見てみます。…

ボールをたくさん作る

跳ね返るボールを複数作ってみます。今回はボールを表すクラスを別途作りました。このクラス(オブジェクトの雛形)を用いればいくつでもボールが作れます。オブジェクト指向が非常に強力な仕組みであることを理解してください。オブジェクト指向については…

勇者は第一歩を踏み出した

マップに勇者を乗せて移動できるようにしましょう。勇者が第一歩を踏み出すときがきました。rpg03.jar 勇者をキーボードで動かす まず勇者がマップ上のどの位置にいるかを表す変数(x,y)を用意します。そして、勇者の位置を(1,1)に初期化しています。これは、…

お城を建てる

前回、勇者はすみっこでいじけてたのでお城を建ててあげましょう。というわけで今回はマップの作り方です。ここで書くコードは拡張性をまったく考慮してません。本当はマップ専用のクラスを作って処理を分離するところですがそれはもっと後の回で取り上げま…

勇者登場

まずは一番簡単なところから始めましょう。勇者を画面に描いてみます。勇者ですが、を使います。いきなり、はじめにの画像と違いますがまあいいでしょう。素材はすべてJ-JSoftさんのサイトからMACKさんの素材をお借りしています。rpg01.jar イメージの仕様 …

RPGを作ろう

RPG編ではドラクエ1の旅立ちの場面の実装を目指します。ドラクエ1なんて若い人は知らないでしょうね(って自分もそんなに年とってないけど)。私もリアルタイムでプレイした世代ではないんですが(私の最初にやったドラクエは4でした)、プレイしたことはあ…

ボールが跳ね返る処理

ボールがウィンドウの端に当たったら跳ね返るようにしてみます。bound_ball.jar ボールの描画 ボールを動かす(2004/9/19)ではボールの位置座標を円の中心にとっていましたが、今回は円を囲む矩形の左上の座標に変更しています。実際、Javaの円の描画は円を…

ボールを動かす

ボールが動くアニメーションを作ります。Javaでアニメーションを作る方法はいくつかありますが、ここでは最も一般的なスレッドを用いて実装します。動きがつくとゲームっぽくなってきます。move_ball.jar アニメーションの仕組み テレビとかでやってるアニメ…

図形を描く

paintComponent()の引数であるGraphicsオブジェクトgを使うと直線、図形、文字、イメージをパネルに描けます。今回は、gを使ってさまざまな図形を描いてみます。draw_figure.jar 座標系 Javaの座標系は数学で使う座標系と異なり、左上が(0,0)になります。x座…

アプリケーションの構成

ここではHello Worldを表示する最も簡単なJavaアプリケーションを書いてみます。私の書くJavaアプリケーションはフレームとメインパネルの二部構成を取っています。今後書くアプリケーションはすべて同じ枠組みですのでここで詳しく解説します。hello_world.…

Javaでゲーム作りますが何か?

Javaを使ったゲームプログラミングについて書いてます。 プログラムはJAR形式で公開しているのでダブルクリックで実行してください。 ソースファイルはJARファイルの中に入っているので解凍してご覧下さい。基本的に全部ソースファイル入ってます。著作権を…

可能な知能(intelligence-as-it-could-be)

可能な生命(life-as-it-could-be)(2004/08/05)の続き。人工生命の定義の「生命」の部分を「知能」に置き換えたらどうなるのか試してみよう。 人工知能とは、自然界の人間に特徴的であるような振舞いを示す人工システムに関する研究である。計算機やその…

可能な生命(life-as-it-could-be)

人工生命(Artificial Life: AL)の定義は創始者のC. Langton*1によると 人工生命とは、自然界の生物システムに特徴的であるような振舞いを示す人工システムに関する研究である。計算機やその他のメディアにおいて生命的な振舞いを合成・総合することを試み…

インテリジェント・ダイナミクス2004―脳・身体性・ロボット・知性の創発―

っていうソニー主催のシンポジウムに行ってきた。参加者はすごく多く会場満員だった。インテリジェント・ダイナミクス(知性力学)っていうのは造語。従来の記号処理人工知能の限界を超え、構成論的脳科学、身体性認知科学、認知発達ロボティクスなどを統合…

今後の予定

はじめての学会発表(2004/3/15)の続き。 非同期更新の考察。非同期ってよくないのかな・・・ちゃんと収束するかとかも調べる。 収束性の保証。収束保証の数学的証明は読んでもよくわからない。数学的に保証はできなくてもより多くのタスク、大規模かつ実用…

はじめての学会発表

に行ってきた。強化学習アルゴリズムの並列化に関するテーマで初の学会発表だった。今回の研究会のテーマは「社会システムにおける知能」とのことだったが、「一般」で発表させてもらった。校内で発表するのとは違いかなり緊張した。コメントとQ&Aのまとめ。…

Soar

コンピュータゲームはAIのキラーアプリ(2003/12/21)で J. Laird: Human-level AI's Killer Application: Interactive Computer Games という人工知能とコンピュータゲームに関する論文を読んだ。そのLaird氏だがなんとSoarアーキテクチャ研究の第一人者で…

エンターテイメントコンピューティング

に行ってみた。今日はエンターテイメントコンピューティングってセッションを聴きに行った。基調講演は中津良平さんによる「エンターテイメント研究の方向」ってお話。人工知能学会誌2004年1月号に「エンターテイメントにおけるAI」って特集があった。その中…