//package ratchets; import java.awt.Button; import java.awt.Choice; import java.awt.Event; import java.awt.Graphics; import java.awt.Color; import java.awt.Image; import java.awt.Label; import java.awt.TextField; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.util.Random; public class SimulationProgram extends java.applet.Applet implements Runnable, ItemListener{ Image offscreenBuffer = null; Graphics offscreenGraphics; Button b1 = new Button("one step"); Button b2 = new Button("Start"); TextField tf = new TextField(" "); Label lb = new Label("Step"); TextField tf2 = new TextField(" "); Label lb2 = new Label("minute(s)"); Choice c1; static int constant_x = 214; static int constant_y = 70; static int scale = 5; static int memberNumber =1; static int switchType = 4; static int switchFlag = 0; static int rate2 = 215288; static int rate1 = 100; static int rate3 = 1; static int rate4 = 1; static double rate_before = 0.9958848424; static double rate_after = 0.9836406985; static double RATE_NORMAL = 0.1111; int[][][] field; int[][] memberArray; static Random random = new Random(System.currentTimeMillis()); Thread thread; static boolean flag1 = false; static int speed = 2; static int totalCounter = 0; public void init(){ offscreenBuffer = createImage(constant_x*scale+35, constant_y*scale+35); offscreenGraphics = offscreenBuffer.getGraphics(); field = new int [switchType][constant_x][constant_y]; for(int i=0;i=2) offscreenGraphics.setColor(Color.blue); if(switchFlag==1 && field[switchFlag][i][p]==1) offscreenGraphics.setColor(new Color(254,0,0));; offscreenGraphics.fillRect((i*scale)+x,(p*scale)+y, scale, scale); } } offscreenGraphics.setColor(Color.yellow); for(int i=0;i=2){ if(rand>=rate_before*100) flag_move=true; } else if(field[switchFlag][memberArray[i][0]][memberArray[i][1]]==1){ if(rand>=rate_after*100) flag_move=true; } else if(field[switchFlag][memberArray[i][0]][memberArray[i][1]]==-1){ if(rand>=rate_after*100) flag_move=true; }else { flag_move = true; } if(flag_move){ final int[] array = new int[9]; int sum=0; if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]-1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]-1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]-1]==0) { sum += rate3; }else sum+=rate4;array[0]=sum; if( field[switchFlag][memberArray[i][0]][memberArray[i][1]-1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]][memberArray[i][1]-1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]][memberArray[i][1]-1]==0) { sum += rate3; }else sum+=rate4;array[1]=sum; if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]-1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]-1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]-1]==0) { sum += rate3; }else sum+=rate4;array[2]=sum; if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]]==0) { sum += rate3; }else sum+=rate4;array[3]=sum; if(field[switchFlag][memberArray[i][0]][memberArray[i][1]]>=2) { sum += 0;//rate2; }else if(field[switchFlag][memberArray[i][0]][memberArray[i][1]]==1) { sum += 0;//rate1; }else if(field[switchFlag][memberArray[i][0]][memberArray[i][1]]==0) { sum += rate3; }else ;//sum++; array[4]=sum; if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]]==0) { sum += rate3; }else sum+=rate4;array[5]=sum; if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]+1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]+1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]-1][memberArray[i][1]+1]==0) { sum += rate3; }else sum+=rate4;array[6]=sum; if( field[switchFlag][memberArray[i][0]][memberArray[i][1]+1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]][memberArray[i][1]+1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]][memberArray[i][1]+1]==0) { sum += rate3; }else sum+=rate4;array[7]=sum; if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]+1]>=2) { sum += rate2; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]+1]==1) { sum += rate1; }else if( field[switchFlag][memberArray[i][0]+1][memberArray[i][1]+1]==0) { sum += rate3; }else sum+=rate4;array[8]=sum; final int kazu = random.nextInt(sum)+1; int action = 0; for(int j=1;j<9;j++) if(array[j-1]=kazu) action = j; switch(action){ case 0: memberArray[i][0]--;memberArray[i][1]--; break; case 1: memberArray[i][1]--; break; case 2: memberArray[i][0]++;memberArray[i][1]--; break; case 3: memberArray[i][0]--; break; case 4: break; case 5: memberArray[i][0]++; break; case 6: memberArray[i][0]--;memberArray[i][1]++; break; case 7: memberArray[i][1]++; break; case 8: memberArray[i][0]++;memberArray[i][1]++; break; } if(memberArray[i][0]>constant_x-2) memberArray[i][0]=constant_x-2; if(memberArray[i][0]<1) memberArray[i][0]=1; if(memberArray[i][1]>constant_y-2) memberArray[i][1]=constant_y-2; if(memberArray[i][1]<1) memberArray[i][1]=1; } if((before_x!=memberArray[i][0] || before_y!=memberArray[i][1]) && field[switchFlag][before_x][before_y]>1) field[switchFlag][before_x][before_y]=1; if((before_x==memberArray[i][0] || before_y==memberArray[i][1]) && field[switchFlag][before_x][before_y] > 2) field[switchFlag][before_x][before_y]--; } } public void make_ratchets(final int n){ int i=0;int p=5; while(i<10*10){ if(p<0) p=5; for(int q=p;q>=0;q--){ field[n][i][constant_y/2-q] = 2; field[n][i][constant_y/2+q] = 2; } p--; i++; } } public void make_line(){ final int tatehaba = 4; final int yokohaba = 200; for(int i=0;i