package jp.eclipse; import java.util.Random; import android.os.Bundle; import android.os.Handler; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; @SuppressLint("DrawAllocation") public class MainActivity extends Activity implements Runnable{ final static int NumX = 40; final static int NumY = 40; final static int DELAY =100; LifeView lv; Handler hn; boolean [][][] Dtab =new boolean[2][NumY+2][NumX+2]; int curP, nxtP; Random rn=new Random(); Paint p1 =new Paint(); Paint p2 =new Paint(); Paint p3 =new Paint(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); requestWindowFeature(Window.FEATURE_NO_TITLE); LinearLayout LL=new LinearLayout(this); setContentView(LL); lv=new LifeView(this); LL.addView(lv); p1.setColor(Color.YELLOW); p1.setStyle(Paint.Style.FILL ); p2.setColor(Color.RED ); p2.setStyle(Paint.Style.FILL ); p3.setColor(Color.BLACK ); p3.setStyle(Paint.Style.STROKE); initialize(); hn =new Handler(); hn.postDelayed(this,DELAY); } public void initialize(){ curP=0;nxtP=1-curP; int NX=NumX+1;int NY=NumY+1; for(int i=0;i<=NX;i++) Dtab[curP][0][i]=Dtab[curP][NY][i]=Dtab[nxtP][0][i]=Dtab[nxtP][NY][i]=false; for(int i=0;i<=NY;i++) Dtab[curP][i][0]=Dtab[curP][i][NX]=Dtab[nxtP][i][0]=Dtab[nxtP][i][NY]=false; for(int j=1;j<=NumX;j++) for(int i=1;i<=NumY;i++){ Dtab[curP][i][j]=(rn.nextInt(2)==1? true: false); Dtab[nxtP][i][j]=false; } } @Override public void run() { // TODO 自動生成されたメソッド・スタブ game(); lv.invalidate(); hn.postDelayed(this, DELAY); } public void onDestroy(){ super.onDestroy(); hn.removeCallbacks(this); } public void game(){ int bj,aj, bi, ai, count;nxtP=1-curP; for(int j=1;j<=NumX;j++){ bj=j-1; aj=j+1; for(int i=1; i<=NumY; i++){ bi=i -1; ai=i+1; count=0; for(int ii=bi;ii<=ai;ii++)for(int jj=bj;jj<=aj;jj++) if((ii!=i || jj!=j) && (Dtab[curP][ii][jj])) count++; if(Dtab[curP][i][j]){//周りの個数による生き死に  if(count==2 || count==3) Dtab[nxtP][i][j]=true;else Dtab[nxtP][i][j]=false; }else if(count==3) Dtab[nxtP][i][j]=true;else Dtab[nxtP][i][j]=false; } } curP=nxtP; } class LifeView extends View{ public LifeView(Context cn) { super(cn); } public boolean onTouchEvent(MotionEvent e){ initialize(); return true; } protected void onDraw(Canvas cs){ super.onDraw(cs); for(int i=1;i<=NumY;i++){ float y1=i*10;float y2=y1+10; for(int j=1;j<=NumX;j++){ float x1=j*10; float x2=x1+10; if(Dtab[curP][i][j]) cs.drawRect(x1, y1,x2,y2, p2); else cs.drawRect(x1, y1,x2,y2, p1); cs.drawRect(x1, y1,x2,y2, p3); } } } } }