Javagame
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(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 シーケンサとシンセサイザの関係図 シーケンサは指揮者、シンセサイザは演奏者と考…
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でも付けてみます。すでに作ってあるサウンドエンジン(2005/12/10)を組み込んで音を鳴らすだけなんで簡単です。マップごとに独自のBGMを用意する。マップ切り替え時にBGMを切り替えるあたりがミソです。ちなみにMIDIファイル…
ブロックを積めるようにします。tetris06.jar ブロックの積み上げ まず一番大枠を見てみます。MainPanel.javaのゲームループを見てください。ブロックの落下(2006/5/28)でブロックが落下する処理block.move(Block.DOWN)をゲームループに追加しました。ブロ…