Android 围棋 求助大神修改一下代码

我这个主活动加上吃子代码运行不了,但是又没有语法错误,请教一下大神们,哪里出现了错误,谢谢啦。
package com.example.gwongsam.zonghenggo;

import android.content.Context;
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.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;

/**

  • 游戏主类
  • Created by sam on 2017/12/8.
    */
    public class GameView extends View {

    //线条数量
    private static final int MAX_LINE = 19;

    //线条的宽度
    private int mPanelWidth;

    //线条的高度
    private float mLineHeight;

    //画笔
    private Paint mPaint = new Paint();

    //黑棋子
    private Bitmap mBlack;

    //白棋子
    private Bitmap mWhite;

    //比例,棋子的大小是高的四分之三
    private float rowSize = 3 * 1.0f / 4;

    //存储用户点击的坐标
    private ArrayList mWhiteArray = new ArrayList<>();
    private ArrayList mBlackArray = new ArrayList<>();

    public GameView(Context context) {
    super(context);
    }

    //标记,是执黑子还是白子 ,白棋先手
    private boolean mIsBlack = true;

    /**

    • 构造方法 */ public GameView(Context context, AttributeSet attrs) { super(context, attrs); //测试颜色 //setBackgroundColor(0x44ff0000); initPaint(); initBitmap(); }

    /**

    • 初始化棋子 */ private void initBitmap() { //拿到图片资源 mBlack = BitmapFactory.decodeResource(getResources(), R.drawable.stone_black); mWhite = BitmapFactory.decodeResource(getResources(), R.drawable.stone_white); }

    /**

    • 初始化画笔 */ private void initPaint() { //设置颜色 mPaint.setColor(Color.BLACK); //设置线条宽度 mPaint.setStrokeWidth(3); //抗锯齿 mPaint.setAntiAlias(true); //设置防抖动 mPaint.setDither(true); //设置Style mPaint.setStyle(Paint.Style.STROKE); }

    /**

    • 测量
      */
      @Override
      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

      //获取高宽值
      int widthSize = MeasureSpec.getSize(widthMeasureSpec);
      int widthMode = MeasureSpec.getMode(widthMeasureSpec);

      int hightSize = MeasureSpec.getSize(heightMeasureSpec);
      int hightMode = MeasureSpec.getMode(heightMeasureSpec);

      //拿到宽和高的最小值,也就是宽
      int width = Math.min(widthSize, heightMeasureSpec);

      //根据测量模式细节处理
      if (widthMode == MeasureSpec.UNSPECIFIED) {
      width = hightSize;
      } else if (hightMode == 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 mWhiteWidth = (int) (mLineHeight * rowSize);

      //修改棋子大小
      mWhite = Bitmap.createScaledBitmap(mWhite, mWhiteWidth, mWhiteWidth, false);
      mBlack = Bitmap.createScaledBitmap(mBlack, mWhiteWidth, mWhiteWidth, false);
      }

    /**

    • 绘制棋盘的方法
      */
      private void drawLine(Canvas canvas) {
      //获取高宽
      int w = mPanelWidth;
      float lineHeight = mLineHeight;

      //遍历,绘制线条
      for (int i = 0; i < MAX_LINE; i++) {
      //横坐标
      int startX = (int) (lineHeight / 2);
      int endX = (int) (w - lineHeight / 2);

      //纵坐标
      int y = (int) ((0.5 + i) * lineHeight);
      
      //绘制横
      canvas.drawLine(startX, y, endX, y, mPaint);
      //绘制纵
      canvas.drawLine(y, startX, y, endX, mPaint);
      

      }
      }

    /**

    • 绘制棋子的方法
      */
      private void drawPieces(Canvas canvas) {
      for (int i = 0; i < mWhiteArray.size(); i++) {
      //获取白棋子的坐标
      Point whitePoint = mWhiteArray.get(i);
      canvas.drawBitmap(mBlack, (whitePoint.x + (1 - rowSize) / 2) * mLineHeight, (whitePoint.y + (1 - rowSize) / 2) * mLineHeight, null);
      }

      for (int i = 0; i < mBlackArray.size(); i++) {
      //获取黑棋子的坐标
      Point blackPoint = mBlackArray.get(i);
      canvas.drawBitmap(mWhite, (blackPoint.x + (1 - rowSize) / 2) * mLineHeight, (blackPoint.y + (1 - rowSize) / 2) * mLineHeight, null);
      }
      }

    @Override
    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    drawLine(canvas);
    drawPieces(canvas);
    
    //绘制完成之后判断是否提子
    checkGrape();
    

    }

    /**

    • 判断是否吃子
      */
      public void checkGrape(){
      int blockLength;
      int[] block;
      int[][] map={};
      for(int i = 0;i < 19; i++){
      for(int j = 0;j < 19; j++){
      if(map[i][j] == 0)
      continue;
      else{
      block = new int[361];
      blockLength = 1;
      block[0] = i*100 + j;

              recursion(i,j);
      
              if(hasQi())
                  continue;
              else {
                  for(int t = 0;t < blockLength; t++)
                      map[block[t]/100][block[t]%100] = 0;
              }
          }
      }
      

      }
      }
      /**

    • 递归检测块
      /
      public void recursion(int i,int j){
      int blockLength=0;
      int[] block={};
      int[][] map={};
      //Left
      if(i-1 >= 0 && map[i-1][j] == map[i][j] && isInBlock((i-1)*100+j)){
      block[blockLength] = (i-1)*100 + j;
      blockLength++;
      recursion(i-1,j);
      }
      //Up
      if(j-1 >= 0 && map[i][j-1] == map[i][j] && isInBlock(i*100+j-1)){
      block[blockLength] = i*100 + j-1;
      blockLength++;
      recursion(i,j-1);
      }
      //Right
      if(i+1 < 19 && map[i+1][j] == map[i][j] && isInBlock((i+1)*100+j)){
      block[blockLength] = (i+1)*100 + j;
      blockLength++;
      recursion(i+1,j);
      }
      //Down
      if(j+1 < 19 && map[i][j+1] == map[i][j] && isInBlock(i*100+j+1)){
      block[blockLength] = i*100 + j+1;
      blockLength++;
      recursion(i,j+1);
      }
      }
      /
      *

    • 检测块是否有气
      /
      public boolean hasQi(){
      int i,j;
      int blockLength=0;
      int[] block={};
      int[][] map={};
      for(int t = 0;t < blockLength; t++){
      i = block[t]/100;
      j = block[t]%100;
      if(i-1 >= 0 && map[i-1][j] == 0) return true;
      if(i+1 < 19 && map[i+1][j] == 0) return true;
      if(j-1 >= 0 && map[i][j-1] == 0) return true;
      if(j+1 < 19 && map[i][j+1] == 0) return true;
      }
      return false;
      }
      /
      *

    • 检测是否重复遍历
      */
      public boolean isInBlock(int neighbor){
      int blockLength=0;
      int[] block={};
      for(int i = 0;i < blockLength; i++)
      {
      if (block[i] == neighbor) return false;
      }
      return true;
      }

    /**

    • 触摸事件
      */
      @Override
      public boolean onTouchEvent(MotionEvent event) {
      switch (event.getAction()) {
      //按下事件
      case MotionEvent.ACTION_DOWN:

          int x = (int) event.getX();
          int y = (int) event.getY();
      
          //封装成一个Point
          Point p = getValidPoint(x, y);
      
          //判断当前这个点是否有棋子了
          if (mWhiteArray.contains(p) || mBlackArray.contains(p)) {
      
              //点击不生效
              return false;
          }
      
          //判断如就存白棋集合,反之则黑棋集合
          if (mIsBlack) {
              mWhiteArray.add(p);
          } else {
              mBlackArray.add(p);
          }
      
          //刷新
          invalidate();
      
          //改变值
          mIsBlack = !mIsBlack;
      
          break;
      

      }

      return true;
      }

    /**

    • 不能重复点击
      */
      private Point getValidPoint(int x, int y) {

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

    /**

    • 系统状态 */ private static final String INSTANCE = "instace";

    /**

    • 存储状态
      */
      @Override
      protected Parcelable onSaveInstanceState() {

      Bundle bundle = new Bundle();
      bundle.putParcelable(INSTANCE, super.onSaveInstanceState());
      return bundle;
      }

    /**

    • 再来一局 */ public void RestartGame() { mWhiteArray.clear(); mBlackArray.clear(); invalidate(); mIsBlack = true; }

    /**

    • 悔棋 */ public void Regret() { if (mBlackArray.size() > 0 || mWhiteArray.size() > 0) { if (mIsBlack) { mBlackArray.remove(mBlackArray.size() - 1); mIsBlack = !mIsBlack; } else { mWhiteArray.remove(mWhiteArray.size() - 1); mIsBlack = !mIsBlack; } invalidate(); } }

    /**

    • 只下黑棋 */ public void HeiOnly() { mIsBlack = true; }

    /**

    • 只下白棋 */ public void BaiOnly() { mIsBlack = false; } }

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化?

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化?

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化 你试试

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化 你试试

先将你的代码 使用 markdown的 格式改为代码类型 现在太 难看了, 然后你的问题 有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化 你试试

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化 你试试

我觉得你公开代码对你不是很有利,其实你。。。。。

http://blog.csdn.net/u013787595/article/details/23158031希望对你有帮助

你可以使用 markdown 格式改为代码类型 是在有点难看~然后把代码逻辑整理一下

是运行效率?还是AI能力?还是不稳定?

先将你的代码 使用 markdown的格式改为代码类型 现在太难看了, 然后你的问题有点模糊 现在是程序不能跑起来吗 还是单纯的做代码优化 你试试看