作者chenmengji (陳夢吉)
看板java
標題[問題] ANDROID五子棋程式問題
時間Tue Mar 20 23:41:08 2012
在學校學了很久的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)