<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">import java.awt.*;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Font;
public class durrettv extends Applet implements Runnable{
   Thread th;
    Font fon1;
    Font fon2;
    Color cl[]=new Color[3];

    int cntdeath;
    int cntinfection;
    int cntrecovery;
    int cntexpand;

    boolean blnRepaintAllFlg;

    long N;


    int colid[][]=new int[701][451];
    int num[]=new int[3];
    int initnum[]=new int[3];
    double rate[][]=new double[3][3];

    int changei;
    int changej;
    int changecol;


  public void start(){
    if(th==null){
      th=new Thread(this);
      th.start();
    }
  }
  public double dou(String dous){
    double dou1;
    dou1 = (Double.valueOf(dous)).doubleValue();
    return dou1;
  }
  public double randm(){
    double rand1m;
    rand1m=Math.random();
    return rand1m;
  }
  public double rog(double aa){
    double rog1;
    rog1=Math.log(aa);
    return rog1;
  }
  public void init(){
      fon1=new Font("Courier",Font.PLAIN,11);
      fon2=new Font("Courier",Font.PLAIN,9);
      //id==0 health people
      //    1 no people
      //    2 sick people
      //    area(0) may expand area(1) (next door of area(0)) at probability rate[0][1] ; expand
      //    area(2) may expand area(0) (next door of area(2)) at probability rate[2][0] ; infection
      //    area(2) may turn to area(1) at probability rate[2][1] ; death
      //    area(2) may turn to area(0) at probability rate[2][2] ; recovery
      if(randm()&lt;0.5){
          cl[0]=new Color(0,140,0);
          cl[1]=Color.white;
          cl[2]=Color.darkGray;
      }else{
          cl[0]=new Color(0,140,0);
          cl[1]=Color.white;
          cl[2]=Color.magenta;
      }

      if(randm()&lt;0.3){
          rate[0][1]=randm()*0.1+0.45;//expand
          rate[2][0]=randm()*0.1+0.85;//infection
          rate[2][1]=randm()*0.1;//death
          rate[2][2]=randm()*0.1;//recovery
      }else{
          if(randm()&lt;0.5){
              rate[0][1]=randm()*0.4+0.1;//expand
              rate[2][0]=randm()*0.4+0.5;//infection
              rate[2][1]=randm()*0.4+0.2;//death
              rate[2][2]=randm()*0.4+0.1;//recovery
          }else{
              rate[0][1]=randm();//expand
              rate[2][0]=randm();//infection
              rate[2][1]=randm();//death
              rate[2][2]=randm();//recovery
          }
      }
//              rate[0][1]=0.5;//expand
//              rate[2][0]=0.9;//infection
//              rate[2][1]=0.05;//death
//              rate[2][2]=0.05;//recovery

  }
  public void run(){
    long cnt;
    int i;
    int j;
    int dirtype;
    boolean blnFlg;
    int id1;
    int id2;
    int nextdoori;
    int nextdoorj;
    int irand;

    N=0;
    for(i=0;i&lt;3;i++){
        num[i]=0;
    }
    for(i=0;i&lt;=700;i++){
        for(j=0;j&lt;=450;j++){
            irand=(int)(randm()*70.0);
            if(irand&lt;=12){
                colid[i][j]=0;
            }else{
                if(irand&lt;69){
                    colid[i][j]=1;
                }else{
                    colid[i][j]=2;
                }
            }

            num[colid[i][j]]++;
        }
    }
    for(i=0;i&lt;3;i++){
        initnum[i]=num[i];
    }
    cntdeath=0;
    cntinfection=0;
    cntrecovery=0;
    cntexpand=0;

    blnRepaintAllFlg=false;
    for(;;){
        if(N&lt;11){
            blnRepaintAllFlg=true;
        }
        if(N%10000==0){
            blnRepaintAllFlg=true;
        }
        repaint();
        blnRepaintAllFlg=false;

        blnFlg=false;
        cnt=0;
        while(blnFlg==false){
            i=(int)(randm()*701.0);
            j=(int)(randm()*451.0);
            if(colid[i][j]==0){
                irand=(int)(randm()*4.0);
                nextdoori=i;
                nextdoorj=j;
                if(irand==0){
                    nextdoori=i+1;
                    if(i==700){
                        nextdoori=699;
                    }
                    nextdoorj=j;
                }
                if(irand==1){
                    nextdoori=i-1;
                    if(i==0){
                        nextdoori=1;
                    }
                    nextdoorj=j;
                }
                if(irand==2){
                    nextdoori=i;
                    nextdoorj=j+1;
                    if(j==450){
                        nextdoorj=449;
                    }
                }
                if(irand==3){
                    nextdoori=i;
                    nextdoorj=j-1;
                    if(j==0){
                        nextdoorj=1;
                    }
                }
                if(colid[nextdoori][nextdoorj]==1){
                    if(randm()&lt;rate[0][1]){
                        blnFlg=true;
                        cntexpand++;
                        changei=nextdoori;
                        changej=nextdoorj;
                        changecol=0;
                        colid[changei][changej]=0;
                        num[0]++;
                        num[1]--;
                        if(num[1]==0){
                            blnRepaintAllFlg=true;
                        }
                    }
                }
            }//0 expand
            if(colid[i][j]==2){
                irand=(int)(randm()*4.0);
                nextdoori=i;
                nextdoorj=j;
                if(irand==0){
                    nextdoori=i+1;
                    if(i==700){
                        nextdoori=699;
                    }
                    nextdoorj=j;
                }
                if(irand==1){
                    nextdoori=i-1;
                    if(i==0){
                        nextdoori=1;
                    }
                    nextdoorj=j;
                }
                if(irand==2){
                    nextdoori=i;
                    nextdoorj=j+1;
                    if(j==450){
                        nextdoorj=449;
                    }
                }
                if(irand==3){
                    nextdoori=i;
                    nextdoorj=j-1;
                    if(j==0){
                        nextdoorj=1;
                    }
                }
                if(colid[nextdoori][nextdoorj]==0){
                    if(randm()&lt;rate[2][0]){
                        blnFlg=true;
                        cntinfection++;
                        changei=nextdoori;
                        changej=nextdoorj;
                        changecol=2;
                        colid[changei][changej]=2;
                        num[2]++;
                        num[0]--;
                        if(num[0]==0){
                            blnRepaintAllFlg=true;
                        }
                    }
                }
            }//2 infection
            if(blnFlg==false &amp;&amp; colid[i][j]==2){//death
                    if(randm()&lt;rate[2][1]){
                        blnFlg=true;
                        cntdeath++;
                        changei=i;
                        changej=j;
                        changecol=1;
                        colid[changei][changej]=1;
                        num[1]++;
                        num[2]--;
                        if(num[2]==0){
                            blnRepaintAllFlg=true;
                        }
                    }
            }//2 death
            if(blnFlg==false &amp;&amp; colid[i][j]==2){//recovery
                    if(randm()&lt;rate[2][2]){
                        blnFlg=true;
                        cntrecovery++;
                        changei=i;
                        changej=j;
                        changecol=0;
                        colid[changei][changej]=0;
                        num[0]++;
                        num[2]--;
                        if(num[2]==0){
                            blnRepaintAllFlg=true;
                        }
                    }
            }//2 recovery
            cnt++;
            if(cnt%1000000==0){
                blnRepaintAllFlg=true;
                repaint();
            }
        }//while

        N++;
    }//;;
  }
  public void update(Graphics g){
    paint(g);
  }
  public void paint(java.awt.Graphics g){
      int i2;
      int j2;
      g.setFont(fon1);
      if(blnRepaintAllFlg==true){
              g.setColor(Color.black);
              g.fillRect(1,1,700,50);

              for(i2=0;i2&lt;3;i2++){
                  g.setColor(cl[i2]);
                  g.fillRect(40,i2*10+10,20,10);
              }//i2
              g.setColor(Color.yellow);
              g.drawString("health",75,20);
              g.drawString("no or dead",75,30);
              g.drawString("virus",75,40);

              g.setColor(Color.white);
              g.drawString("init num",153,10);
              g.drawString("num",226,10);
              for(i2=0;i2&lt;3;i2++){
                  g.drawString(""+initnum[i2],150,i2*10+20);
              }//i2
              for(i2=0;i2&lt;3;i2++){
                  g.drawString(""+num[i2],225,i2*10+20);
              }//i2
              g.drawString("N = "+N,2,50);
              g.drawString("health_ex_r="+(int)(rate[0][1]*100.0)/100.0,300,12);
              g.drawString("infection_r="+(int)(rate[2][0]*100.0)/100.0,300,24);
              g.drawString("death_r="+(int)(rate[2][1]*100.0)/100.0,300,36);
              g.drawString("recovery_r="+(int)(rate[2][2]*100.0)/100.0,300,48);
              g.drawString("expand_n="+cntexpand,450,12);
              g.drawString("infection_n="+cntinfection,450,24);
              g.drawString("death_n="+cntdeath,450,36);
              g.drawString("recovery_n="+cntrecovery,450,48);
              for(i2=0;i2&lt;=700;i2++){
                  for(j2=0;j2&lt;=450;j2++){
                      g.setColor(cl[colid[i2][j2]]);
                      g.drawLine(i2,50+j2,i2,50+j2);
                  }//j
              }//i
      }else{
              g.setColor(Color.black);
              g.fillRect(1,1,700,50);

              for(i2=0;i2&lt;3;i2++){
                  g.setColor(cl[i2]);
                  g.fillRect(40,i2*10+10,20,10);
              }//i2
              g.setColor(Color.yellow);
              g.drawString("health",75,20);
              g.drawString("no or dead",75,30);
              g.drawString("virus",75,40);

              g.setColor(Color.pink);

              g.drawString("init num",153,10);
              g.drawString("num",226,10);
              for(i2=0;i2&lt;3;i2++){
                  g.drawString(""+initnum[i2],150,i2*10+20);
              }//i2
              for(i2=0;i2&lt;3;i2++){
                  g.drawString(""+num[i2],225,i2*10+20);
              }//i2
              g.drawString("N = "+N,2,50);
              g.drawString("health_ex_r="+(int)(rate[0][1]*100.0)/100.0,300,12);
              g.drawString("infection_r="+(int)(rate[2][0]*100.0)/100.0,300,24);
              g.drawString("death_r="+(int)(rate[2][1]*100.0)/100.0,300,36);
              g.drawString("recovery_r="+(int)(rate[2][2]*100.0)/100.0,300,48);
              g.drawString("expand_n="+cntexpand,450,12);
              g.drawString("infection_n="+cntinfection,450,24);
              g.drawString("death_n="+cntdeath,450,36);
              g.drawString("recovery_n="+cntrecovery,450,48);
              g.setColor(cl[changecol]);
              g.drawLine(changei,50+changej,changei,50+changej);
      }

  }
  public void stop(){
    if(th!=null){
      th.stop();
      th=null;
    }
  }
}
</pre></body></html>