<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="et">
	<id>http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Glife1</id>
	<title>Glife1 - Redigeerimiste ajalugu</title>
	<link rel="self" type="application/atom+xml" href="http://www.lambda.ee/w/index.php?action=history&amp;feed=atom&amp;title=Glife1"/>
	<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Glife1&amp;action=history"/>
	<updated>2026-10-28T19:35:21Z</updated>
	<subtitle>Selle lehekülje redigeerimiste ajalugu</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>http://www.lambda.ee/w/index.php?title=Glife1&amp;diff=8222&amp;oldid=prev</id>
		<title>Tammet – 17. november 2008, kell 14:19</title>
		<link rel="alternate" type="text/html" href="http://www.lambda.ee/w/index.php?title=Glife1&amp;diff=8222&amp;oldid=prev"/>
		<updated>2008-11-17T14:19:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Uus lehekülg&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import javax.swing.*;        &lt;br /&gt;
import java.awt.*;&lt;br /&gt;
import java.awt.event.*;&lt;br /&gt;
/*&lt;br /&gt;
import java.awt.event.MouseEvent;&lt;br /&gt;
import java.awt.event.MouseListener;&lt;br /&gt;
import javax.swing.Timer;&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
public class Glife1 {      &lt;br /&gt;
    &lt;br /&gt;
  &lt;br /&gt;
    // creates a small window with a text and a button in it&lt;br /&gt;
    public static void main(String[] args) {&lt;br /&gt;
      &lt;br /&gt;
        // create new frame &lt;br /&gt;
      &lt;br /&gt;
        JFrame frame = new GLifeFrame();                          &lt;br /&gt;
       &lt;br /&gt;
        // react to window close, pack stuff, show out&lt;br /&gt;
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);&lt;br /&gt;
        frame.setSize(400,400);&lt;br /&gt;
        frame.setLocation(200,200);&lt;br /&gt;
        //frame.pack();  // give a suitable size to window automatically&lt;br /&gt;
        frame.setVisible(true);  // make window visible&lt;br /&gt;
        //panel.updateState(); // refresh panel&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class GLifeFrame extends JFrame {&lt;br /&gt;
  &lt;br /&gt;
    boolean debug=false;&lt;br /&gt;
    &lt;br /&gt;
    GLifeFrame frame;    &lt;br /&gt;
    JPanel toppanel;&lt;br /&gt;
    JPanel buttonpanel;&lt;br /&gt;
    DrawPanel drawpanel;&lt;br /&gt;
    JTextField textfield1, textfield2;&lt;br /&gt;
    JButton mybutton;&lt;br /&gt;
    JButton timerbutton;&lt;br /&gt;
    &lt;br /&gt;
    GLifeFrame() {&lt;br /&gt;
      &lt;br /&gt;
        // create a new window and panels&lt;br /&gt;
              &lt;br /&gt;
        toppanel = new JPanel();&lt;br /&gt;
        buttonpanel = new JPanel();&lt;br /&gt;
        drawpanel = new DrawPanel();&lt;br /&gt;
      &lt;br /&gt;
        // set layouts and colors of panels&lt;br /&gt;
      &lt;br /&gt;
        buttonpanel.setLayout(new FlowLayout());&lt;br /&gt;
        buttonpanel.setBackground(Color.yellow);    &lt;br /&gt;
        toppanel.setLayout(new BorderLayout());&lt;br /&gt;
        toppanel.setBackground(Color.black);      &lt;br /&gt;
        drawpanel.setBackground(Color.red);  &lt;br /&gt;
      &lt;br /&gt;
        // create and add components      &lt;br /&gt;
        &lt;br /&gt;
        // create a label widget with text, put on button panel&lt;br /&gt;
        //JLabel label = new JLabel(&amp;quot;Life&amp;quot;);         &lt;br /&gt;
        //buttonpanel.add(label);                 &lt;br /&gt;
        &lt;br /&gt;
        // Create and add a button to button panel&lt;br /&gt;
        mybutton = new JButton(&amp;quot;Do next step&amp;quot;);&lt;br /&gt;
        buttonpanel.add(mybutton); &lt;br /&gt;
        timerbutton = new JButton(&amp;quot;Start/stop timer&amp;quot;);&lt;br /&gt;
        buttonpanel.add(timerbutton);&lt;br /&gt;
        mybutton.addActionListener(drawpanel);  &lt;br /&gt;
        timerbutton.addActionListener(drawpanel);  &lt;br /&gt;
        drawpanel.addMouseListener(drawpanel);&lt;br /&gt;
        Timer timer = new Timer(1000,drawpanel);&lt;br /&gt;
        timer.start();&lt;br /&gt;
              &lt;br /&gt;
        // add button and drawpanels to toppanel&lt;br /&gt;
        toppanel.add(BorderLayout.NORTH,buttonpanel);&lt;br /&gt;
        //ppanel.add(BorderLayout.WEST,buttonpanel1);&lt;br /&gt;
        //toppanel.add(BorderLayout.SOUTH,buttonpanel2);&lt;br /&gt;
        toppanel.add(BorderLayout.CENTER,drawpanel);&lt;br /&gt;
      &lt;br /&gt;
        // add toppanel to the window	&lt;br /&gt;
        this.getContentPane().add(toppanel);		                    &lt;br /&gt;
                                                               &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
// Here starts the INTERNAL drawing panel class&lt;br /&gt;
&lt;br /&gt;
  class DrawPanel extends JPanel &lt;br /&gt;
     implements ActionListener, MouseListener {            &lt;br /&gt;
          &lt;br /&gt;
    int drawwidth;  &lt;br /&gt;
    int drawheight; &lt;br /&gt;
&lt;br /&gt;
    int cellsize=10;&lt;br /&gt;
      &lt;br /&gt;
    int cellareadim=200; &lt;br /&gt;
    int steps;&lt;br /&gt;
    int[][] cells;&lt;br /&gt;
    int[][] newcells;  &lt;br /&gt;
    int[][] tmpcells; // temporary array pointer, not allocated&lt;br /&gt;
    int count;      &lt;br /&gt;
   &lt;br /&gt;
    // Class constructor function: called when class is created&lt;br /&gt;
      &lt;br /&gt;
    DrawPanel() {&lt;br /&gt;
      init();             &lt;br /&gt;
    }  &lt;br /&gt;
    &lt;br /&gt;
    // mouse stuff&lt;br /&gt;
    &lt;br /&gt;
    public void mousePressed(MouseEvent evt) {&lt;br /&gt;
      int x,y;  &lt;br /&gt;
      int i,j;  &lt;br /&gt;
      if (debug) System.out.print(&amp;quot;mouse button was pressed&amp;quot;); &lt;br /&gt;
      x=evt.getX();&lt;br /&gt;
      y=evt.getY();   &lt;br /&gt;
      if (debug) System.out.println(&amp;quot; coords &amp;quot;+x+&amp;quot; and &amp;quot;+y);  &lt;br /&gt;
      i=(int)(x/cellsize); // x=12 then i=1&lt;br /&gt;
      j=(int)(y/cellsize);  &lt;br /&gt;
      if (i&amp;lt;cellareadim &amp;amp;&amp;amp; j&amp;lt;cellareadim) {  &lt;br /&gt;
        if (cells[i][j]==0)  cells[i][j]=1;&lt;br /&gt;
        else cells[i][j]=0;               &lt;br /&gt;
        //this.repaint();          &lt;br /&gt;
        toppanel.repaint();  &lt;br /&gt;
      }    &lt;br /&gt;
        &lt;br /&gt;
      //Component source = (Component)evt.getSource();&lt;br /&gt;
      //source.repaint();  // Call repaint() on the Component that was clicked.&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public void mouseClicked(MouseEvent evt) { }&lt;br /&gt;
    public void mouseReleased(MouseEvent evt) { }&lt;br /&gt;
    public void mouseEntered(MouseEvent evt) { }&lt;br /&gt;
    public void mouseExited(MouseEvent evt) { }&lt;br /&gt;
    &lt;br /&gt;
    // button stuff&lt;br /&gt;
    &lt;br /&gt;
    public void actionPerformed(ActionEvent e) {&lt;br /&gt;
      if (debug) System.out.println(&amp;quot;button was pressed&amp;quot;);&lt;br /&gt;
      steps++;  &lt;br /&gt;
      if (debug) System.out.println(&amp;quot;Step nr: &amp;quot;+steps);&lt;br /&gt;
      if (debug) printCells(cells);&lt;br /&gt;
      count=countCells(cells);&lt;br /&gt;
      if (count==0) {&lt;br /&gt;
        if (debug) System.out.println(&amp;quot;Everybody dead at step nr: &amp;quot;+steps);&lt;br /&gt;
        return;         &lt;br /&gt;
      }   &lt;br /&gt;
      compNextGen(cells,newcells);      &lt;br /&gt;
      // swap two arrays: cells will become newcells, and vice versa  &lt;br /&gt;
      tmpcells=cells;  &lt;br /&gt;
      cells=newcells;&lt;br /&gt;
      newcells=tmpcells;&lt;br /&gt;
      // just draw the new situation&lt;br /&gt;
      toppanel.repaint();                    &lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
    // &amp;quot;reading&amp;quot; initialisation function&lt;br /&gt;
    &lt;br /&gt;
    void init() {     	&lt;br /&gt;
      if (debug) System.out.println(&amp;quot;Init called&amp;quot;);  &lt;br /&gt;
      cells=new int[cellareadim][cellareadim];&lt;br /&gt;
      newcells=new int[cellareadim][cellareadim];  &lt;br /&gt;
      initCells(cells);  &lt;br /&gt;
    } 	          &lt;br /&gt;
    &lt;br /&gt;
    // Drawing function&lt;br /&gt;
    &lt;br /&gt;
    public void paintComponent(Graphics g) {&lt;br /&gt;
       int i,j;  &lt;br /&gt;
       &lt;br /&gt;
       g.setColor(Color.GREEN);       &lt;br /&gt;
       for(i=0;i&amp;lt;cellareadim;i++) {&lt;br /&gt;
         for(j=0;j&amp;lt;cellareadim;j++) {&lt;br /&gt;
           // if cells[i][j]==1 then draw dot&lt;br /&gt;
           if (cells[i][j]==1) {&lt;br /&gt;
              g.fillRect(i*cellsize,j*cellsize,&lt;br /&gt;
                         cellsize,cellsize);&lt;br /&gt;
           }                &lt;br /&gt;
         } &lt;br /&gt;
       }  &lt;br /&gt;
         &lt;br /&gt;
                                           &lt;br /&gt;
    }      &lt;br /&gt;
  &lt;br /&gt;
  // compute next generation of cells:&lt;br /&gt;
  // old: cells as they were before, will not be changed&lt;br /&gt;
  // next: next generation of cells, written anew&lt;br /&gt;
  &lt;br /&gt;
  void compNextGen(int[][] old,int[][] next) {&lt;br /&gt;
    int row,col;&lt;br /&gt;
    int n;  &lt;br /&gt;
    for(row=0;row&amp;lt;old.length;row++) {&lt;br /&gt;
      for(col=0;col&amp;lt;old[row].length;col++) {&lt;br /&gt;
        // compute nr of neighbours of one cell &lt;br /&gt;
        n=cval(old,row-1,col-1)+cval(old,row-1,col)+&lt;br /&gt;
            cval(old,row-1,col+1);&lt;br /&gt;
        n=n+cval(old,row,col-1)+cval(old,row,col+1);&lt;br /&gt;
        n=n+cval(old,row+1,col-1)+cval(old,row+1,col)+&lt;br /&gt;
            cval(old,row+1,col+1);&lt;br /&gt;
        // compute next gen cell: dead or alive  &lt;br /&gt;
        if (old[row][col]==1 &amp;amp;&amp;amp; n&amp;lt;2) next[row][col]=0;&lt;br /&gt;
        else if (old[row][col]==1 &amp;amp;&amp;amp; n&amp;gt;3) next[row][col]=0;&lt;br /&gt;
        else if (old[row][col]==1 &amp;amp;&amp;amp; (n==2 || n==3)) next[row][col]=1;          &lt;br /&gt;
        else if (old[row][col]==0 &amp;amp;&amp;amp; n==3) next[row][col]=1;&lt;br /&gt;
        else next[row][col]=0;  &lt;br /&gt;
      }          &lt;br /&gt;
    }           &lt;br /&gt;
  }    &lt;br /&gt;
  &lt;br /&gt;
  // allows to calc neigbour values for cells on borders&lt;br /&gt;
  &lt;br /&gt;
  int cval(int[][] cells,int r, int c) {&lt;br /&gt;
    if (r&amp;lt;0 || r&amp;gt;=cells.length) return 0;&lt;br /&gt;
    if (c&amp;lt;0 || c&amp;gt;=cells[0].length) return 0;  &lt;br /&gt;
    return cells[r][c];                  &lt;br /&gt;
  }    &lt;br /&gt;
  &lt;br /&gt;
  // give initial position&lt;br /&gt;
  &lt;br /&gt;
  void initCells(int[][] cells) {&lt;br /&gt;
    initCells2(cells);        &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  void initCells1(int[][] cells) {&lt;br /&gt;
    cells[1][1]=1;&lt;br /&gt;
    cells[3][1]=1;  &lt;br /&gt;
    cells[3][2]=1;&lt;br /&gt;
    cells[4][1]=1;  &lt;br /&gt;
    cells[4][2]=1;  &lt;br /&gt;
    cells[5][1]=1;          &lt;br /&gt;
  }    &lt;br /&gt;
  &lt;br /&gt;
  void initCells2(int[][] cells) {&lt;br /&gt;
    cells[1][1]=1;&lt;br /&gt;
    cells[1][2]=1;&lt;br /&gt;
    cells[1][3]=1;       &lt;br /&gt;
  }  &lt;br /&gt;
  &lt;br /&gt;
  // just print current cells&lt;br /&gt;
  &lt;br /&gt;
  void printCells(int[][] cells) {&lt;br /&gt;
    int row,col;&lt;br /&gt;
    for(row=0;row&amp;lt;cells.length;row++) {&lt;br /&gt;
      for(col=0;col&amp;lt;cells[row].length;col++) {&lt;br /&gt;
        if (cells[row][col]==1) {&lt;br /&gt;
          System.out.print(&amp;quot;*&amp;quot;);&lt;br /&gt;
        } else {&lt;br /&gt;
          System.out.print(&amp;quot; &amp;quot;);  &lt;br /&gt;
        }             &lt;br /&gt;
      }&lt;br /&gt;
      System.out.println();      &lt;br /&gt;
    }              &lt;br /&gt;
  }    &lt;br /&gt;
  &lt;br /&gt;
  // just count current cells&lt;br /&gt;
  &lt;br /&gt;
  int countCells(int[][] cells) {&lt;br /&gt;
    int row,col,count=0;&lt;br /&gt;
    for(row=0;row&amp;lt;cells.length;row++) {&lt;br /&gt;
      for(col=0;col&amp;lt;cells[row].length;col++) {&lt;br /&gt;
        count=count+cells[row][col];        &lt;br /&gt;
      }&lt;br /&gt;
    }  &lt;br /&gt;
    return count;    &lt;br /&gt;
  }     &lt;br /&gt;
    &lt;br /&gt;
  }   &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tammet</name></author>
	</entry>
</feed>