/* Copyright (C) 2003 Pehr Johansson */ import java.awt.Graphics; import java.awt.Font; import java.awt.Color; import java.awt.Image; import java.awt.image.MemoryImageSource; import java.util.Random; import java.awt.image.IndexColorModel; public class Fire extends java.applet.Applet { public void paint(Graphics g) { long startTime = System.currentTimeMillis(); System.out.println("Start: " + startTime); Image img; Random rnd = new Random(); setBackground(Color.black); int w = 640; int h = 480; int pix[] = new int[(w * h) + w*7]; int index = 0; for( int i=0; i < w; i++) { pix[(w*h)-w-h+i] = rnd.nextInt(50)+200; } /* Start main loop */ for(int loop=0; loop < 250000; loop++) { for( int i=0; i < w; i++) { pix[(w*h)-w-h+i] = (255 << 24) | ( rnd.nextInt(150)+100 << 16 ) | 0; } int loop2=0; while( loop2++ < h*w ) { int red = ((((pix[loop2+w-1] & 0x00ff0000) >> 16) + ((pix[loop2+w] & 0x00ff0000) >> 16) + ((pix[loop2+w+1] & 0x00ff0000) >> 16) + ((pix[loop2+w*2] & 0x00ff0000) >> 16)) >> 2); if( red > 0 ) red--; pix[loop2] = (255 << 24) | ( red << 16 ) | 0; } img = createImage(new MemoryImageSource(w, h, pix, 0, w)); g.drawImage(img,0,0,this); } long endTime = System.currentTimeMillis(); System.out.println("End: " + endTime); System.out.println("TotalTime: " + (endTime-startTime) + "ms (" + (endTime-startTime)/1000 + "s)"); System.out.println("FPS: " + 25/((endTime-startTime)/1000)); } }