人工知能に関する断創録

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

Javagame

Javaでゲーム作りますが何か?のGitHubリポジトリをEclipseで読み込む

10年前のプロジェクトなのに、相変わらず本ブログでのアクセス数が最も多いのがこれ。 Javaでゲーム作りますが何か? - 人工知能に関する断創録 以前から、ブログ上ではjarファイルしか配布しておらず、解凍しないとソースコードが見られないのは不便という…

反射方向の調整

ブロックを壊す(2007/7/15)を何度かプレイしてみるとわかりますが毎回同じパターンが再現されます。これはラケットの反射方向が毎回同じだからです。これだとプレイヤーがボールの動きをまったく制御できないのでゲーム性がないです。そんなわけでボールが…

ブロックを壊す

今回はブロック崩しのキモであるブロックを導入します。そしてボールがブロックに当たったときにブロックが消えるようにします。これでようやく遊べるレベルになりますね。breakout04.jar ブロックを並べる ブロック1つ1つはBlockクラスのオブジェクトとなり…

ラケットでボールを打ち返す

ボールとラケットの当たり判定処理を入れてボールがラケットに当たったとき跳ね返るようにします。ブロックがなくてボールをただ打ち返して対戦するゲームは「ぽん」っていいますが、これは1人用の「ぽん」に相当しますね。ブロック崩しではなくぽんを作るの…

跳ね回るボール

ブロックを壊すボールを実装します。ボールは壁に当たったら跳ね返ります。実行するとわかりますがラケットに当てなくてもボールが跳ね返るようになっています。次回はボールとラケットの当たり判定処理を入れてボールがラケットに当たったとき跳ね返るよう…

ラケットを動かす

マウスの動きに合わせてラケットが左右に動くプログラムから作ります。breakout01.jar マウス座標の取得 マウスの動きに反応するプログラムを作るにはMouseMotionListenerを使います。下はMainPanel.javaの抜粋です。 public class MainPanel extends JPanel…

フェードアウト効果

だんだん透明になって見えなくなる画面効果をフェードアウトと言います(逆にだんだん見えてくるのはフェードイン)。フェードアウトは半透明描画で解説したアルファ値をだんだん小さくすることで実現できます。remuoru.jarちなみにレムオルはドラクエ3の姿…

フルスクリーンモード

Javaでもフルスクリーンモードのゲーム作れます。ここでは、フルスクリーンモードの簡単なサンプルを書いてみます。またBufferStrategyという技術も使ってるので合わせて解説します。Javaでフルスクリーンがサポートされたのは1.4からなのでそれ以前のJavaが…

正確なFPS

