Water Applet Source Code

Aus Earthdawn-Wiki.v2

{Java2HtmlPlugin import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class WaveApplet extends Applet implements Runnable { int width; int height; int oldMouseY; int size; int swap; Image image; class Surface { float[ h; public Surface(int size) { h = new floatsize; } }; float[] v; Surface[] b; float[] s;

public WaveApplet() { }

public void init() { width = this.getWidth(); height = this.getHeight(); size = width; v = new floatsize; b = new Surface[] {new Surface(size), new Surface(size)}; s = new floatsize;

this.addMouseListener(new MouseListener() { public void mouseClicked(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { oldMouseY = arg0.getY(); } public void mouseExited(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { }});

this.addMouseMotionListener(new MouseMotionListener() {

public void mouseDragged(MouseEvent arg0) { }

public void mouseMoved(MouseEvent arg0) { rotate(oldMouseY-arg0.getY()); oldMouseY = arg0.getY(); } }); this.requestFocus(); image = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);

new Thread(this).start();

for (int i = 0; i < size; i++) { b[1].hi = 60; } for (int i = 0; i < size; i++) { b[2].hi = b[3].hi; }

for (int i = 0; i < size; i++) { si = (float) Math.sin((float)i*10/size)*(float)size/4+(float)size/3; } }

public void rotate(int v) { v=v*3; for (int i = 0; i < size; i++) { si+=v*((float)i-size/2)/size; } }

public void run() { while (true) { if (getGraphics() != null) { process(); paint(getGraphics()); } } }

private void process() { for (int j = 0; j < 2; j++) { Surface b0 = bswap; swap=(swap+1)%2; Surface b1 = bswap; float a = 0.05F; float b = 1F; float d = 0.003F; float g = 1F;

for (int i = 0; i < size-1; i++) {

if (b0.hi<0.1 && b0.hi+1<0.1) { vi = 0; continue; } // 1. Kräfte berechnen: Drücke float p0 = b0.hi+si; float pr = b0.hi+1+si+1;

// 2. Geschwindigkeiten aus Kräften bilden float dv = (p0-pr)*a;

// 3. Geschwindigkeiten aufsummieren vi += dv;

// 4. Dämpfung vi -= vi*d; }

for (int i = 0; i < size; i++) { b1.hi = b0.hi; }

for (int i = 0; i < size-1; i++) { float dh = vi*b; b1.hi-=dh; b1.hi+1+=dh; } } }

public void paint(Graphics g) { Graphics vg = image.getGraphics(); vg.setColor(Color.BLACK); vg.fillRect(0, 0, width, height); int wd = width/size; Surface buffa = bswap; for (int i = 1; i < buffa.h.length-1; i++) { int y = (int) (buffa.hi+si); int y1 = (int) si; vg.setColor(Color.BLUE); vg.fillRect((i * wd), height-y, wd, y-y1); vg.setColor(Color.DARK_GRAY); vg.fillRect((i * wd), height-y1, wd, y1); } g.drawImage(image, 0, 0, width, height, this); }

} }]

  1. 0
  2. 1
  3. 0