2004-09-18
Javaでゲーム作りますが何か?
Javagame | |
Javaを使ったゲームプログラミングについて書いてます。プログラムはJAR形式で公開しているのでダブルクリックで実行してください。ソースファイルはJARファイルの中に入っているので解凍してご覧下さい。基本的に全部ソースファイル入ってます。著作権を主張することはないので自由に使ってください。
リンク切れやリンク先がおかしいなどありましたらコメントもらえると助かります。もうかなり長い間Javaは使っていないため内容に関する質問に私からはお答えできないと思います。もっと人が多いサイトで聞いた方がよいかもしれません。
(注1)ファイルをダウンロードするときは、ファイル名の後のマークをクリックしてください。はてなの仕様のようでファイル名をクリックしてダウンロードしようとするとファイル名が変になります。
(注2)ブログはその他雑多な記事も多いため記事は連続しておらず記事上方にあるナビゲーションはほとんど役に立ちません。このページを起点としてリンク先へ、読んだら戻るといった使い方が楽だと思います。
(注3)リンク先がない項目は面倒くさくなって解説を書いておらず、ソースファイルの提供のみとなっています。ご了承ください。
基礎
- アプリケーションの構成 - Javaゲームアプリケーションの書き方(2004/9/18)
- 自己実行型JARファイル - ダブルクリックで実行できるJavaアプリケーションの作り方(2006/2/24)
- 図形を描く - 簡単な図形を描く方法(2004/9/18)
- ボールを動かす - アニメーションの実装方法(2004/9/19)
- ボールが跳ね返る処理 - ブロック崩しなどで使う(2004/9/20)
- ボールをたくさん作る - オブジェクト指向の基礎(2004/9/22)
- WAVEの再生 - WAVEファイルの再生法(2004/10/3)
- イメージを表示する - イメージのロードと描画(2004/10/9)
- ImageIconを使ったイメージのロード - MediaTrackerが必要ない方法(2006/2/25)
- マウスクリック - マウスクリックで点を描画(2004/10/16)
- キーボードの使い方 - キーボードでボールを移動(2005/1/15)
- アクティブレンダリング - repaint()を使わない再描画、ダブルバッファリング(2006/5/7)
- 正確なFPS - FPSを画面に表示する(2007/4/29)
- アプリケーションをアプレットに変換 - けっこう簡単に変換できる(2006/9/17)
- 半透明描画 - 後ろが透けて見える半透明効果(2006/12/3)
- テキストファイル入出力 - テキストファイルの読み書き(2007/2/4)
- フォントファイルからフォントを読み込む - 外部フォントをロード(2007/4/8)
- フルスクリーンモード - フルスクリーンモードを使う、BufferStrategyの利用(2007/5/2)
部品
- ファイアボール - クリックとドラッグでマウスの位置にファイアボールを発射(2006/1/29)
- テレポート - Tキーでマウスの位置にテレポート(2006/2/4)teleport.jar
- ブレゼンハムアルゴリズム - 直線を描画する方法、直線経路探索でも使う(2005/4/2)
- メタボール - 何か気持ちいいメタボール。Javaでピクセル操作は少し重いかな(2006/4/30)metaball.jar
- 大砲発射 - マウスクリックで弾を発射します。弾は放物線を描いて飛んできます。CTRLを押しながらだと正確にマウスポインタの位置を撃ち抜きます(2006/6/3)cannon.jar
- 矢 - マウスクリックで矢を発射。CTRLを押しながらだとマウスポインタを正確に射抜きます。矢の長さが一定になるように少し工夫してます(2006/6/11)arrow.jar
- スポットライト効果 - ドラクエ1の洞窟とか(2006/12/29)
- 円運動 - くるくる回転(2007/2/4)
- サンダー - マウスボタンの長押しでパワーをためて話すと稲妻が落ちます。もっとかっこいい稲妻にしたいですね(2006/2/4)thunder.jar
- 稲妻 - リアルサンダー(2006/8/18)
- 爆発エフェクト - TimerTaskを使った爆発エフェクト。クリックとドラッグで爆発(2006/1/29)explosion.jar
- くだけちるエフェクト - スライムはくだけちった。アニメーションの速度を遅くすると楽しいかも(2005/12/3)megante.jar
- フェードアウト効果 - だんだん見えなくなる画面効果(2007/5/4)
ブロック崩し
- ラケットを動かす - マウスを使ってラケットを動かす(2007/6/1)
- 跳ね回るボール - ボールが跳ね回る(2007/6/10)
- ラケットでボールを打ち返す - ラケットとボールの当たり判定(2007/7/8)
- ブロックを壊す - ボールとブロックの当たり判定(2007/7/15)
- 反射方向の調整 - ラケットに当たる位置によって反射方向を変える(2007/7/22)
インベーダー
- プレイヤーの移動(2005/2/12)
- 弾の発射(2005/2/18)
- 連続発射(2005/2/20)
- エイリアン襲来(2005/3/9)
- 衝突判定(2005/3/12)
- エイリアンの攻撃(2005/3/21)
- ぴこぴこ音 - AudioClipを使って効果音を鳴らします(2005/5/7)
- 爆発エフェクトの追加 - 発色弾で作成した爆発エフェクトを追加(2005/8/14)invader08.jar
- BGMで臨場感を出す - BGMを追加します。TAM Music Factoryさんからお借りしました。けっこう雰囲気のあるBGMです。(2005/9/3)invader09.jar
テトリス
- フィールドの作成 - テトリスのフィールドを作成(2006/3/19)
- ブロックの作成 - 四角いブロックの導入(2006/3/25)
- ブロックの移動と回転 - 矢印キーで移動。スペースキーで回転。NキーでI型ブロックへ変更(2006/4/22)
- 壁との衝突判定 - ブロックが壁をすりぬけない(2006/4/23)
- ブロックの落下 - ゲームループでブロック落下(2006/5/28)
- ブロックの積み上げ - ブロックを積めるようにする(2006/4/23)
- 横にそろったブロックの消去 - 一列そろったらブロック消去(2006/6/20)
- 全ブロック導入 - 7種類のブロッククラスを追加(2006/6/25)tetris08.jar
- カラフルブロック - 各ブロックに色をつける(2006/7/8)tetris09.jar
- スコア表示 - スコア機能を追加(2006/7/16)tetris10.jar
- ゲームオーバー - ブロックが積み上がったらゲームオーバー(2006/8/5)tetris11.jar
- 次のブロック - 次のブロックを表示(2006/12/9)tetris12.jar
- テトリス - 最低限の機能だけ実装。矢印で移動、スペースで回転(2005/8/20)tetris.jar
マリオ風アクション
- 左右移動 - 左右へ移動する(2005/6/6)
- ジャンプ - 上キーでジャンプする(2005/6/13)
- ブロックとの衝突 - ブロックにぶつかる(2005/6/16)
- マップスクロール - 大きなマップ対応(2005/6/24)
- イメージを使う - キャラアニメーションも追加(2005/6/24)
- マップを読み込む - やっとステージが作れる(2005/6/24)
- コインの実装 - スプライトの当たり判定。ちゃり〜ん(2005/6/27)
- 栗ボー登場 - ふめば倒せる敵キャラ導入(2005/6/27)
- アイテムでパワーアップ - 加速アイテム導入(2005/7/3)
- キー入力改良 - キーを長押ししても1回だけジャンプ(2005/7/3)
- 二段ジャンプ - 二段ジャンプできるアイテム導入(2005/7/3)
- コインブロック - 黄色い?ブロック(2005/7/8)
- アイテムブロック - アイテムが出てくるブロック(2005/07/8)mariolike13.jar
RPG
- RPGを作ろう - はじめに(2004/9/21)
- 勇者登場 - キャラクターの描画(2004/9/21)
- お城を建てる - 簡単なマップ描画(2004/9/21)
- 勇者は第一歩を踏み出した - キーボードでキャラクター移動(2004/9/21)
- 勇者は壁にぶつかった - マップとの当たり判定(2004/9/23)
- 勇者は足踏みした - キャラクターアニメーション(2004/9/24)
- 勇者はがにまたが直った - 移動方向に応じてイメージを変える(2004/9/25)
- オブジェクト化 - 今までのところをまとめると(2005/10/10)
- スクロール処理1 - タイルベーススクロール(2005/10/10)
- ゲームループとキー操作の改良 - ゲームループの導入(2005/10/15)
- スクロール処理2 - ドラクエ風のスクロール処理(2005/10/22)
- マップの読み込み - マップをファイルから読み込む(2005/10/29)
- 王様登場 - キャラクターの追加(2005/10/22)
- 画像をまとめる - 画像を1つのファイルにまとめる(2005/10/29)
- キャラクターイベント - キャラクターの追加が簡単に(2005/11/3)
- メッセージウィンドウの表示 - ウィンドウだけ表示(2005/11/3)
- メッセージの表示 - ページ送りもできます(2005/11/3)
- 流れるメッセージ - ドラクエ風メッセージ処理(2005/11/3)
- 宝箱 - 宝箱の実装。中身は取れません(2005/11/19)
- とびらを開ける - とびらの実装(2005/12/3)
- マップ間移動 - マップの切り替え(2006/3/5)
- BGMを鳴らす - 音が鳴ると雰囲気変わる(2006/5/5)
- 効果音を鳴らす - 効果音は重要です(2006/11/5)
- デバッグ情報表示 - 画面にデバッグ情報を表示します(2006/11/12)
- ここまでの整理 - 区切りがいいので細かい修正(2006/11/19)
- マップエディタ - マップ&イベントエディタの作成(2006/11/26)
- バイナリマップ - マップエディタで作成したバイナリ形式マップを読み込みます(2006/12/10)rpg25.jar
- ドラクエクローン - みんなには内緒だよ(2005/2/5)
マップエディタ
- ひながた - ドラッグでチップを塗りつぶす(2005/12/17)map_editor01.jar
- パレットの追加 - マップチップパレットの追加(2005/12/17)map_editor02.jar
- マップチップの選択と描画 - パレットからマップチップを選択して描画(2005/12/17)map_editor03.jar
- マップの新規作成 - 新規作成メニューを追加。スクロールバーも装備(2005/12/23)map_editor04.jar
- マップを保存 - マップを1マス1バイトのバイナリ形式で保存(2005/12/25)map_editor05.jar
- マップを開く - 保存したマップを開く(2005/12/25)map_editor06.jar
オセロ
- オセロ盤を作る(2004/12/17)
- マウスで石を打つ(2004/12/17)
- 石が打てる場所か判定する(2004/12/17)
- はさんだ石をひっくり返す(2004/12/18)
- 勝敗を判定する(2004/12/18)
- AIの実装/ミニマックス法(2004/12/26)
- 盤面評価/石の数(2005/1/5)
- パスを実装する(2005/1/16)
- 盤面評価/石の場所(2005/1/21)
- AIの実装/α-β法(2005/2/5)
ミニゲーム
- Nibble - 制限時間内に蛙を食べまくれ(2004/12/15)nibble.jar
人工知能
- ライフゲーム - 人生ゲームじゃないです(2004/12/25)
- 単純な追跡アルゴリズム - 単純に近づくだけ(2005/3/27)
- LOS追跡 - ブレゼンハムアルゴリズムをもとに最短経路で追跡(2005/4/9)
- パターン移動 - 移動経路を設定する(2005/4/10)pattern_movement.jar
- ブレッドクラム経路探索 - パンくずをたどって追跡する(2005/4/16)bread_crumb.jar
- ウォールトレーシング - 左手法を使ってダンジョンを巡回する(2005/4/16)wall_tracing.jar
- A* (A-star) 経路探索 - 障害物があっても大丈夫(2005/4/23)a_star.jar
- A* (A-star) 経路探索(地形コストつき) - バリアはコストが高いので迂回する(2005/4/23)a_star2.jar
- A* (A-star) 経路探索(迷路) - 最短経路で迷路をぬける(2005/4/23)a_star3.jar
- 有限状態機械(蟻の例) - 蟻は内部状態に応じて行動を変化させる(2005/4/24)ant_fsm.jar
- ニューラルネットによるパターン認識 - 3層パーセプトロン・誤差逆伝播法を使ったパターン認識(2005/5/5)
- ニューラルネットによる逃避行動の学習 - ニューラルネットを使って逃げ方を覚える(2005/5/14)
- 強化学習で迷路の最短経路を見つける - 強化学習で迷路は基本タスク(2005/1/21)
- 強化学習で倒立振子を制御する - 掃除の時間にやるやつ(2005/1/21)pole_balancing.jar
- 強化学習でアクロバットを制御する - 足を振り上げる鉄棒選手(2005/2/17)acrobat.jar
- 強化学習で車の山登りタスクを解く - 山を登る方法を学習する(2005/5/1)mountain_car.jar
- 倒立振子制御の教示学習 - 強化学習に教示を導入。教示モードでは左右キーで台車を操作できます。エージェントにお手本を見せましょう。Modeボタンを押してエージェントの自律モードに切り替えると前よりずっとうまくできるようになってます。赤ちゃんエージェントにお手本を見せよう。(2005/9/11)pole_balance_teaching.jar
- 強化学習でPongを学習する - 学習を通じてPongがうまくできるようになる(2005/12/10)pong_learning.jar
人工無脳
- 人工無脳まとめ - 人工無脳のまとめ(2007/1/20)
- 人工無脳の雛形 - ユーザ入力文を処理して反応を返す(2007/1/20)chatbot01.jar
- 辞書からランダムに返答 - 辞書の会話文をランダムに選んで返す(2007/3/30)
ネットワーク
- CGIへスコア情報を送信する - JavaとCGIを連携する(2005/8/7)
- サーバー上のファイルにスコアを保存する - スコアを登録する(2005/8/15)
- ハイスコアランキングの作り方 - 登録されたスコアからハイスコアランキングを作る(2005/9/4)
Java Sound
- 基本的な方法 - Javaで音を鳴らす基本的な方法(2006/11/3)
- ClipでWAVE再生 - Clipを使ってWAVEファイルを再生(2006/11/5)
- シーケンサとシンセサイザ - MIDIファイルの再生(2006/11/5)
- サウンドエンジン - Java Sound APIを使ったMidiとWaveの再生(2005/12/10)
Java3D
(注)Java3Dがインストールされている必要があります。起動が遅い場合があります。
- Java3Dの雛形 - Java3Dアプリケーションの基本形(2006/7/28)sample3d.jar
- 座標軸 - X軸、Y軸、Z軸の描画(2006/7/28)axis.jar
- 床 - XZ平面に広がる床(2006/7/28)floor.jar
- 回転キューブ - 回転するカラーキューブ(2005/12/30)rotating_cube.jar
- 点を打つ - 点を描画(2006/1/1)point.jar
- 神々のトライフォース - 某ゲームのあれ(2006/1/1)triforce.jar
- 水晶球 - 赤い絨毯と水晶球(2006/1/4)crystal_ball.jar
- Sphere in the Box - 箱の中で跳ね回るボール(2006/1/28)sphere_in_the_box.jar
- ボールの自由落下 - 自由落下してバウンドするボール(2006/2/4)falling_ball.jar
関連書籍
- Killer Game Programming In Java - 現在出版されているJavaゲームプログラミングの本では最強です。PDFの草稿、ソースコードは全部、http://fivedots.coe.psu.ac.th/~ad/jg/で公開されてます。今はこれで勉強してます。
- Developing Games in Java - Java Gamesでも推薦されているBrackeenさんの本です。Javaでゲームを作るための必須技術が解説されています。マリオ風アクションゲームの作成は必見です。Javaゲームの基礎的な内容だけではなく、マルチプレーヤー、Java3D、衝突検出、最短経路探索、人工知能など応用技術も幅広く解説されています。海外の本は充実度がものすごいです。ソースコードとフレームワークはhttp://www.brackeen.com/javagamebook/で公開されてます。
- Javaゲームプログラミング アルゴリズムとフレームワーク - 表紙はあれですが内容は濃いです。入門編と実践編に分かれています。入門編はJavaでゲームを作るためのフレームワークが解説されています。実践編は落ちモノパズル、シューティング、戦略シミュレーション、ネット対戦ゲームが解説されています。実践編、特に戦略シミュレーションの作り方が面白かったです。
- Javaゲームプログラミング―ゲームで引き出すオブジェクト指向言語のパワー - Java学習の初期に読んだ本です。8年も前の本でJavaのバージョンも1.0ベースなのでいまでも通用するのかは少し疑問です。まあAPIは変わってもゲームのアルゴリズムを理解するようにすれば参考になるかもしれません。後半のゲーム集は魅力的です。
- やさしくわかるJava3D - Java3D本の中では一番いいかも。ただこの本以外である程度Java3Dの基礎を勉強してないとつらいような気がします。3Dジャンプアクションの作り方が面白いです。
- Java3Dグラフィックス―Web上で動く3DCG 基礎から立体アニメーションまで - こっちは上の本と違ってゲームプログラミングでないけどJava3Dの基礎がきっちり学べます。上の本と合わせて読むといいかも。Java3Dフレームワークは彩画3Dで公開されてます。
リンク集
- Javaで RPGを作ろう! - JavaでRPGを作る方法が解説されています。スクロール処理の実装方法が参考になりました。
- 安永ノリカズの公開ゲーム制作 - 魔法使いの街を舞台にした生活シミュレーションゲームをアプレット形式で公開しています。人工生命手法を用いた社会構造テストプログラムがとても興味深いです。またJavaの入門者を対象に愛のJava256本ノックという面白い試みもしています。
- WAKU WAKU JAVA - 画像効果を利用したすばらしいアプレットが多数あります。稲妻(2006/8/18)はここのソースコードを参考にさせてもらいました。他のもソース公開してくれないかな・・・
- Javaゲームはじめました。 - Javaでさまざまなゲームを作られてます。シミュレーションゲームの作り方講座が楽しい。今度作るとき参考にさせてほしいと思います。向こうからもリンク貼っていただいたようです。ありがとうございます。
- Javaで Action Game作ってみました!! - Javaで魔界村っぽいアクションゲームを作られてます。ここのサンプルと違って最後まで遊べます。Javaでここまでできるとわかって感動しました。
トラックバック - http://d.hatena.ne.jp/aidiary/20040918/1251373370
リンク元
- 255 http://d.hatena.ne.jp/seikenn/20080506/1210088946
- 255 http://javagame.skr.jp/
- 255 http://javagame.skr.jp/index.php?FrontPage
- 255 http://search.yahoo.co.jp/search?p=Java ゲーム&rs=3&tid=top_ga1_sa&ei=UTF-8&fr=top_ga1_sa
- 255 http://search.yahoo.co.jp/search?p=java+ゲーム+自己実行&ei=UTF-8&fr=top_of3_sa&x=wrt
- 255 http://vipprog.net/wiki/want_to_make_game.html
- 255 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&source=hp&q=java+ゲーム タイトル画面&lr=&btnG=Google+検索
- 255 http://www.google.co.jp/search?hl=ja&q=java+ゲーム star型 ソースコード&aq=f&aqi=&aql=&oq=&gs_rfai=
- 255 http://www.google.co.jp/search?hl=ja&source=hp&q=java+ゲーム&aq=0r&aqi=g-r10&aql=&oq=java+げ&gs_rfai=
- 255 http://www.google.co.jp/search?q=Javaでゲーム作りま&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
今更ながら、バグ報告をしても宜しいでしょうか?
sound_engine2のMidiEngine.java内、counter変数は初期化後ずっと0のままなので、92行目をのcounterをmidiMap.size()に置き換えるべきかと思います。
sound_engineの方は最大値チェック自体が無いですね。
「92行目をのcounterを」は間違いです。正しくは「92行目のcounterを」です。
私も修正を加えてる内にミスをしてしまいました。
半年くらい前からプログラムを始めたものなのですが
こちらのページのプログラムをいつも参考にさせていただいております。
いろいろなゲームを作られており、すごく面白いです。
友人が、ソースコードジェネレータという
一つのソースコードから他の言語のソースコードを自動で
作成してくれるツールを作成しました。
(JavaScript→Flash ActionScript
DOJA → iPhone 等に変換)
恐らく、変換できるのは携帯向けの言語のソースに変換
するものがほとんどであると思われます。
もし、興味があれば、是非見に来てください。
感想のひとつでもあれば喜んでくれると思いますので
どうかお願いします。
友人のブログ
http://d.hatena.ne.jp/noji_50/20100614/
私の作成しているブログの方で、使い方の補足説明を
させていただいております。
http://d.hatena.ne.jp/zefa999/20100708