最近看了鸿洋大牛的五子棋教程,受益匪浅,讲的非常好,关于五子棋的游戏原理非常清楚,并且学到了不少知识,在这里感谢鸿洋大神的分享。我觉得我的源码注释写的非常清楚了,希望能给你带来不少的收获。
布局<?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(true); //设置画笔的风格为空心
mPint.setStyle(Paint.Style.STROKE); //获取棋子的资源文件
wPieces = BitmapFactory.decodeResource(getResources(), R.drawable.stone_w2);
bPieces = BitmapFactory.decodeResource(getResources(), R.drawable.stone_b1);
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); /**
* 获取view的宽度和mode
* mode分为:
* EXACTLY:EXACTLY是精确尺寸,当我们将控件的layout_width或layout_height指定为具体数值时如andorid:layout_width="50dip",或者为FILL_PARENT是,都是控件大小已经确定的情况,都是精确尺寸。
* AT_MOST:最大尺寸,当控件的layout_width或layout_height指定为WRAP_CONTENT时,控件大小一般随着控件的子空间或内容进行变化,此时控件尺寸只要不超过父控件允许的最大尺寸即可。因此,此时的mode是AT_MOST,size给出了父控件允许的最大尺寸。
* UNSPECIFIED:未指定尺寸,这种情况不多,一般都是父控件是AdapterView,通过measure方法传入的模式
*/
int widthSize = MeasureSpec.getSize(widthMeasureSpec); &nbs

本文详细介绍了如何使用Android实现五子棋游戏,包括布局、自定义View的工具类、游戏逻辑及触摸事件处理。通过示例代码展示了棋盘绘制、棋子放置、游戏胜利判断等功能,并提供了再来一局的方法。适合Android开发者学习参考。
最低0.47元/天 解锁文章
2096

被折叠的 条评论
为什么被折叠?



