c Simple Conway's game of life c FORTRAN77 version c use the makefile to build c jrs 10.21.2002 parameter (N=80) dimension cell(80,80), cell0(80,80) real x,y,xb,yb,q c initialize using built-in random number function do 200 I=1, N do 100 J=1, N if(rand().gt.0.5) then cell0(I,J)=1 else cell0(I,J)=0 end if 100 continue 200 continue c set up a graphics device dev=g2_open_vd() write (6,*) dev dev1=g2_open_X11(400.0, 400.0) write (6,*) dev1 call g2_attach(dev, dev1) c evolution step first loop is time loop do 900 IT=0, 100 c set up correct boundary conditions (that means YOU) c I will update the interior cells... do 400 I=2, N-1 do 300 J=2, N-1 IS=cell0(I-1,J+1)+cell0(I, J+1)+cell0(I+1, J+1) IS=IS+cell0(I-1,J)+cell(I+1,J) IS=IS+cell0(I-1,J-1)+cell0(I, J-1)+cell0(I+1, J-1) if((cell0(I,J).eq.0).and.(IS.eq.3)) then cell(I,J)=1 else if ((cell0(I,J).eq.1).and.((IS.eq.2).or.(IS.eq.3)))then cell(I,J)=1 else cell(I,J)=0 end if 300 continue 400 continue c then for example... top do 1000 J=2, N-1 IS=cell0(J-1,N-1)+cell0(J,N-1)+cell0(J+1,N-1) IS=IS+cell0(J-1,N)+cell0(J+1,N) if((cell0(J,N).eq.0).and.(IS.eq.3)) then cell(J,N)=1 else if ((cell0(J,N).eq.1).and.((IS.eq.2).or.(IS.eq.3)))then cell(J,N)=1 else cell(J,N)=0 end if 1000 continue c ... the left wall do 2000 J=2, N-1 IS=cell0(2,J-1)+cell0(2, J)+cell0(2, J+1) IS=IS+cell0(1,J-1)+cell0(1, J+1) if((cell0(1,J).eq.0).and.(IS.eq.3)) then cell(1,J)=1 else if ((cell0(1,J).eq.1).and.((IS.eq.2).or.(IS.eq.3)))then cell(1,J)=1 else cell(1,J)=0 end if 2000 continue c right wall do 3000 J=2, N-1 IS=cell0(N-1,J-1)+cell0(N-1, J)+cell0(N-1, J+1) IS=IS+cell0(N,J-1)+cell0(N, J+1) if((cell0(N,J).eq.0).and.(IS.eq.3)) then cell(N,J)=1 else if ((cell0(N,J).eq.1).and.((IS.eq.2).or.(IS.eq.3)))then cell(N,J)=1 else cell(N,J)=0 end if 3000 continue c then for example... top do 4000 J=2, N-1 IS=cell0(J-1,2)+cell0(J,2)+cell0(J+1,2) IS=IS+cell0(J-1,1)+cell0(J+1,1) if((cell0(J,1).eq.0).and.(IS.eq.3)) then cell(J,1)=1 else if ((cell0(J,1).eq.1).and.((IS.eq.2).or.(IS.eq.3)))then cell(J,1)=1 else cell(J,1)=0 end if 4000 continue c we SHOULD update the four corners, bugger the corners! c drawing portion do 600 I=1, N do 500 J=1, N x=5.0*float(I)-5.0 y=5.0*float(J)-5.0 xb=x+5.0 yb=y+5.0 call g2_pen(dev1, cell(I,J)) call g2_filled_rectangle(dev1, x,y,xb,yb) 500 continue 600 continue c resetting portion do 800 I=1, N do 700 J=1, N cell0(I,J)=cell(I,J) 700 continue 800 continue 900 continue c time loop ends, now wait for key input read (*,*) q call g2_close(dev) stop end