ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Javaの課題丸投げコミュの花火アプレット

  • mixiチェック
  • このエントリーをはてなブックマークに追加
花火を1つにして垂直に打ちあがるようにするよう課題をだされたのですが、教えて頂けないでしょうか。

/* Hanabi.java */

import java.applet.*;
import java.awt.*;

public class Hanabi extends Applet implements Runnable{
Thread thread = null;
int AppletWidth, AppletHeight;
Image WorkImage;
Graphics WorkGraphics;

int sleeptime = 30;
int AngleRange = 50;
int SpeedMax = 90;
int ExplosionSpeed = 50;

int XP, YP;
int HMAX = 30;
int TMAX = 200;
int LEN = 4;
int SIZE = 1;
int COUNT = 30;

int X[][] = new int[HMAX][TMAX];
int Y[][] = new int[HMAX][TMAX];

double Angle[][] = new double [HMAX][TMAX];
double Speed[][] = new double [HMAX][TMAX];
double VOx[][] = new double [HMAX][TMAX];
double VOy[][] = new double [HMAX][TMAX];

int Process[] = new int[HMAX];
int Time[] = new int[HMAX];
float Hue[] = new float[HMAX];
double Rad = Math.PI / 180;


public void init() {
AppletWidth = getSize().width;
AppletHeight = getSize().width;
WorkImage = createImage(AppletWidth, AppletHeight);
WorkGraphics = WorkImage.getGraphics();
WorkGraphics.setColor(Color.black);
WorkGraphics.fillRect(0, 0, AppletWidth, AppletHeight);

AngleRange = Integer.parseInt(getParameter("anglerange"));
SpeedMax = Integer.parseInt(getParameter("speedmax"));
HMAX = Integer.parseInt(getParameter("max"));

if (HMAX > 30)
HMAX = 30;
for (int i = 0; i < HMAX; i++)
Process[i] = 0;

XP = AppletWidth / 2;
YP = AppletHeight;
}


public void start(){
thread = new Thread(this);
thread.start();
}


public void paint(Graphics g){
g.drawImage(WorkImage, 0, 0, this);
}


public void run(){
while(thread != null){
MakingHanabi();
try{
thread.sleep(sleeptime);
}catch(InterruptedException e){
}
repaint();
}
}


public void update(Graphics g){
paint(g);
}


public void stop(){
thread = null;
}


void MakingHanabi(){
for(int n = 0; n < HMAX; n++) {
if (Process[n] == 0) {

Angle[n][0] = 90 - AngleRange/2 + (int)(Math.random()*AngleRange);
Speed[n][0] = SpeedMax + (int)(Math.random()*20);
X[n][0] = AppletWidth / 2;
Y[n][0] = AppletHeight;
VOx[n][0] = Speed[n][0] * Math.cos(Angle[n][0] * Rad);
VOy[n][0] = Speed[n][0] * Math.sin(Angle[n][0] * Rad);
Time[n] = 0;
Process[n] = 1;
Hue[n] = (float)Math.random();
}

else if (Process[n] == 1){
double nowtime = Time[n] / 10.0;
if(VOy[n][0] - 9.8 * nowtime >=10.0) {

WorkGraphics.setColor(Color.black);
WorkGraphics.drawLine(X[n][0], Y[n][0], X[n][0], Y[n][0]);
Time[n] += 1;
nowtime = Time[n] / 10.0;

int xt = (int)(VOx[n][0] * nowtime);
int yt = (int)(VOy[n][0] * nowtime - 9.8/2 * nowtime * nowtime);

X[n][0] = XP + xt;
Y[n][0] = YP - yt;

WorkGraphics.setColor(Color.white);
WorkGraphics.fillRect(X[n][0], Y[n][0], 1, 1);
}

else{
WorkGraphics.setColor(Color.black);
WorkGraphics.drawLine(X[n][0], Y[n][0], X[n][0], Y[n][0]);
Process[n] = 2;
Time[n] = 0;

for (int i = 1; i < TMAX; i++){

Angle[n][i] = (int)(Math.random( ) * 360);
Speed[n][i] = (int)(ExplosionSpeed * Math.random( ));
X[n][i] = X[n][0];
Y[n][i] = Y[n][0];
VOx[n][i] = Speed[n][i] * Math.cos(Angle[n][i] * Rad);
VOy[n][i] = Speed[n][i] * Math.sin(Angle[n][i] * Rad);
}
}
}

else if (Process[n] >= 2){
Time[n] += 1;
for (int w = 1; w < TMAX; w++){

if (Time[n] >= LEN){
double backtime = (Time[n] - LEN) / 10.0;

WorkGraphics.setColor(Color.black);
WorkGraphics.fillRect(X[n][0] + (int)(VOx[n][w] * backtime),

Y[n][0] - (int)(VOy[n][w] * backtime - 9.8/2 * backtime * backtime),
SIZE, SIZE);
}

double nowtime = Time[n] / 10.0;

int xt = (int)(VOx[n][w] * nowtime);
int yt = (int)(VOy[n][w] * nowtime - 9.8/2 * nowtime * nowtime);
X[n][w] = X[n][0] + xt;
Y[n][w] = Y[n][0] - yt;
if (COUNT - Process[n] > LEN){

if (Process[n] < COUNT / 2)

WorkGraphics.setColor(Color.getHSBColor(Hue[n], 1f, 1f));

else
WorkGraphics.setColor(Color.getHSBColor(Hue[n], 1f,
1f * (COUNT - Process[n]) / (COUNT / 2)));
}

else
WorkGraphics.setColor(Color.getHSBColor(Hue[n], 1f, 0));

WorkGraphics.fillRect(X[n][w], Y[n][w], SIZE, SIZE);
}

Process[n]++;
if(Process[n] > COUNT)
Process[n] = 0;
}
}
}
}


/* play.html */

<html>
<body>
<applet code=Hanabi.class width=600 height=500>
<param name="anglerange" value=30>
<param name="speedmax" value=70>
<param name="max" value=10>
</applet>
</body>
</html>

play.htmlの value=10をvalue=1に変えれば表面上は花火1つになるのですが、正規の方法ではないですよね。

コメント(0)

mixiユーザー
ログインしてコメントしよう!

Javaの課題丸投げ 更新情報

Javaの課題丸投げのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。