Anmeldung



- search -
Edit...

JSPWiki v2.2.28
 
Water Applet. Source Code

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 float[size];
    }
  };
  float[] v;
  Surface[] b;
  float[] s;

  public WaveApplet() {
  }

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

    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[0].h[i60;
    }
    for (int i = 0; i < size; i++) {
      b[1].h[i= b[0].h[i];
    }
    
    for (int i = 0; i < size; i++) {
      s[i(floatMath.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++) {
      s[i]+=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 = b[swap];
      swap=(swap+1)%2;
      Surface b1 = b[swap];
      float a = 0.05F;
      float b = 1F;
      float d = 0.003F;
      float g = 1F;
        
      for (int i = 0; i < size-1; i++) {

        if (b0.h[i]<0.1 && b0.h[i+1]<0.1) {
          v[i0;
          continue;
        }
        // 1. Kräfte berechnen: Drücke               
        float p0 = b0.h[i]+s[i];
        float pr = b0.h[i+1]+s[i+1];
        
        // 2. Geschwindigkeiten aus Kräften bilden
        float dv = (p0-pr)*a; 
        
        // 3. Geschwindigkeiten aufsummieren
        v[i+= dv;

        // 4. Dämpfung
        v[i-= v[i]*d;
      }          

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

      for (int i = 0; i < size-1; i++) {
        float dh = v[i]*b;
        b1.h[i  ]-=dh; 
        b1.h[i+1]+=dh;
      }          
    }
  }

  public void paint(Graphics g) {
    Graphics vg = image.getGraphics();
    vg.setColor(Color.BLACK);
    vg.fillRect(00, width, height);
    int wd = width/size;
    Surface buffa = b[swap];
    for (int i = 1; i < buffa.h.length-1; i++) {
      int y = (int) (buffa.h[i]+s[i]);
      int y1 = (ints[i];
      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, 00, width, height, this);
  }

}




letzte Änderung 21-Mai-2007 21:11:31 MESZ von unknown.



Earthdawn (R) ist ein eingetragenes Warenzeichen der FASA Corporation. Barsaive (TM) ist ein Warenzeichen der FASA Corporation. Copyright (c) 2015 by FASA Corporation. Copyright der deutschen Ausgabe (c) 2015 by Ulisses Spiele GmbH, Waldems. www.ulisses-spiele.de. Diese Webseite unterliegt keiner Abnahme oder Genehmigung durch Ulisses Spiele oder FASA.