Javagame
ここで敵キャラを作ります。その名も栗ボー(自作)です。はい!登場。プレイヤーが踏んだら倒せるようにします。ちなみに画像が2つあるのはアニメーションのためです。2つの画像を交互に表示させるとジャンプしてるように見えます。mariolike08.jar Kuribo…
マップをファイルから読み込めるようにMapクラスを拡張します。基本的にRPGのマップの読み込みと同じです。これで自由にステージを作れるようになります。mariolike06.jar マップファイルの構造 マップファイル(map01.dat)の中身は次のようになってます。…
ここでイメージを使ってもっとゲームっぽくしてみます。イメージを使う詳しい解説はイメージを表示するやImageIconを使ったイメージのロードにあるのでそっちを見てください。mariolike05.jar マップにイメージを使う まず使うイメージを用意します。今回は…
マップが大きくなったとき画面がスクロールするようにします。横スクロールも縦スクロールも基本は同じなので横スクロールのみ扱います。RPGのスクロールとほとんど同じなんですがもっといいやり方がわかったので詳しく解説します。mariolike04.jar オフセッ…
マップ(ステージ)を作ります。マップにはブロックがありプレイヤーとぶつかるようにします。mariolike03.jar マップの作成 まずはマップを作ります。基本的にRPG編のお城を建てると同じです。RPGでは上から見たマップ(鳥瞰図)ですが、横スクロールアクシ…
↑キでジャンプできるようにしてきます。ジャンプをかっこよく見せるには重力を実装する必要があります。mariolike02.jar ジャンプ処理 Playerクラスのjump()を見てください。 /** * ジャンプする */ public void jump() { if (onGround) { // 上向きに速度を…
まずは、キー入力でプレイヤーを左右に移かすとこまで作ります。←キーと→キーで移動します。mariolike01.jar 位置と速度 Playerクラスを見てください。横スクロールのアクションゲームでは位置と速度によってプレイヤーを動かします。 // 位置 private doubl…
ニューラルネットによるパターン認識(2005/5/5)を紹介しましたが、これがゲームと何の関係があるんだと思った方が多いと思います。今回はニューラルネットをゲームに応用する方法を簡単なサンプルで解説します。ニューラルネットを持った獲物に追跡者から…
ゲームらしく効果音をつけてみます。今回つけるのは弾の発射音、エイリアンの断末魔、プレイヤーの爆発音です。ここではWAVEの再生(2004/10/3)と同じくAudioClipを使います。AudioClipは同時再生ができないという問題があります。これを解決するにはJava S…
3層パーセプトロンと呼ばれるニューラルネットを用いたパターン認識のサンプルです。ニューラルネットがどういうものかという解説はまた後でしますが、ここではサンプルの遊び方だけ書いておきます。まあゲームではないんですが・・・pattern_recognition.ja…
照準(Line-of-Sight: LOS)法を使った追跡アルゴリズムを実装してみます。環境はタイルベースです。LOS法を使うと獲物に対して最短経路(つまり直線)で移動できます。最短経路を求めるためにブレゼンハムアルゴリズム(2005/4/2)を使います。獲物(青い点…
ブレゼンハム(bresenham)というアルゴリズムを使ってタイル環境で直線を描画するサンプルです。ブレゼンハムはペイントソフトの直線描画にも使われているそうです。ペイントの直線描画と同じようにドラッグすれば直線が引けます。bresenham.jar ブレゼンハ…
もっとも単純な追跡アルゴリズムを実装してみます。環境はタイルワールドで追跡者が獲物を追いかけます。プレイヤーは矢印キーで獲物を操作でき、追跡者はAIが操作します。絶対逃げ切れないけどせいぜいがんばってください(笑)chase_test.jar 追跡処理 追…
エイリアンがビームを撃つようにします。invader06.jar ビームの実装 エイリアンが発射するビームを実装します。まずShotクラスを全部コピーしてください。これで9割方完成です(笑)プレイヤーが発射する弾とエイリアンが発射するビームはほとんど同じです…
プレイヤーが撃った弾がエイリアンにあたるとエイリアンが消滅するようにします。invader05.jar intersects()を用いた衝突判定 エイリアンと弾の衝突判定を実装するわけですが、エイリアンの外周はかなり複雑で弾があたったかどうか判断するのは難しいですね…
エイリアンを実装します。invader04.jarまずはエイリアンの属性と機能をまとめたAlienクラスを作ります。エイリアンの属性として private int speed; // 移動スピード private int x; // プレイヤーの位置(x座標) private int y; // エイリアンの位置(y座…
連続で弾を発射できるようにします。invader03.jarShotを下のように配列で管理すれば複数の弾を作れます。今回は5発の弾を連続で撃てるようにするので弾の数(NUM_SHOT)を5としました。コンストラクタでは5発の弾を作り、配列に入れています。 // 連続発射…
プレイヤーが1発だけ弾を発射できるようにします。invader02.jar 弾の実装 弾1つ1つをオブジェクトとして扱うためShotクラスを用意します。弾もプレイヤーと同じく下のような属性が必要になります。 // 弾のスピード private static final int SPEED = 10; /…
キー入力でプレイヤーが移動するところまで作ります。インベーダーゲームではプレイヤーは左右にしか移動できないので←キーと→キーを使います。invader01.jar プレーヤークラス まずはプレイヤーの属性と機能をまとめたPlayerクラスを作ります。プレイヤーの…
ミニマックス法を改良したα-β法を実装してみます。α-β法は枝刈り(必要のないところは先読みしないこと)をすることによって効率的に先読みを行うアルゴリズムです。ミニマックス法より深く先読みができるためAIを強くすることができます。ゲーム木の解説は…
強化学習というアルゴリズムを用いて迷路の最短経路を学習するプログラムを作ってみます。迷路を抜ける方法は右手法とかいろいろありますが、ここではあえて学習を用います。強化学習は試行錯誤と報酬から学習するアルゴリズムです。ゴール地点には報酬が置…
また盤面評価です。前は石の数で評価していましたが、今回は石の場所で評価します。たとえば、角に石を打つのは有利だとか端に石を打つのが有利だとかをAIが考慮できるようにします。othello09.jar 各場所の価値 オセロを何回かやってると「4端や辺を取ると…
前回までのプログラムはパスを実装していなかったため最後までプレイできませんでした。そこで今回はパスを実装してみます。othello08.jar 石を打てる場所を数える どこにも石が打てなくなった場合にパスをします。というわけでまず石を打てる場所の数を数え…
画面上の●が矢印キーで移動できます。またXキーを押すと●の色がランダムに変化します。key_test.jar キーイベント キーボードが押されたか検出するにはまずKeyListenerインタフェースをimplementsし登録します。これはマウスクリック(2004/10/16)の検出にM…
ようやく盤面評価を導入します。ミニマックス法のゲーム木における一番末端のノード(葉)の評価値にあたります。盤面評価はオセロにとって非常に重要な要素です。othello07.jar 盤面評価 盤面評価とはある2つの盤面があったときどっちが有利かを判定するこ…
コンピュータと対戦できるように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) { ・・・ /…