ポンクソフト

パワーアップ・複数種類の敵 - Javaでシューティングゲームを作ろう

前ページ Javaでシューティングゲームを作ろう TOP 次ページ

目次

  1. Javaでシューティングゲームを作ろう
  2. 自機の左右移動
  3. 弾発射・はみ出しチェック
  4. 敵登場・仮想画面
  5. 当たり判定(敵と弾)・スコア
  6. 当たり判定(自機と敵)・シーン切り替え
  7. クラス化
  8. 継承・Vectorによるキャラ管理・サウンド
  9. パワーアップ・複数種類の敵
  10. ペンギンシューティング

今回の題材

プレイしてみる
一式ダウンロード

ソースの解説

さらにプログラムを拡張して行きます。
まず複数の敵を出す方法ですが、これも継承を使います。前回はスーパークラスChrを継承してTekiクラスを作りましたが、今回はTekiクラスをさらに継承してそれぞれ独自の動きを持つ敵のクラスを作ります(ZakoA,ZakoB,ZakoC,Bossクラス)。
パワーアップは、Chrクラスを継承してItemクラスを作ります。

Jikiクラス

前回からの変更点として、
があります。
private int power;      // パワー
パワーアップ用管理用の変数です。最初は0で、パワーアップアイテムを取ると1増え、敵と当たると1減ります。
private int muteki;      // 無敵時間
無敵時間です。耐久力のある敵(ボス)に当たると一気にパワー0になってしまうのを防ぐため、敵に当たると一定時間無敵になるようにしています。
// 弾の速度配列
private static int tv[][] = {
  {0, -8},
  {-7, -7, 7, -7},
  {-7, -7, 0, -8, 7, -7},
  {-7, -7, 0, -8, 7, -7, -7, 7, 7, 7},
};
弾の軌道を管理するための配列です。
上から順にパワー0,1,2,3、左から順に弾1のx座標,弾1のy座標,弾2のx座標,弾2のy座標…となっています。
for (int i = 0; i < tv[power].length; i += 2) {
  app.addList(new Tama(x + w / 2, y, tv[power][i], tv[power][i + 1]));
}
上記弾の速度配列にしたがって、パワーアップした分だけ弾を発射しています。
// パワーアップ
void upPower() {
  if (power >= tv.length - 1) {
    // 最大パワーまで達していたらボーナス追加
    app.addScore(1000);
  } else {
    power++;
  }
}
パワーアップ変数を1増加させている部分です。自機がアイテムに衝突したときに呼ばれます。最大パワーまで達していたらそれ以上のパワーアップはせずにスコアを1000点増加させています。

Itemクラス

自機のパワーアップアイテムのクラスです。ほぼ前回の敵クラスと同じ動きをします。

Tekiクラス

敵の基本クラスです。それぞれの敵クラスに共通する部分を抽出して記述してあります。

ZakoAクラス

Tekiクラスを継承して独自の敵を作り出しています。まっすぐ落ちてくるだけの敵です。

ZakoBクラス

画面左右の端で反射しながら降りてくる敵です。
private int vx;      // 横方向の速度
この変数によって反射を実現しています。
if (x < 0) vx = 8;
else if (x > app.getw() - w) vx = -8;
画面端に着いたら速度を反転している部分です。

ZakoCクラス

自機を追尾する敵です。
private double vx, vy;      // 速度
敵の速度です。敵と自機の位置関係によって増減します。
if (app.getJikix() > x) {
  vx += tv;
  if (vx > 8) vx = 8;
} else if (app.getJikix() < x) {
  vx -= tv;
  if (vx < -8) vx = -8;
}
if (app.getJikiy() > y) {
  vy += tv;
  if (vy > 8) vy = 8;
} else if (app.getJikiy() < y) {
  vy -= tv;
  if (vy < -8) vy = -8;
}
自機のx座標が敵のx座標よりも大きいとき、速度をプラスして敵が徐々に自機に向かうようにします。同じく自機のx座標が敵のx座標よりも小さいとき、速度をマイナスして敵が徐々に自機に向かうようにします。同じ処理をy座標についても繰り返しています。

Bossクラス

ボスです。画面端で反射しながら動きます。
private int power;      // 耐久力
ボスには耐久力をつけ、何発か弾を当てないと死なないようにします。
// 死亡
void dead() {
  power--;
  if (power < 0) super.dead();
}
ボスが弾に当たったときに呼ばれます。すぐ死ぬのではなく、まずパワーを減らしてそれが0になったときに初めて死ぬようにします。
前ページ Javaでシューティングゲームを作ろう TOP 次ページ
このエントリーをはてなブックマークに追加 そっか0

このページに関するコメントをどうぞ

お名前:


n3
Shooting6.javaには当たり判定がどこにも記述されていないのですがよろしければどこに、どういうふうに記述したらよいのか教えてもらえないでしょうか
2017/02/01 21:16

dead ライジング
javaってなに?
2017/01/24 14:29

すみませんが…
tflagの初期がfalseの状態で!tflagがfalseにあたるのがわかりません。
2017/01/05 11:35

missiy
ゲーム制作始めますか
2016/11/04 20:32

カシラ
敵画像はどこからダウンロードするんですか?
2016/08/27 16:55

通りすがりの旅人
どのページに飛べば作れますかね
((((;゚Д゚)))))))
2016/05/11 20:25


私も頑張る
2015/11/23 13:36

おっぱりー
敵が全方位からわくにはどうすればいいですか?
2014/10/23 15:28

naga3
ちょう頑張ります!
2013/11/08 13:08

学生
ありがとうございます。
すごく勉強になります。
お仕事頑張ってください。
2013/11/05 22:06

残りを読む »