Applets
Spelprogrammering
Vad jag jobbar med just nu
Spel
Effektapplets
Diverse länkar
Fire
Jo, det här en sådan där applet som jag har velat göra under en längre tid. Jag har prövat mängder av strategier innan jag slutligen fastnade för den som används i den här appleten.Jag skapade en klass, som ritar ut en fyrkant 6*6 pixlar. I fyrkanten finns det ett gult fält, ett lila fält och ett rött fält. Sedan använder jag möjligheten till transparens i det grafiska objektet av typen Graphics2D, som jag använder till utritningarna. Jag ställer alltså olika transparen för utritning av de olika färgfälten. Eftersom jag ritar ut ganska många objekt, så blandas utritningarna och effekten blir ganska smetig.
Sedan flyttar jag de olika objekten uppåt, tills de når en slutposition, som bestäms individuellt med hjälp av slump.
Klassen Flame
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Graphics2D; import java.util.Random; public class Flame { private int x,y,width,height; private double fy; private int start,stop; private Random rand=new Random(); public Flame(int x) { this.x=x; y=160; start=y; width=6; height=6; stop = Math.abs(rand.nextInt()%90)+100; y = Math.abs(rand.nextInt()%40)+120; fy = y; } public void drawFlame(Graphics2D g) { g.setColor(new Color(255,0,255)); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.0f)); g.fillRect(x,y,width,height); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f)); g.setColor(new Color(255,255,0)); g.fillRect(x,y+1,width,height-2); g.fillRect(x+1,y,width-2,height); g.setColor(new Color(255,0,0)); g.fillRect(x+1,y+2,width-2,height-2); move(); } public void move() { fy-=0.6; y=(int)fy; if(fy<stop) { stop = Math.abs(rand.nextInt()%90)+100; fy=start; } } }
Klassen FlameThrower
import java.applet.Applet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.util.Random; public class FlameThrower extends Applet implements Runnable { private BufferedImage bild; private Graphics2D g2; public static final int WIDTH = 200; private Flame[] flames = new Flame[1000]; private Random rand = new Random(); private Thread thread = null; @Override public void init() { bild = new BufferedImage(WIDTH, WIDTH, BufferedImage.TYPE_INT_ARGB); g2 = bild.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); for (int i = 0; i < flames.length; i++) { int x = Math.abs(rand.nextInt() % 200); flames[i] = new Flame(x); } } public void paint(Graphics g) { g2.setColor(new Color(0, 0, 0)); g2.fillRect(0, 0, WIDTH, WIDTH); for (int i = 0; i < flames.length; i++) { flames[i].drawFlame(g2); } g2.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 48)); g2.setColor(new Color(0, 0, 160)); g2.drawString("Morgan", 10, 164); g2.setColor(new Color(180, 0, 0)); g2.fill3DRect(1, 166, 198, 30, true); g.drawImage(bild, 0, 0, this); } public void update(Graphics page) { paint(page); } public void start() { if (thread == null) { thread = new Thread(this); thread.start(); } } public void stop() { thread = null; } @Override public void run() { while (thread != null) { repaint(); try { Thread.sleep(0); } catch (InterruptedException error) { System.out.println(error); } } } }