人工知能に関する断創録

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

Javagame

壁との衝突判定

壁や積まれたブロックと重ならないようにします。tetris04.jar衝突判定は移動するときに行います。というわけでBlockクラスのmove()を見てみます。 /** * dirの方向にブロックを移動 * * @param dir 方向 */ public void move(int dir) { switch (dir) { cas…

ブロックの移動と回転

キー操作でブロックが移動、回転するようにします。スペースキーで回転。NキーでI型ブロックへ変更です。tetris03.jar キー操作 まずはキー操作から見てみます。矢印キーでブロックが移動し、スペースキーか上キーで回転するようにします。そのためにはMainP…

ブロックの作成

ブロックを作ってみます。テトリスには7種類のブロックがありますが、ここでは一番簡単な四角ブロックだけ実装します。tetris02.jar ブロックの実装 ブロックはBlockクラスで定義してます。テトリスのブロックはいろいろな形のものがありますがすべて4x4の大…

フィールドの作成

まずは、テトリスの舞台となるフィールドを作成します。まあ盤面を書くだけだから簡単ですね。tetris01.jar フィールドのデータ構造 フィールドってのは下のことです。テトリスの盤面です。このフィールドはFieldクラスで定義しています。テトリスに正式なル…

マップ間移動

複数のマップを移動できるようにします。王様の部屋の階段を下りるとフィールドマップへ移動します。階段を下るとそこはフィールドマップだったって感じです。1ルームとはずいぶんしけた城ですね(笑)rpg20.jar 移動イベント まずはマップを移動するイベン…

ImageIconを使ったイメージのロード

ImageではなくImageIconを使うと自動的にMediaTrackerが使われるため便利です。ImageIconからImageを取り出すにはgetImage()を使います。ImageIconの利用例です。 /** * イメージをロードする */ private void loadImage() { // プレイヤーのイメージを読み…

自己実行型JARファイル

自己実行型JARファイルを作るとダブルクリックでJavaアプリケーションが実行できます。 自己実行型JARファイル Javaアプリケーションは、javaコマンドにクラスファイル(.class)を渡すことで起動できます。 javac HelloWorld.java // プログラムのコンパイ…

ファイアボール

マウスでクリックした方向にファイアボールを飛ばします。fireball.jar 始点と終点から角度を求める 画面中央の点からマウスでクリックした方向にファイボールを飛ばしたいので画面中央の点から見たマウスの位置を求める必要があります。下の図を見てくださ…

とびらを開ける

今回はとびらです。作り方は宝箱とほとんど同じなので簡単に流します。rpg19.jar とびらイベント とびらはイベントファイルの中に書かれています。こんな感じです。 DOOR,7,10このマップの座標(7,10)にとびらをくっつけるという意味です。これだけ。宝箱より…

サウンドエンジン

WAVEの再生(2004/10/03)で紹介したAudioClipを使えばJavaで音を鳴らせます。しかし、 WAVEファイルの同時再生をしたり、連続再生をしたり、ほかのアプリケーションでBGMを鳴らしていたりすると音が鳴らない場合があります。これらの問題を解決するのがJava…

宝箱

今回は宝箱です。イベントを追加するだけなので簡単です。ただアイテムを実装してないので中身はとれません。rpg18.jar 宝箱イベント 宝箱はキャラクター(町の人)と同じくイベントとして実装します。イベントはevent.datにまとめて書いておき、マップをロ…

流れるメッセージ

メッセージウィンドウをもう少し改造してドラクエのようにメッセージが流れて表示されるようにします。TimerTaskを使って1文字ずつ順に表示するようにすれば意外と簡単にできます。rpg17.jar TimerTaskの起動 描画部でメッセージをcurPos文字まで表示すると…

メッセージの表示

ようやくメッセージを表示するとこまできました。メッセージ表示は文字イメージを適切な順番で並べることで実現します。指定された位置に好きなメッセージを描画できるメッセージエンジンを作ったのでそれと合わせて解説します。rpg16.jar 文字イメージ まず…

メッセージウィンドウの表示

今回はメッセージウィンドウを表示させてみます。ドラクエのように黒い背景に白枠のウィンドウです。ウィンドウが表示されている間のキー処理についても解説します。rpg15.jar メッセージウィンドウの表示 メッセージウィンドウはMessageWindowクラスで実装…

キャラクターイベント

簡単イベントを導入します。キャラクターイベントです。今までは王様や兵士などの追加はMainPanelに直接書き込んでいました。今回は、キャラクターを外部のイベントファイルから読み込んで簡単に追加できるようにしてみます。rpg14.jar イベントファイルの形…

画像をまとめる

今回はキャラクターやマップチップごとに別々のファイルになってた画像を1つのファイルにまとめてしまいます。rpg13.jar 画像をまとめる 今までは勇者(hero.gif)、王様(king.gif)、兵士(soldier.gif)といったようにイメージファイルをばらばらに用意し…

マップの読み込み

ファイルからマップを読み込めるようにしてみます。rpg11.jar マップファイルの構造 マップファイル(map.dat)の中身は次のようになってます。 16 16 1111111111111111 1111111111111111 1111111111111111 1111111111111111 1111000000001111 1111022222201…

王様登場

勇者が1人のさびしい世界でしたがついに王様の登場です。ついでに王様のまわりをぶらぶらしてる護衛である兵士も登場させましょう。今回はこの2人を世界に組み込みます。勇者を表すCharaクラスを流用すれば簡単にキャラクターを増やすことが可能です。オブジ…

スクロール処理2

スクロール処理1(2005/10/10)の続きです。前今回はピクセル単位の移動を実装してドラクエっぽいスクロールを実現します。かくかくした移動ではなくて、滑らかな移動になります。イメージがわかない方はプログラムを実行してみてください。rpg10.jar ゲーム…

ゲームループとキー操作の改良

今まではキーイベントハンドラ keyPressed() に直接移動するコードを書いてました。こうしてしまうとキーを押し続けた場合、「ととととと」と勇者が速く移動してしまいます。そこで、今回はキー操作を改良して「とっ、とっ、とっ」と勇者がゆっくり移動でき…

スクロール処理1

今までのプログラムはなんかドラクエっぽくないですよね。私も作っててどこか違うと違和感を持ちました。そんなわけでドラクエを取り出してプレイしてみたところあることに気がつきました。ドラクエでは移動しても勇者の位置は常に画面の中央なんですね。勇…

オブジェクト化

今まで作ってたプログラムはMainPanelクラスにすべての機能をつぎ込んでいました。今回はこれらの機能を別々のクラスに分割してJavaの特徴であるオブジェクト指向をフル活用していきます。今回はキャラクターを表すCharaクラスとマップを表すMapクラスを作り…

ハイスコアランキングの作り方

CGIへスコア情報を送信する(2005/8/7)でJavaプログラムからCGIへスコア情報を送信できました。また、サーバー上のファイルにスコアを保存する(2005/8/15)で送信されたスコア情報をサーバー上のファイルに保存できるようになりました。今回は最後の手順と…

サーバー上のファイルにスコアを保存する

CGIへスコア情報を送信する(2005/8/7)の続きです。前回はCGIへスコアを送りましたが CGI側でそのスコアを保存していませんでした(ハイスコア出した人ごめんなさいってなってしまいます)。今回は、CGI側でスコアを保存する処理を追加します。CGIはサーバ…

CGIへスコア情報を送信する

(注)サーバは解約したのでスコア登録はできません。ご自身のサーバに置き換えてください。サーバ上にあるCGIに接続し、スコア情報を送信するサンプルプログラムを書いてみます。ここではCGIをPerlという言語で書いています。 ServletやJSPを使うことでJava…

コインブロック

今回は、下から叩くとコインになるブロック を導入します。左が叩く前で右が叩いた後のイメージです。ブロックはコインやアイテムと作り方が違うので注意してください。コインやアイテムはSpriteを拡張していますが、コインブロックはただのブロックと同じ扱…

二段ジャンプ

前に加速アイテムを導入しましたが、今回はもう1つ別のアイテムを追加してみます。じゃーん、このアイテムを取るとなんと二段ジャンプできるようになります。どっから二段ジャンプが出てきたかというとアクトレイザーというアクションゲームで二段ジャンプが…

キー入力改良

地味ですがキー入力の改良です。前回まではジャンプキー(↑キー)を押し続けると、押している間は何回もジャンプしてしまいます。一般的には、ジャンプキーを1回押したら1回だけジャンプする方が自然です。一方、左右への移動はジャンプと違って押し続けてい…

アイテムでパワーアップ

パワーアップアイテムを導入してみます。某ゲームみたいに巨大化するアイテムがよかったんですが少し難しいので加速するアイテムを作ってみました。2つあるのはアニメーションのためです。切り替えると点滅しているように見えます。アイテムの実装はコインの…

コインの実装

コインを実装してプレイヤーが取れるようにします。mariolike07.jar スプライト コインクラスを実装する前にスプライトを作ります。スプライトの定義はよく知らないのですが画面上に出てくるキャラクターとかそんな意味で使っています。さっぱりしておいしい…