解答は
- ホスト名: earth.mlab.im.dendai.ac.jp
- ディレクトリ: /home/submit/JavaBasic/winter/[学籍番号]
に提出しなさい。クラスファイル (〜.class) は提出しなくてよい。 提出には gFTP 等の ftp ソフトを用いること。
単位取得最低限のためには、問題1の提出が必須。 問題2の提出は任意 (中上級者向け課題) 。
プログラムの一部または全部をコピーしたものが提出された場合、 不正行為として扱う。
例題のボールのアニメーションを拡張し、 2つのボールが移動するアニメーションを考える。 ボールとボールの間に線を描くようにすると ラインアートのようなアニメーションが可能である。
ソースは以下のとおり。 (LineArt.java)
import java.awt.*;
import javax.swing.*;
class LineArt {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("Line Art");
frame.setSize(640, 480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyPanel panel = new MyPanel();
frame.getContentPane().add(panel);
frame.setVisible(true);
}
}
class MyPanel extends JPanel implements Runnable {
private Ball ball1;
private Ball ball2;
public MyPanel() {
setBackground(Color.white);
ball1 = new Ball(100,100,10,5,0,0,630,450);
ball2 = new Ball(200,100,5,10,0,0,630,450);
Thread refresh = new Thread(this);
refresh.start();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
ball1.forward();
ball2.forward();
g.setColor(Color.red);
g.drawLine(ball1.getX(), ball1.getY(), ball2.getX(), ball2.getY());
}
public void run() {
while(true) {
repaint();
try {
Thread.sleep(20);
}
catch(Exception e) {
}
}
}
}
class Ball {
private int x;
private int y;
private int vx;
private int vy;
private int left;
private int right;
private int top;
private int bottom;
public Ball(int x, int y, int vx, int vy, int l, int t, int r, int b) {
this.x = x;
this.y = y;
this.vx = vx;
this.vy = vy;
right = r;
left = l;
top = t;
bottom = b;
}
public void forward() {
x = x + vx;
y = y + vy;
if (x < left || x > right) {
vx = -vx;
}
if (y < top || y > bottom) {
vy = -vy;
}
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
このプログラムを参考に独自の工夫をし、 アニメーションを行うプログラムを作成しなさい。 例えば、次のようなアニメーションが考えられる。
サンプルの実行方法:
$ java -jar ファイル名.jar
mainメソッドを書くクラスは BallArt とし、 ファイル名は BallArt.java とする。
今回の 参考資料 を学んだ上で、 マウスやキーボード入力でアニメーション表示に面白い作用を与えるような、 対話的アニメーション作品を作りなさい。
独自のアイディアに基づく作品とすること。 例えば、以下のようなサンプルが考えられる。
ソースコードのファイル名は InteractiveArt.java とする。 画像データなどがあればそれらを含めて、 構成するすべてのファイルを提出しなさい。 なお、ソースコードを複数のファイルに分割して開発する場合 (Java のプログラムはクラスごとに独立したファイルに分割できる)、 すべてのソースコードのファイルを提出すること。