正確なFPS(Frame Per Second)を計算して画面に表示します。正確なFPSの実現方法は、『Killer Game Programming in Java』を参考にしました。fps.jar ゲームループの構造 ゲームループは下のような構造になっています。詳しくは、アクティブレンダリング(2…

フォントファイルからフォントを読み込む

フォントファイルからフォントを読み込む方法です。ゲームにフォントファイルを含めて一緒に配布したい場合に使います。ちなみにフォントとは文字の形のことです。またテキストにアンチエイリアシングをかける方法もご紹介します。ただフォントファイルはサ…

辞書からランダムに返答

ファイルから会話文を読み込んで、その中からランダムに返答する人工無脳を作ります。ここでは会話文のことを辞書(dictionary)と呼びます。chatbot02.jarChatbotクラスから見ていきます。dicというArrayListオブジェクトを作ってます。ここに会話文を放り…

テキストファイル入出力

テキストファイルからデータを読み込んだり、書き込んだりする基本的な方法です。ファイルに保存してあるイベントデータを読み込んだり、ゲームのスコアをファイルに記録したりする場合に使います。サンプルは読み込みボタンを押すとtest.txtからデータを読…

円運動

ある点を中心に回転するオブジェクトです。円の方程式を用いると実現できます。circular_motion.jar 円運動 上の図を見てください。水色の物体が中心 (cx,cy)、半径rの円上をくるくる回転してると考えます。このとき、中心と物体のなす角度をθ(シータ)、物…

人工無脳まとめ

人工無脳について全体的なことをまとめています。 人工無脳 人工無脳は会話プログラムのことです。チャットのように文章を入力して会話します。人工知能の究極の目的の1つは人間のように会話するプログラムですが、人工知能ほどシリアスなものではないため人…

スポットライト効果

スポットライト効果です。ドラクエ1の洞窟内でたいまつ使ったイメージです。いろいろ使えそうです。 スポットライト マウスをドラッグするとスポットライトが移動します。何かの気配がする・・・ドキドキ。背景画像はぐったりにゃんこのホームページさん(リ…

半透明描画

後ろが透けて見える効果を出す方法です。さあ何を透けさせようか。 半透明描画 transparent.jar赤い丸はべた塗りで青い四角形は透けています。以下、描画部分のコードです。 public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D …

マップエディタ

今作っているRPGに合わせてマップエディタを作ってみます。マップチップの数を増やしたり、イベントも簡単に登録できるように改造していく予定です。マップチップはすべてJ-JSoftさんのサイトからMACKさんの素材をお借りしています。すばらしいマップチップ…

ここまでの整理

きりがよいのでここらで整理します。いくつか変更点をまとめておきます。rpg24.jar パネルサイズ変更 パネルのサイズを少し大きくしました。それに合わせてメッセージウィンドウの表示位置も調整しています。 // パネルサイズ public static final int WIDTH…

デバッグ情報表示

デバッグ情報が表示できるようにします。rpg23.jar デバッグモード デバッグモード(DEBUG_MODE=true)にするとデバッグ情報が画面に描画されるようにします。他に表示しておきたい情報があれば追加できます。MainPanel.javaに以下を追加します。 // デバッ…

シーケンサとシンセサイザー

Java Sound APIを用いてMIDIデータ(MIDIシーケンスと呼びます)を鳴らす手法です。シーケンサとシンセサイザを用います。曲はTAM MUSIC FACTORYさんから。midi_engine.jar シーケンサとシンセサイザの関係図 シーケンサは指揮者、シンセサイザは演奏者と考…

ClipでWAVE再生

Java Sound APIを使ってWAVEファイルを再生する方法です。ここでは、Clipというクラスを使ってみます。ゲームで使う短い効果音なんかはClipで十分です。wave_engine.jar WAVEファイルのロード あらかじめWAVEファイルの内容をすべてClipに読み込んでおく方法…

効果音を鳴らす

宝箱を空けたらガチャ、ドアを開けたらギ〜、階段を下りたらザッザッザッと鳴るようにしてみます。基本的にサウンドエンジン(2005/12/10)のWaveEngineを使うので簡単です。例によって効果音はザ・マッチメイカァズさんからお借りしています。rpg22.jar サ…

基本的な方法

Javaで音を鳴らすための基本的な方法です。音の再生、停止、ループくらいはできます。もっと細かく制御したい場合はJava Sound APIを使う必要があります。 Java Appletで音を鳴らす もっとも古い方法。play()を呼び出すたびにファイルをロードして再生します…

アプリケーションをアプレットに変換

本サイトのアプリケーションをアプレットに変換する方法です。アプレットはWebブラウザ上で実行することができます。ただし、アプレットでは使えない機能もあるので下の手法で全部のアプリケーションが変換できるとは限りません。 アプリケーションをアプレ…

稲妻

リアルな稲妻です。マウスでクリックするとぴっしゃーんと落雷します。下に誰もいないのを確認してから撃ってください。サンダーと比べると雲泥の差がありますね(笑)稲妻は点滅するので何度も繰り返し注視しないでください。ポケモン事件を覚えてる方もい…

横にそろったブロックの消去

一列そろったらブロック消去する処理を実装します。これがないとテトリスにならないですね。tetris07.jarまず呼び出し側を見てみます。MainPanelのゲームループrun()です。 /** * ゲームループ */ public void run() { while (true) { // ブロックを下方向へ…

ブロックの落下

ブロックが自動落下するように修正します。テトリスは落ちゲーなのでブロックが落ちないことには始まりません。tetris05.jarブロックが落下するためにはゲームループを実装します。ゲームループが回るたびにブロックが下に移動するように変更すればいいです…

アクティブレンダリング

Javaでゲームを作るときの基礎技術としてアクティブレンダリングを取り上げます。repaint()を使わずに自前で描画処理(レンダリング)を行う定石です。repaint()はいつ描画するか自分で決められませんがアクティブレンダリングを使うと自分で決められます。a…

BGMを鳴らす

無音の世界で寂しかったのでBGMでも付けてみます。すでに作ってあるサウンドエンジン(2005/12/10)を組み込んで音を鳴らすだけなんで簡単です。マップごとに独自のBGMを用意する。マップ切り替え時にBGMを切り替えるあたりがミソです。ちなみにMIDIファイル…

ブロックの積み上げ

ブロックを積めるようにします。tetris06.jar ブロックの積み上げ まず一番大枠を見てみます。MainPanel.javaのゲームループを見てください。ブロックの落下(2006/5/28)でブロックが落下する処理block.move(Block.DOWN)をゲームループに追加しました。ブロ…