精華區beta java 關於我們 聯絡資訊
在學校學了很久的ANDROID 我想寫一個五子棋的遊戲, 不過寫到一半發現無法判斷五子連在一起 請問我大概是哪裏有錯該如何修正? 謝謝指教 package com.five; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.util.Log; public class Five extends Activity { /** Called when the activity is first created. */ // @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyView view = new MyView(this); setContentView(view); view.requestFocus(); } } class MyView extends View{ private Paint mPaint; private Bitmap mBitmap; private static int[][] mGridArray; static final int put_0= 0; static final int put_1= 1; static final int black= 2; static final int white= 3; int a=0; public MyView(Context context){ super(context); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setARGB(0, 0xff, 0, 0); mBitmap = Bitmap.createBitmap(480, 800, Bitmap.Config.RGB_565); int i,j = 0; mGridArray = new int[12][12] ; for ( i = 1; i <= 11; i++) { for (j = 1; j<=11; j++) { mGridArray[i][j] = put_0; } } } protected void onDraw(Canvas canvas){ super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, null); //畫棋盤 super.onDraw(canvas); //canvas.drawColor(Color.WHITE); //背景顏色 Paint paint = new Paint(); paint.setAntiAlias(true); paint.setColor(Color.WHITE); //線條顏色 for(int i=1;i<=11;i++) { canvas.drawLine(20*i,20, 20*i, 220, paint); //畫直線 canvas.drawLine(20,20*i, 220, 20*i, paint); //畫橫線 } } public boolean onTouchEvent(MotionEvent event){ float x = 0; float y = 0; x = event.getX(); y = event.getY(); int i,j = 0; Canvas canvas = new Canvas(); canvas.setBitmap(mBitmap); switch( event.getAction() ) { // 判斷觸控的動作 case MotionEvent.ACTION_DOWN: // 按下 a=a+1; LOOP: for(i=1;i<=11;i++) { for(j=1;j<=11;j++) { if(x>=10 && x<=230 && y>=10 && y<=230) //判斷是否在棋盤內 { if(mGridArray[i][j] ==put_0 && a%2==1 && i*20==(int)((x+10)/20)*20 && j*20==(int)((y+10)/20)*20) { mGridArray[i][j] = black; mPaint.setColor(Color.RED); canvas.drawCircle((int)((x+10)/20)*20,(int)((y+10)/20)*20, 9, mPaint); break LOOP; } if(mGridArray[i][j] ==put_0 && a%2==0 && i*20==(int)((x+10)/20)*20 && j*20==(int)((y+10)/20)*20) { mGridArray[i][j] = white; mPaint.setColor(Color.WHITE); canvas.drawCircle((int)((x+10)/20)*20,(int)((y+10)/20)*20, 9, mPaint); break LOOP; } if((i*20==(int)((x+10)/20)*20 && j*20==(int)((y+10)/20)*20&&mGridArray[i][j] == black) || (i*20==(int)((x+10)/20)*20 && j*20==(int)((y+10)/20)*20 && mGridArray[i][j] == white)) { a=a+1; break LOOP; } } else //加上此判斷後,點棋盤外後在點棋盤內不會影響放其順序 { a=a+1; break LOOP; } } } } return true; } public void checkWin(Canvas canvas){ int i,j = 0; super.onDraw(canvas); canvas.drawBitmap(mBitmap, 0, 0, null); for(i=1;11<=i;i++) { for(j=1;j<=11;j++) { if(mGridArray[i][j] !=put_0) { mPaint.setColor(Color.WHITE); canvas.drawText("平手!!!", 50, 300, mPaint); } if(mGridArray[i][j] == black && mGridArray[i+1][j] == black && mGridArray[i+2][j] == black && mGridArray[i+3][j] == black && mGridArray[i+4][j] == black) { //黑子水平連線判斷 mPaint.setColor(Color.WHITE); canvas.drawText("黑子贏!!", 50, 300, mPaint); } if(mGridArray[i][j] == black && mGridArray[i][j+1] == black && mGridArray[i][j+2] == black && mGridArray[i][j+3] == black && mGridArray[i][j+4] == black) { //黑子垂直連線判斷 mPaint.setColor(Color.WHITE); canvas.drawText("黑子贏!!", 50, 300, mPaint); } if(mGridArray[i][j] == black && mGridArray[i+1][j+1] == black && mGridArray[i+2][j+2] == black && mGridArray[i+3][j+3] == black && mGridArray[i+4][j+4] == black) { //黑子左上往右下連線判斷 mPaint.setColor(Color.WHITE); canvas.drawText("黑子贏!!", 50, 300, mPaint); } if(mGridArray[i][j] == black && mGridArray[i-1][j+1] == black && mGridArray[i-2][j+2] == black && mGridArray[i-3][j+3] == black && mGridArray[i-4][j+4] == black) { //黑子右上往左下連線判斷 mPaint.setColor(Color.WHITE); canvas.drawText("黑子贏!!", 50, 300, mPaint); } } } return; } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.184.244.166
chrisho:你應該寫你的演算法... 03/21 01:54
cha122977:你的checkWin是不是根本沒去呼叫阿... 03/21 02:58
我也是JAVA版新手 T.T 不懂要怎麼表示我的問題 現在似乎是 我不會去呼叫checkWin 所以才出現問題嗎 可以請教該如何去呼叫嗎 謝謝 ※ 編輯: chenmengji 來自: 122.121.54.88 (03/21 16:15)
cha122977:checkWin(); 03/21 16:19
cha122977:應該是checkWin(canvas); 03/21 16:22
請問一下我呼叫的程式碼應該打在哪 是在下子的部分嗎 麻煩高手們詳細解答 因為我真的不是很懂 謝謝 ※ 編輯: chenmengji 來自: 111.184.240.109 (03/21 21:08)