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

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

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

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

Q&A

解決済

2回答

1886閲覧

javaで花火作成

satanosaka18419

総合スコア37

Java

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

0グッド

0クリップ

投稿2015/11/21 05:03

編集2015/11/21 06:02

javaアプレットで花火を作ろうと考えています!
調べたところ、サンプルコードはいくつか出てきたのですが、詳しい解説がないため、理解できない部分がありました。

コード public class hanabi2 extends Applet implements Runnable, MouseListener{ int MaxRocketNumber=2; int MaxRocketExplosionEnergy=800; int MaxRocketPatchNumber=80; int MaxRocketPatchLength=80; int Gravity=40; Rocket rocket[]; Thread launcher=null; boolean fg = true; int mx, my; int speed = 50; AudioClip don; public void init() { mx=450;//getSize().width; my= 350;//getSize().height; don = getAudioClip(getDocumentBase(), "don.au"); rocket = new Rocket[MaxRocketNumber]; for (int i = 0; i < MaxRocketNumber; i++) rocket[i] = new Rocket(mx, my, Gravity); addMouseListener(this); } public void start() { if(launcher ==null){ fg = true; launcher =new Thread(this); launcher.start(); } } public void run() { int i,e=0, p=0, l=0; long s =0; int mg = 0; Graphics g =getGraphics(); while (fg == true) { try { launcher.sleep(speed); } catch(InterruptedException x) { } e = (int)(Math.random()*MaxRocketExplosionEnergy*3/4)+ MaxRocketExplosionEnergy / 4 + 1; p = (int)(Math.sqrt(Math.random())*MaxRocketPatchNumber*3/4)+MaxRocketPatchNumber/4+1; l = (int)(Math.random()*MaxRocketPatchLength*3/4)+ MaxRocketPatchLength/4+1; s = (long)(Math.random()*1); for (i=0;i<MaxRocketNumber;++i) { if (rocket[i].sleep && Math.random()*Math.random()* MaxRocketNumber*l<1 && fg){ if(++mg % 7 == 0)repaint(); rocket[i].init(e, p, l, s, my); rocket[i].start(); } rocket[i].show(fg, g, don); } } } class Rocket { public boolean sleep = true,fire=false; private int energy,patch,length; private int wx,hy,x,y,ox,oy,vx[],vy[]; private int t,h,red,blue,green; private int a,b,gravity; private int ly; private int time; private Random random; private AudioClip don; Thread launcher; private double cosA; private double sinA; public Rocket(int a,int b,int g) { wx=a; hy=b; gravity=g; } public void init(int e,int p,int l,long seed, int my) { int i; ly=my-50; double qx,qy,qz,ux,uy,uz; energy=e; patch=p; length=l; h=0; random=new Random(seed); vx =new int[patch]; vy =new int[patch]; red =(int)(random.nextDouble() * 128) + 128; blue =(int)(random.nextDouble() * 128) + 128; green =(int)(random.nextDouble() * 128) + 128; ox=(int)(Math.random()*wx/2)+wx/4; oy=(int)(Math.random()*hy/2)+hy/4; for(i=0;i<patch;++i) { qx=Math.random(); qy=Math.random(); ux=qx-0.5; uy=qy-0.5; if((ux*ux+uy*uy)<0.25){ vx[i]=(int)(qx*energy)-energy/2; vy[i]=(int)(qy*energy*7/8)-energy/8; }else --i; } } public void start() { t=0; sleep=false; } public void line(Graphics g){ if(h<=(ly-oy)){ g.setColor(new Color(0,0,0)); g.drawLine(ox,(ly-h)-3,ox,(ly-h)+5); if (h <(ly-oy)){ g.setColor(new Color(160,180,255)); g.drawLine(ox,(ly-h),ox,(ly-h)-3); } } h=h+4; if(h>=(ly-oy)) fire=true; else fire=false; } public synchronized void show(boolean fg,Graphics g,AudioClip don) { if (!sleep) { if(fg){ line(g); if(fire){ if (t<length*4/5) { int i,c; int tb =6; if(length < tb) tb =length ; if(t == tb) don.play(); double s; Color color; c =(int)(random.nextDouble()*64)-32+red; if (c >= 0 && c <256) red=c; c =(int)(random.nextDouble()*64)-32+blue; if (c >= 0 && c <256) blue=c; c =(int)(random.nextDouble()*64)-32+green; if (c >= 0 && c <256) green=c; color = new Color(red,blue,green); for (i=0;i<patch;++i) { s = (double)t/100; x = (int)(vx[i]*s); y = (int)(vy[i]*s-gravity*s*s); g.setColor(color); g.drawLine(ox+x,oy-y,ox+x,oy-y); if (t>=length/2) { for (int j=0;j<2;++j){ s = (double)((t-length/2)*2+j)/100; x = (int)(vx[i]*s); y = (int)(vy[i]*s-gravity*s*s); g.setColor(new Color(0,0,0)); g.drawLine(ox+x,oy-y,ox+x,oy-y); } } } ++t; } else sleep=true; } } } } }

このプログラムが載っていたサイトはこちらになります。
http://club.pep.ne.jp/~k.sindou/myprog/Firework2/Firework.java

このプログラムのrunメソッドにあるe,p,l,sが何を求めているのかがわかりません。
花火の数や、打ち出し角度などだと思いますが、3/4倍や+1にはどんな理由があるのかも知りたいです。
このコードがわかる方がいましたら教えていただきたいです。
よろしくお願いします!

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

すみません
解決しました!

投稿2015/11/27 01:25

satanosaka18419

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

円の大きさや速度等を計算しているのでしょう。

Rocket#initの内容がわからないとなんとも言えません。

投稿2015/11/21 05:50

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

satanosaka18419

2015/11/21 06:03

Rocketクラスも追加しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問