package jp.eclipse; import android.content.*; import android.graphics.*; import android.app.*; import android.os.*; import android.view.*; import android.widget.*; import android.widget.LinearLayout; public class OthelloActivity extends Activity { public int [][] Eval= {{200, 6, 70, 30, 30, 70, 6,200}, { 6, 5, 7, 6, 6, 7, 5, 6}, { 70, 7, 40, 30, 30, 40, 7, 70}, { 30, 6, 30, 1, 1, 30, 6, 30}, { 30, 6, 30, 1, 1, 30, 6, 30}, { 70, 7, 40, 30, 30, 40, 7, 70}, { 6, 5, 7, 6, 6, 7, 5, 6}, {200, 6, 70, 30, 30, 70, 6,200}, }; public int [][] procTable={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}}; public TextView tv1; public dTabView sv; public int selectX, selectY; public boolean gameFirst; public boolean gameStart; public int selX,selY; public int dTab[][]=new int[8][8]; public Paint bBlack =new Paint(Color.BLACK); public Paint bWhite = new Paint(Color.WHITE); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TableLayout LL=new TableLayout(this); LL.setOrientation(LinearLayout.VERTICAL); setContentView(LL); tv1=new TextView(this); tv1.setText("先攻,後攻を選択して開始ボタンをクリック。"); LL.addView(tv1); sv=new dTabView(this); LL.addView(sv); bBlack.setStyle(Paint.Style.FILL); bWhite.setStyle(Paint.Style.FILL); } public class dTabView extends View{ public dTabView(Context context){ super(context); selectX=0; selectY=0; gameFirst=true;gameStart=false; selX=0;selY=0;initDtab(); this.invalidate(); } public void initDtab(){ for(int i=0;i<8;i++)for(int j=0;j<8;j++)dTab[i][j]=0; dTab[3][3]=1; dTab[3][4]=2; dTab[4][3]=2; dTab[4][4]=1; } public int numberCount(int ii,int jj,int TB, int i){ if(dTab[ii][jj]!=0) return -1; int RB; if(TB==1)RB=2;else RB=1; int ip=procTable[i][0];int jp=procTable[i][1]; int IIP=ii+ip; int JJP=jj+jp; if(IIP<0 || IIP>7 || JJP<0 || JJP>7) return -1; if(dTab[IIP][JJP] != RB) return -1; int numStone=1; while(dTab[IIP][JJP]==RB){ IIP=IIP+ip;JJP=JJP+jp; if(IIP<0 || IIP>7 || JJP<0 || JJP>7) return -1; numStone++; } if(dTab[IIP][JJP]==TB) return numStone--; else return -1; } public void replacePlane(int ii,int jj,int TB){ int [][]Temp=new int[8][8]; for(int i=0;i<8;i++)for(int j=0;j<8;j++)Temp[i][j]=dTab[i][j]; for(int i=0;i<8;i++){ int num=numberCount(ii,jj,TB,i);int ip=ii;int jp=jj; if(num>0) { for(int j=0;j<=num;j++){ Temp[ip][jp]=TB; ip+=procTable[i][0];jp+=procTable[i][1]; } } } for(int i=0;i<8;i++)for(int j=0;j<8;j++)dTab[i][j]=Temp[i][j]; } public void computer(){ tv1.setText("わたしの番です"); gameStart=false; int TB=1; if(gameFirst)TB=2;int MaxPr=-1;int MaxI=-1;int MaxJ=-1;int MaxNum=0; for(int ii=0;ii<8;ii++)for(int jj=0;jj<8;jj++){ int numTotal=0; for(int i=0;i<8;i++){ int num=numberCount(ii,jj,TB,i); if(num>0) numTotal+=num; } if(numTotal>0){ boolean flag=false; if(MaxPr<0) flag=true; else if(MaxPr==Eval[ii][jj]){ if(MaxNum0) return false; } } return true; } public void person(int ip,int jp){ gameStart=false; int TB=2; if(gameFirst)TB=1; boolean ableReplace=false; for(int i=0;i<8;i++) if(numberCount(ip,jp,TB,i)>0){ ableReplace=true; break;}; if(ableReplace){ replacePlane(ip,jp, TB); this.invalidate(); try{ Thread.sleep(100); }catch(Exception e){}; computer(); } else Toast.makeText(getApplicationContext(),"そこには打てません。",Toast.LENGTH_LONG).show(); if(judgeEnd()){ int TB1=0;int TB2=0; for(int ii=0;ii<8;ii++)for(int jj=0;jj<8;jj++){ if(dTab[ii][jj]==1)TB1++; else if (dTab[ii][jj]==2)TB2++; } if(TB1==TB2) Toast.makeText(getApplicationContext(),"引き分けです。",Toast.LENGTH_LONG).show(); else if((TB1>TB2&& gameFirst) ||( TB2>TB1 && ! gameFirst)) Toast.makeText(getApplicationContext(), "貴方の勝ちです。黒 = "+TB1+ ", 白 = "+ TB2,Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(), "私の勝ちです。黒 = "+TB1+ ", 白 = "+ TB2,Toast.LENGTH_LONG).show(); } gameStart=true; this.invalidate(); } public boolean onTouchEvent(MotionEvent e){ // 画面タッチのときの処理 if(e.getAction()== MotionEvent.ACTION_DOWN){ // タッチダウンのみ処理 selectX=(int)e.getX();selectY=(int)e.getY(); if(selectY<=22){ if(selectX<80)gameFirst=true; else if(selectX<160)gameFirst=false; else if(selectX<240){ initDtab(); if(!gameFirst) computer(); tv1.setText("あなたの番です"); gameStart=true; } }else if(selectX>=50 && selectX<=450 && selectY>=50 && selectY<=450){ if(gameStart){ selX=(selectX-50)/50;selY=(selectY-50)/50; person(selX,selY); tv1.setText("あなたの番です"); } } } this.invalidate(); return true; } protected void onDraw(Canvas canvas){ Paint p=new Paint(); p.setColor(Color.GRAY); p.setStyle(Paint.Style.STROKE); canvas.drawCircle(10,12,10,p); if(gameFirst) { p.setColor(Color.WHITE); p.setStyle(Paint.Style.FILL); canvas.drawCircle(10,12,2,p); } p.setTextSize(20); p.setStyle(Paint.Style.FILL); canvas.drawText("先攻",30,20, p); p.setColor(Color.GRAY); p.setStyle(Paint.Style.STROKE); canvas.drawCircle(90,12,10,p); if(!gameFirst) { p.setColor(Color.WHITE); p.setStyle(Paint.Style.FILL); canvas.drawCircle(90,12,2,p); } p.setTextSize(20); p.setStyle(Paint.Style.FILL); canvas.drawText("後攻",110,20, p); p.setStyle(Paint.Style.FILL);p.setColor(Color.argb(255,255,255,0)); canvas.drawRoundRect(new RectF(160,2,240,22),5,5,p); p.setStyle(Paint.Style.STROKE);p.setColor(Color.argb(255,255,0,255)); canvas.drawRoundRect(new RectF(160,2,240,22),5,5,p); p.setTextSize(20); p.setStyle(Paint.Style.FILL);p.setColor(Color.argb(255,0,0,126)); canvas.drawText("開始",170,20, p); p.setStyle(Paint.Style.FILL);p.setColor(Color.argb(255,0,127,0)); canvas.drawRect(new Rect(50,50,450,450), p); p.setStyle(Paint.Style.STROKE);p.setColor(Color.argb(255,255,255,255)); p.setStrokeWidth(1); for(int y=100;y<500;y+=50) canvas.drawRect(new Rect(50,y,450,y), p); for(int x=100;x<500;x+=50) canvas.drawRect(new Rect(x,50,x,450), p); p.setStrokeWidth(2); canvas.drawRect(new Rect( 50, 50,450, 50), p); canvas.drawRect(new Rect( 50,450,450,450), p); canvas.drawRect(new Rect( 50, 50, 50,450), p); canvas.drawRect(new Rect(450, 50,450,450), p); //Paint bWhite=new Paint(Color.WHITE); //bWhite.setStyle(Paint.Style.FILL); //Paint bBlack=new Paint(Color.BLACK); //bBlack.setStyle(Paint.Style.FILL); p.setStyle(Paint.Style.FILL); for(int i=0;i<8;i++)for(int j=0;j<8;j++){ if(dTab[i][j]!=0){ if(dTab[i][j]==2){ p.setColor(Color.WHITE); canvas.drawCircle(i*50+75, j*50+75, 18, p); } else{ p.setColor(Color.BLACK); canvas.drawCircle(i*50+75, j*50+75, 20, p); } } } } } }