import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.applet.*; import java.util.*; public class VirtualCondensation extends Applet implements Runnable,MouseListener,MouseMotionListener { int width,height; int[] pixels; MemoryImageSource mis; Image background; Image image; Image offscreen; Graphics og; Thread thread; int[][] canal; int x0,y0; int radius; public void init() { width = getSize().width; height = getSize().height; background = getImage(getDocumentBase(),"background.jpg") .getScaledInstance(width,height,Image.SCALE_DEFAULT); try { PixelGrabber pg = new PixelGrabber( getImage(getDocumentBase(),"mist.jpg") .getScaledInstance(width,height,Image.SCALE_DEFAULT), 0,0,width,height,true); pg.grabPixels(); pixels = (int[])pg.getPixels(); } catch (InterruptedException e) { e.printStackTrace(); pixels = new int[width*height]; } mis = new MemoryImageSource(width,height,pixels,0,width); mis.setAnimated(true); image = createImage(mis); canal = new int[height][width]; for (int y=0;y0; boolean turned = false; int drop = canal[y][x]; for (;;) { if (y==height-1) { break; } else if (canal[y+1][x]>=drop) { y++; drop = canal[y][x]; turned = false; } else if (forward) { if (x=drop) { x++; drop = canal[y][x]; } else if (!turned) { turned = true; forward = false; } else { break; } } else { if (x>0 && canal[y][x-1]>=drop) { x--; drop = canal[y][x]; } else if (!turned) { turned = true; forward = true; } else { break; } } } if (Math.abs(random.nextInt())%2550) { if (dn*dn