Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android - 五子連珠

Android - 五子連珠

編輯:關於Android編程

繪制棋盤面板:

MainActivity.java
package com.xbmu.wuziqi;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
activity_main.xml



    
WuziqiPanel.java
package com.xbmu.wuziqi;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * 五子棋面板
 * Created by Administrator on 2016/5/2 0002.
 */
public class WuziqiPanel extends View {

    private int mPanelWidth;//棋盤寬度
    private float mLineHeight;//棋盤每行行高
    private int MAX_LINE = 10;//棋盤最大行數
    //創建繪畫對象
    private Paint mPaint = new Paint();
    public WuziqiPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(0x44ff0000);
        init();
    }
    /**初始化畫筆屬性*/
    private void init() {
        mPaint.setColor(0x88000000);//設置顏色為灰色效果
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);
    }
    /**測量一個view的大小*/
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);

        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(widthMeasureSpec);

        int width = Math.min(widthSize,heightSize);
        if(widthMode == MeasureSpec.UNSPECIFIED){
            width = heightSize;
        }else if(heightMode == MeasureSpec.UNSPECIFIED){
            width = widthSize;
        }
        //設置自身大小
        setMeasuredDimension(width,width);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mPanelWidth = w;
        mLineHeight = mPanelWidth*1.0f / MAX_LINE;
    }
    /**Draw畫出View的顯示內容*/
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawBoard(canvas);
    }

    private void drawBoard(Canvas canvas) {
        /**
         * 分析:根據棋盤的效果,我們知道棋子是下在邊界的交叉點上的。可得棋盤中間有9個完整的lineHeight,
         * 上下兩邊有半個lineHeight,總共10個lineHeight。左右也是。
         */
        int w = mPanelWidth;
        float lineHeight = mLineHeight;
        for(int i=0;i運行效果:
\  

繪制黑白棋子:

WuziqiPanel.java
package com.xbmu.wuziqi;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

/**
 * 五子棋面板
 * Created by Administrator on 2016/5/2 0002.
 */
public class WuziqiPanel extends View {

    private int mPanelWidth;//棋盤寬度
    private float mLineHeight;//棋盤每行行高
    private int MAX_LINE = 10;//棋盤最大行數
    //創建繪畫對象
    private Paint mPaint = new Paint();


    private Bitmap mWhitePiece;//白色棋子
    private Bitmap mBlackPiece;//黑色棋子

    //比例:棋子的大小是行高的3/4;
    private float ratioPieceOfLineHeight = 3*1.0f / 4;

    //白棋先手,當前輪到白棋。
    private boolean mIsWhite = true;
    private List mWhiteArray = new ArrayList<>();
    private List mBlackArray = new ArrayList<>();

    public WuziqiPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(0x44ff0000);
        init();
    }
    /**初始化畫筆屬性*/
    private void init() {
        mPaint.setColor(0x88000000);//設置顏色為灰色效果
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);

        mWhitePiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_w2);
        mBlackPiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_b1);
    }
    /**測量一個view的大小*/
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);

        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(widthMeasureSpec);

        int width = Math.min(widthSize,heightSize);
        if(widthMode == MeasureSpec.UNSPECIFIED){
            width = heightSize;
        }else if(heightMode == MeasureSpec.UNSPECIFIED){
            width = widthSize;
        }
        //設置自身大小
        setMeasuredDimension(width,width);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mPanelWidth = w;
        mLineHeight = mPanelWidth*1.0f / MAX_LINE;

        int pieceWidth = (int) (mLineHeight * ratioPieceOfLineHeight);//棋子寬度

        mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth,false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN){
            int x = (int) event.getX();
            int y = (int) event.getY();
            Point p = getValidPoint(x,y);
            if(mWhiteArray.contains(p) || mBlackArray.contains(p)){
                return false;
            }
            if(mIsWhite){
                mWhiteArray.add(p);
            }else{
                mBlackArray.add(p);
            }
            invalidate();//請求重繪
            mIsWhite = !mIsWhite;
            return true;
        }
        return super.onTouchEvent(event);
    }

    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight) ,(int)(y/mLineHeight));
    }

    /**Draw畫出View的顯示內容*/
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //繪制棋盤
        drawBoard(canvas);
        //繪制棋子
        drawPieces(canvas);
    }

    private void drawPieces(Canvas canvas) {
        for(int i=0,n = mWhiteArray.size(); i< n ;i++){
            Point whitePoint = mWhiteArray.get(i);
            canvas.drawBitmap(mWhitePiece,
                    (whitePoint.x+(1-ratioPieceOfLineHeight)/2)*mLineHeight,
                    (whitePoint.y+(1-ratioPieceOfLineHeight)/2)*mLineHeight,null);
        }
        for(int i=0,n = mBlackArray.size(); i< n ;i++){
            Point blackPoint = mBlackArray.get(i);
            canvas.drawBitmap(mBlackPiece,
                    (blackPoint.x+(1-ratioPieceOfLineHeight)/2)*mLineHeight,
                    (blackPoint.y+(1-ratioPieceOfLineHeight)/2)*mLineHeight,null);
        }
    }

    private void drawBoard(Canvas canvas) {
        /**
         * 分析:根據棋盤的效果,我們知道棋子是下在邊界的交叉點上的。可得棋盤中間有9個完整的lineHeight,
         * 上下兩邊有半個lineHeight,總共10個lineHeight。左右也是。
         */
        int w = mPanelWidth;
        float lineHeight = mLineHeight;
        for(int i=0;i運行效果:
\

五子棋業務邏輯判斷:

WuziqiPanel.java
package com.xbmu.wuziqi;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
 * 五子棋面板
 * Created by Administrator on 2016/5/2 0002.
 */
public class WuziqiPanel extends View {

    private int mPanelWidth;//棋盤寬度
    private float mLineHeight;//棋盤每行行高
    private int MAX_LINE = 10;//棋盤最大行數
    //創建繪畫對象
    private Paint mPaint = new Paint();


    private Bitmap mWhitePiece;//白色棋子
    private Bitmap mBlackPiece;//黑色棋子

    //比例:棋子的大小是行高的3/4;
    private float ratioPieceOfLineHeight = 3*1.0f / 4;

    //白棋先手,當前輪到白棋。
    private boolean mIsWhite = true;
    private List mWhiteArray = new ArrayList<>();
    private List mBlackArray = new ArrayList<>();

    private boolean mIsGameOver;
    private boolean mIsWhiteWinner;

    private int MAX_COUNT_IN_LINE = 5;
    public WuziqiPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(0x44ff0000);
        init();
    }
    /**初始化畫筆屬性*/
    private void init() {
        mPaint.setColor(0x88000000);//設置顏色為灰色效果
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);

        mWhitePiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_w2);
        mBlackPiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_b1);
    }
    /**測量一個view的大小*/
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);

        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(widthMeasureSpec);

        int width = Math.min(widthSize,heightSize);
        if(widthMode == MeasureSpec.UNSPECIFIED){
            width = heightSize;
        }else if(heightMode == MeasureSpec.UNSPECIFIED){
            width = widthSize;
        }
        //設置自身大小
        setMeasuredDimension(width,width);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mPanelWidth = w;
        mLineHeight = mPanelWidth*1.0f / MAX_LINE;

        int pieceWidth = (int) (mLineHeight * ratioPieceOfLineHeight);//棋子寬度

        mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth,false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN){
            int x = (int) event.getX();
            int y = (int) event.getY();
            Point p = getValidPoint(x,y);
            if(mWhiteArray.contains(p) || mBlackArray.contains(p)){
                return false;
            }
            if(mIsWhite){
                mWhiteArray.add(p);
            }else{
                mBlackArray.add(p);
            }
            invalidate();//請求重繪
            mIsWhite = !mIsWhite;
            return true;
        }
        return super.onTouchEvent(event);
    }

    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight) ,(int)(y/mLineHeight));
    }

    /**Draw畫出View的顯示內容*/
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //繪制棋盤
        drawBoard(canvas);
        //繪制棋子
        drawPieces(canvas);
        //檢查游戲結束
        checkGameOver();
    }

    private void checkGameOver() {
        boolean whiteWin = checkFiveInLine(mWhiteArray);
        boolean blackWin = checkFiveInLine(mBlackArray);
        if(whiteWin || blackWin){
            mIsGameOver = true;
            mIsWhiteWinner = whiteWin;
            String text = mIsWhiteWinner ? "白棋勝利":"黑棋勝利";
            Toast.makeText(getContext(),text,Toast.LENGTH_LONG).show();
        }
    }

    private boolean checkFiveInLine(List points) {
        for (Point p : points){
            int x = p.x;
            int y = p.y;
            boolean win = checkHorizontal(x,y,points);
            if(win) return true;
            win = checkVertical(x,y,points);
            if(win) return true;
            win =checkLeftDiagonal(x,y,points);
            if(win) return true;
            win = checkRightDiagonal(x,y,points);
            if(win) return true;
        }
        return false;
    }

    /**
     * 判斷x,y位置的棋子,是否橫向有相鄰的五個一致。
     * @param x
     * @param y
     * @param points
     * @return
     */
    private boolean checkHorizontal(int x, int y, List points) {
        int count = 1;
        //左
        for(int i=0;i points) {
        int count = 1;
        //上
        for(int i=0;i points) {
        int count = 1;

        for(int i=0;i points) {
        int count = 1;

        for(int i=0;i

View的存儲與恢復:

WuziqiPanel.java
package com.xbmu.wuziqi;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
 * 五子棋面板
 * Created by Administrator on 2016/5/2 0002.
 */
public class WuziqiPanel extends View {

    private int mPanelWidth;//棋盤寬度
    private float mLineHeight;//棋盤每行行高
    private int MAX_LINE = 10;//棋盤最大行數
    //創建繪畫對象
    private Paint mPaint = new Paint();


    private Bitmap mWhitePiece;//白色棋子
    private Bitmap mBlackPiece;//黑色棋子

    //比例:棋子的大小是行高的3/4;
    private float ratioPieceOfLineHeight = 3*1.0f / 4;

    //白棋先手,當前輪到白棋。
    private boolean mIsWhite = true;
    private ArrayList mWhiteArray = new ArrayList<>();
    private ArrayList mBlackArray = new ArrayList<>();

    private boolean mIsGameOver;
    private boolean mIsWhiteWinner;

    private int MAX_COUNT_IN_LINE = 5;
    public WuziqiPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(0x44ff0000);
        init();
    }
    /**初始化畫筆屬性*/
    private void init() {
        mPaint.setColor(0x88000000);//設置顏色為灰色效果
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);

        mWhitePiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_w2);
        mBlackPiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_b1);
    }
    /**測量一個view的大小*/
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);

        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(widthMeasureSpec);

        int width = Math.min(widthSize,heightSize);
        if(widthMode == MeasureSpec.UNSPECIFIED){
            width = heightSize;
        }else if(heightMode == MeasureSpec.UNSPECIFIED){
            width = widthSize;
        }
        //設置自身大小
        setMeasuredDimension(width,width);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mPanelWidth = w;
        mLineHeight = mPanelWidth*1.0f / MAX_LINE;

        int pieceWidth = (int) (mLineHeight * ratioPieceOfLineHeight);//棋子寬度

        mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth,false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN){
            int x = (int) event.getX();
            int y = (int) event.getY();
            Point p = getValidPoint(x,y);
            if(mWhiteArray.contains(p) || mBlackArray.contains(p)){
                return false;
            }
            if(mIsWhite){
                mWhiteArray.add(p);
            }else{
                mBlackArray.add(p);
            }
            invalidate();//請求重繪
            mIsWhite = !mIsWhite;
            return true;
        }
        return super.onTouchEvent(event);
    }

    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight) ,(int)(y/mLineHeight));
    }

    /**Draw畫出View的顯示內容*/
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //繪制棋盤
        drawBoard(canvas);
        //繪制棋子
        drawPieces(canvas);
        //檢查游戲結束
        checkGameOver();
    }

    private void checkGameOver() {
        boolean whiteWin = checkFiveInLine(mWhiteArray);
        boolean blackWin = checkFiveInLine(mBlackArray);
        if(whiteWin || blackWin){
            mIsGameOver = true;
            mIsWhiteWinner = whiteWin;
            String text = mIsWhiteWinner ? "白棋勝利":"黑棋勝利";
            Toast.makeText(getContext(),text,Toast.LENGTH_LONG).show();
        }
    }

    private boolean checkFiveInLine(List points) {
        for (Point p : points){
            int x = p.x;
            int y = p.y;
            boolean win = checkHorizontal(x,y,points);
            if(win) return true;
            win = checkVertical(x,y,points);
            if(win) return true;
            win =checkLeftDiagonal(x,y,points);
            if(win) return true;
            win = checkRightDiagonal(x,y,points);
            if(win) return true;
        }
        return false;
    }

    /**
     * 判斷x,y位置的棋子,是否橫向有相鄰的五個一致。
     * @param x
     * @param y
     * @param points
     * @return
     */
    private boolean checkHorizontal(int x, int y, List points) {
        int count = 1;
        //左
        for(int i=0;i points) {
        int count = 1;
        //上
        for(int i=0;i points) {
        int count = 1;

        for(int i=0;i points) {
        int count = 1;

        for(int i=0;iactivity_main.xml



    
運行效果: \

再來一局&我要悔棋

Wuziqi.java
package com.xbmu.wuziqi;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Bundle;
import android.os.Parcelable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

/**
 * 五子棋面板
 * Created by Administrator on 2016/5/2 0002.
 */
public class WuziqiPanel extends View {

    private int mPanelWidth;//棋盤寬度
    private float mLineHeight;//棋盤每行行高
    private int MAX_LINE = 10;//棋盤最大行數
    //創建繪畫對象
    private Paint mPaint = new Paint();


    private Bitmap mWhitePiece;//白色棋子
    private Bitmap mBlackPiece;//黑色棋子

    //比例:棋子的大小是行高的3/4;
    private float ratioPieceOfLineHeight = 3*1.0f / 4;

    //白棋先手,當前輪到白棋。
    private boolean mIsWhite = true;
    private ArrayList mWhiteArray = new ArrayList<>();
    private ArrayList mBlackArray = new ArrayList<>();

    private boolean mIsGameOver;
    private boolean mIsWhiteWinner;

    private int MAX_COUNT_IN_LINE = 5;
    public WuziqiPanel(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundColor(0x44ff0000);
        init();
    }
    /**初始化畫筆屬性*/
    private void init() {
        mPaint.setColor(0x88000000);//設置顏色為灰色效果
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setStyle(Paint.Style.STROKE);

        mWhitePiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_w2);
        mBlackPiece = BitmapFactory.decodeResource(getResources(),R.drawable.stone_b1);
    }
    /**測量一個view的大小*/
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthMode = MeasureSpec.getMode(widthMeasureSpec);

        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightMode = MeasureSpec.getMode(widthMeasureSpec);

        int width = Math.min(widthSize,heightSize);
        if(widthMode == MeasureSpec.UNSPECIFIED){
            width = heightSize;
        }else if(heightMode == MeasureSpec.UNSPECIFIED){
            width = widthSize;
        }
        //設置自身大小
        setMeasuredDimension(width,width);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mPanelWidth = w;
        mLineHeight = mPanelWidth*1.0f / MAX_LINE;

        int pieceWidth = (int) (mLineHeight * ratioPieceOfLineHeight);//棋子寬度

        mWhitePiece = Bitmap.createScaledBitmap(mWhitePiece,pieceWidth,pieceWidth,false);
        mBlackPiece = Bitmap.createScaledBitmap(mBlackPiece,pieceWidth,pieceWidth,false);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();
        if(action == MotionEvent.ACTION_DOWN){
            int x = (int) event.getX();
            int y = (int) event.getY();
            Point p = getValidPoint(x,y);
            if(mWhiteArray.contains(p) || mBlackArray.contains(p)){
                return false;
            }
            if(mIsWhite){
                mWhiteArray.add(p);
            }else{
                mBlackArray.add(p);
            }
            invalidate();//請求重繪
            mIsWhite = !mIsWhite;
            return true;
        }
        return super.onTouchEvent(event);
    }

    private Point getValidPoint(int x, int y) {
        return new Point((int)(x/mLineHeight) ,(int)(y/mLineHeight));
    }

    private Canvas canvas;
    /**Draw畫出View的顯示內容*/
    @Override
    protected void onDraw(Canvas canvas) {

        this.canvas = canvas;
        super.onDraw(canvas);
        //繪制棋盤
        drawBoard(canvas);
        //繪制棋子
        drawPieces(canvas);
        //檢查游戲結束
        checkGameOver();
    }

    private void checkGameOver() {
        boolean whiteWin = checkFiveInLine(mWhiteArray);
        boolean blackWin = checkFiveInLine(mBlackArray);
        if(whiteWin || blackWin){
            mIsGameOver = true;
            mIsWhiteWinner = whiteWin;
            String text = mIsWhiteWinner ? "白棋勝利":"黑棋勝利";
            Toast.makeText(getContext(),text,Toast.LENGTH_LONG).show();
        }
    }

    private boolean checkFiveInLine(List points) {
        for (Point p : points){
            int x = p.x;
            int y = p.y;
            boolean win = checkHorizontal(x,y,points);
            if(win) return true;
            win = checkVertical(x,y,points);
            if(win) return true;
            win =checkLeftDiagonal(x,y,points);
            if(win) return true;
            win = checkRightDiagonal(x,y,points);
            if(win) return true;
        }
        return false;
    }

    /**
     * 判斷x,y位置的棋子,是否橫向有相鄰的五個一致。
     * @param x
     * @param y
     * @param points
     * @return
     */
    private boolean checkHorizontal(int x, int y, List points) {
        int count = 1;
        //左
        for(int i=0;i points) {
        int count = 1;
        //上
        for(int i=0;i points) {
        int count = 1;

        for(int i=0;i points) {
        int count = 1;

        for(int i=0;iMainActivity.java
package com.xbmu.wuziqi;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
    private WuziqiPanel wuziqiPanel;
    private Button btnRestart;
    private Button btnRegret;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wuziqiPanel  = (WuziqiPanel) findViewById(R.id.id_wuziqi);
        btnRestart  = (Button) findViewById(R.id.btn_restart);
        btnRegret = (Button) findViewById(R.id.btn_regret);
        //再來一局
        btnRestart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wuziqiPanel.reStart();
            }
        });
        //我要悔棋
        btnRegret.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wuziqiPanel.goRegret();
            }
        });

    }
}
activity_main.xml


    
運行效果: \

 
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved