最近看了鸿洋大牛的五子棋教程,受益匪浅,讲的非常好,关于五子棋的游戏原理非常清楚,并且学到了不少知识,在这里感谢鸿洋大神的分享。我觉得我的源码注释写的非常清楚了,希望能给你带来不少的收获。
布局<?xml version="1.0" encoding="utf-8"?>
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/bg"
android:paddingTop="80dp"
android:orientation="vertical"
tools:context="com.yaodan.fivechessdemo.MainActivity">
android:id="@+id/custon_chess_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:id="@+id/bt_restart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="再来一局"/>
自定义View的工具类package com.yaodan.fivechessdemo.view;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Point;import android.os.Bundle;import android.os.Parcelable;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import com.yaodan.fivechessdemo.R;import com.yaodan.fivechessdemo.contral.IsChessWin;import java.util.ArrayList;/**
* Created by swk on 2016/12/5.
*/public class ChessView extends View { private int mPanelWith; //棋盘的宽度(棋盘使方形的)
private float mLineHeigth; //棋盘每一个空格的高度
private int MAX_LINE = 10; //棋盘的行数
private Paint mPint = new Paint(); //创建画笔
private Bitmap wPieces; //白棋
private Bitmap bPieces; //黑棋
private ArrayList wPoints = new ArrayList<>(); //白棋坐标的集合
private ArrayList bPoints = new ArrayList<>(); //黑棋坐标的集合
private float radioPoeces = 1.0f * 3 / 4; //棋子与棋格的大小比例
private boolean mIsWitch = true; //判断是否白子画在棋盘上
private boolean isGameOver = false; //判读是否游戏结束
private Context mContext; private IsChessWin isChessWin; //一个用来处理胜利与否的逻辑
private String TAG = "CHESSVIEW"; public ChessView(Context context) { super(context);
mContext = context;
init();
} public ChessView(Context context, AttributeSet attrs) { super(context, attrs);
mContext = context;
init();
} public ChessView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);
mContext = context;
init();
} /**
* 再来一局方法
*/
public void myreStart() {
wPoints.clear();
bPoints.clear();
isGameOver = false;
Log.i(TAG, "myreStart: " + wPoints.size() + ":::" + bPoints.size());
invalidate();
} /**
* 初始化
*/
public void init() { //设置画笔的颜色
mPint.setColor(Color.BLACK); //设置抗锯齿功能(图像边缘相对清晰一点,锯齿痕迹不那么明显)
mPint.setAntiAlias(true); //设置防抖动功能(使图像更柔和一点)
mPint.setDither(tr