- 締切済み
java:複数のボールを反射させるプログラム
大学の課題で、3つのボールが各々の動作でバウンドするプログラムを作れというものが出たのですが、 ボールを1つから3つにする方法がわかりません。 というのも配列を用いれば良いそうなのですが、組み込み方が分かりません。 ボールが1つの場合は import java.awt.*; import java.applet.Applet; public class AnimBall extends Applet implements Runnable{ final int WIDTH=500,HEIGHT=200,DP=10; Thread kick; int xp=DP,yp=HEIGHT/2; public void init(){ setBackground(new Color(230,255,200)); } public void start(){ if(kick==null){ kick=new Thread(this); kick.start(); } } public void run(){ int signx=1,signy=1; while(true){ if(xp>=WIDTH-DP) signx =-1; else if(xp<=DP) signx =1; xp += signx*DP ; if(yp >=HEIGHT-DP) signy= -1; else if(yp<=DP) signy =1; yp += signy*DP; repaint(); try{ kick.sleep(150); }catch(InterruptedException e){ } } } public void paint(Graphics g){ g.setColor(Color.blue); g.fillOval(xp-DP,yp-DP,2*DP,2*DP); } public void stop(){ if(kick != null){ kick=null; } } } というプログラムと、 <html> <head><title>Bouncing Ball</title> </head> <body bgcolor="white"> <h1>Wandering Ball</h1> <applet code="AnimBall.class" width=500 height=200> </applet> </body> </html> で動作することは確認済みです。 課題のヒントとして、 (1) int[] stepx=new int[3]; をどこかに組み込む。 (2) ボールの位置はxp[i]、yp[i]、方向指定はsignx[i]、signy[i] ボールの位置の増分を表すために、stepx[i]、stepy[i]を用い、各ボールに独立の動きを与えること。 (3) Math.random()を用いることにより、各ボールの動き(増分)をスタート時点(すなわち、メソッドpublic void init()の中)で乱数で与える事が出来る。 という3点が挙げられています。 なにからなにまで丸投げで申し訳ありませんが 知識のある方お力添えをよろしくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- salsberry
- ベストアンサー率69% (495/711)
ボール位置の増分の変更は後回しにします。 (A) 元のコードでxp, yp, signx, signyを参照しているところを全てxp[i], yp[i], signx[i], signy[i]でそれぞれ置き換えます。 (B) その置き換えた部分を適切に for (int i=0; i<3; i++) { ... } で囲みます。 (C) 元のコードでxp, yp, signx, signyを宣言・初期化している部分も、xp[], yp[], sign[], sign[]の宣言と初期化でそれぞれ置き換えます。 これだけでひとまず3つのボールが動くようになります。 元のコードではDPという変数がボール位置の増分として使われていますが、それとは異なる意味でDPが使われている部分もあります。DPをstepx[i], stepy[i]で置き換えるためにはそれぞれのDPが何の目的で使われているのかを理解してください。