質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

受付中

Java シューティングゲームで複数個の弾を発射する方法

URO
URO

総合スコア2

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

1回答

0評価

1クリップ

486閲覧

投稿2021/11/23 15:39

引用テキスト### 前提・実現したいこと

Javaでシューティングゲームを作成しています。
マウスをクリックすると弾が発射されます。
敵のうち、一体だけは弾が3発当たらないと倒せなくなっています。

弾を5発ずつ発射できるようにしたいのですが、1発しか表示されません。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

java

ソースコード (中略) // 自機の弾の初期設定 m=5; k=0; jiki_tama_x=new int[m]; jiki_tama_y=new int[m]; jiki_tama_flg=new int[m]; for(int j=0;j<m;j++){ jiki_tama_x[j] = jiki_tama_y[j] = -100; jiki_tama_flg[j] = 0; } (中略) /* MouseListener に関連するメソッド */ public void mouseClicked(MouseEvent e) {//マウスがクリックされたら自機の弾をチェック if (jiki_tama_flg[k]==0) { jiki_tama_x[k] = jiki_x + jiki_w/2; jiki_tama_y[k] = 400; jiki_tama_flg[k] = 1; } (中略) /* ActionListener に関連するメソッド */ public void actionPerformed(ActionEvent e) { Dimension d = getSize(); if (e.getSource()==timer) { // 敵機を水平方向に動かす for (int i=0; i<n; i++) { teki_x[i] += teki_u[i]; if (teki_x[i]<0 || teki_x[i]>(d.width-teki_w)) teki_u[i] = -teki_u[i]; } // 自機の弾を動かす if (jiki_tama_flg[k]==1) { jiki_tama_y[k] -= 10; for(int i=0;i<(n-1);i++){//全ての敵機(1回で倒せる)について判定していく if(teki_alive[i]==1&& teki_x[i]<jiki_tama_x[k]&&teki_x[i]+teki_w>jiki_tama_x[k]&& teki_y[i]<jiki_tama_y[k]&&teki_y[i]+teki_h>jiki_tama_y[k]){ teki_alive[i]=0;//敵の生存状態を破壊(0)にする jiki_tama_flg[k] = 0;//次の弾が打てるように待機中(0)にする } } //3回で倒す敵の判定 if(teki_alive[12]==3||teki_alive[12]==2||teki_alive[12]==1&& teki_x[12]<jiki_tama_x[k]&&teki_x[12]+teki_w>jiki_tama_x[k]&& teki_y[12]<jiki_tama_y[k]&&teki_y[12]+teki_h>jiki_tama_y[k]){ teki_alive[12]-=1;//敵の生存状態を一つ減らす jiki_tama_flg[k] = 0;//次の弾が打てるように待機中(0)にする } k+=1; if(k>=5){ k=0; } if (jiki_tama_y[k]<0) jiki_tama_flg[k] = 0; } (中略) } /* 画面描画に関連するメソッド */ public void paintComponent(Graphics g) { super.paintComponent(g); (中略) // 自機の弾の描画 if (jiki_tama_flg[k]==1) { g.setColor(Color.yellow); g.fillOval(jiki_tama_x[k], jiki_tama_y[k], 5, 10); } (中略) } } }

試したこと

弾の描画の部分を

for(int l=0;l<m;l++){
g.setColor(Color.yellow);
g.fillOval(jiki_tama_x[l], jiki_tama_y[l], 5, 10);
}

としてみましたがうまく出来ませんでした。
複数の弾を描画する方法について教えていただきたいです。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

jimbe

2021/11/23 17:37

まさか、全てを含む 1 クラスで作っているのでしょうか。 だとしたら、まずクラス分けを覚えられた方が良いかと思います。 Jiki クラス、Teki クラス、Tama クラス等に分け、それぞれに x,y や w,h、alive, flag 等の属性を入れ、その上でそれぞれの動きや衝突判定のメソッドを加えていくと、もう少し見通し良くなると思います。
URO

2021/11/29 14:10

ありがとうございます。クラス分けを実践してみます。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Emacs

GNU Emacsと拡張性の高い、高性能なテキストエディタです。豊富なライブラリの導入により、統合開発環境やWebブラウザとしても機能させる事が可能です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。