package cc.glsn.v15.life; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridBagConstraints; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.image.BufferedImage; import java.util.HashSet; import java.util.LinkedList; import java.util.Random; import javax.swing.JFrame; import javax.swing.JPanel; /** * * http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life */ public class Life { /** * */ private static final long serialVersionUID = 1L; /** * @param args */ public static void main(String[] args) { new Life(new LifeConfig()); } LifeConfig LC; JFrame Frame; BoardPanel Pan; State StateA; Random R; HashSet RecentStates; boolean ClickSpawn=false; public Life(LifeConfig lc) { LC=lc; R=new Random(); RecentStates=new HashSet(LC.MaxRecentStates,0.5f); StateA=new State(); Frame=new JFrame("Life"); Pan=new BoardPanel(); Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Pan.addMouseListener(new Clicker()); Frame.setContentPane(new JPanel(new java.awt.GridBagLayout())); { GridBagConstraints c=new GridBagConstraints(); c.gridheight=1; c.gridwidth=1; c.fill=GridBagConstraints.NONE; c.insets=new java.awt.Insets(0,0,0,0); c.anchor=GridBagConstraints.WEST; Frame.getContentPane().add(Pan,c); } Frame.pack(); Frame.setVisible(true); LinkedList Born=new LinkedList(); LinkedList Dead=new LinkedList(); while(true) { long A=System.currentTimeMillis(); Born.clear(); Dead.clear(); for(int i=0; i=LC.MaxRecentStates) RecentStates.clear(); } } } for(Point P : Born) { StateA.setCell(P.x,P.y,1); Pan.updateSpot(P.x,P.y,1); } for(Point P : Dead) { StateA.setCell(P.x,P.y,0); Pan.updateSpot(P.x,P.y,0); } Pan.repaint(); long B=System.currentTimeMillis(); //System.out.println(B-A); if (B-A < LC.MinFrameTime) { long S=LC.MinFrameTime-(B-A); try { Thread.sleep(S); } catch (InterruptedException e) { } } } } private LinkedList spawn() { //System.out.println("Spawning!"); LinkedList L=new LinkedList(); for(int i=0; i=LC.XCells) a2-=LC.XCells; for(int b=j-1; b<=j+1; b++) { int b2=b; if (b2<0) b2+=LC.YCells; else if (b2>=LC.YCells) b2-=LC.YCells; if (State==0) NCount[a2][b2]--; else NCount[a2][b2]++; } } NCount[i][j]=NC; } } public String toString() { StringBuilder SB=new StringBuilder((LC.XCells+1)*LC.YCells); for(int j=0; j