⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stepgenerater.java

📁 一个黑白棋的源代码(尚未完成
💻 JAVA
字号:
/* * StepGenerater.java * * Created on 2007-9-29, 10:22:55 * * To change this template, choose Tools | Templates * and open the template in the editor. */package org.yangcq.logic.step;import java.util.Enumeration;import java.util.Stack;import java.util.Vector;/** * * @author Administrator */public final class StepGenerater{    private Stack reversed; //翻棋历史记录    public StepGenerater()    {        this.reversed = new Stack();    }    public Step[] getValidSteps(Step[][] steps,boolean side)    {        Vector canChessList = new Vector(); //       IPlayer curPlayer = board.getCurrentPlayer();        for (int x = 0; x < steps.length; x++)        {            for (int y = 0; y < steps[x].length; y++)            {                if (canChess(steps, x, y, side))                {                    canChessList.addElement(new Step(x, y, new Boolean(side)));                }            }        }        if (canChessList.size() < 1)        {            return null;        }        Step[] validSteps = new Step[canChessList.size()];        Enumeration em = canChessList.elements();        for (int i = 0; i < canChessList.size(); i++)        {            validSteps[i] = (Step) em.nextElement();        }        return validSteps;    }    private boolean canChess(Step[][] steps, int x, int y, boolean chessmanBlack)    {        int xx;        int yy;        boolean opSide;        byte b;        if (steps[x][y] != null)        {            return false;        }        opSide = !chessmanBlack;        xx = x - 1;        b = 0;        while ((xx > 0) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == opSide))        {            b = 1;            --xx;        }        if (b > 0 && (xx >= 0) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == chessmanBlack))        {            return true;        }        xx = x - 1;        yy = y - 1;        b = 0;        while ((xx > 0) && (yy > 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            b = 1;            --xx;            --yy;        }        if ((b > 0) && (xx >= 0) && (yy >= 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        xx = x - 1;        yy = y + 1;        b = 0;        while ((xx > 0) && (yy < steps[xx].length - 1) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            b = 1;            --xx;            ++yy;        }        if (b > 0 && (xx >= 0) && (yy < steps[xx].length) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        yy = y - 1;        b = 0;        while ((yy > 0) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == opSide))        {            b = 1;            --yy;        }        if (b > 0 && (yy >= 0) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        yy = y + 1;        b = 0;        while ((yy < steps.length - 1) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == opSide))        {            b = 1;            ++yy;        }        if (b > 0 && (yy < steps.length) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        xx = x + 1;        yy = y - 1;        b = 0;        while ((xx < steps.length - 1) && (yy > 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            b = 1;            ++xx;            --yy;        }        if (b > 0 && (xx < steps.length) && (yy >= 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        xx = x + 1;        b = 0;        while ((xx < steps.length - 1) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == opSide))        {            b = 1;            ++xx;        }        if (b > 0 && (xx < steps.length) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == chessmanBlack))        {            return true;        }        xx = x + 1;        yy = y + 1;        b = 0;        while ((xx < steps.length - 1) && (yy < steps.length - 1) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            b = 1;            ++xx;            ++yy;        }        if (b > 0 && (xx < steps.length) && (yy < steps.length) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == chessmanBlack))        {            return true;        }        return false;    }    public long chess(Step[][] steps,int x, int y,boolean side)//下棋。    {        boolean opSide = !side;        int oldSize = this.reversed.size();        int xx;        int yy;        steps[x][y] = new Step(x, y, new Boolean(side)); //在x,y处下棋        //以下是计算翻棋。        xx = x - 1;        while ((xx > 0) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == opSide))        {            --xx;        }        if (steps[xx][y] != null && steps[xx][y].getColor().booleanValue() == side)        {            ++xx;            while (xx < x)            {                steps[xx][y].reverse();                this.reversed.push(steps[xx][y]);                ++xx;            }        }        xx = x - 1;        yy = y - 1;        while ((xx > 0) && (yy > 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            --xx;            --yy;        }        if (steps[xx][yy] != null && steps[xx][yy].getColor().booleanValue() == side)        {            ++xx;            ++yy;            while (xx < x)            {                steps[xx][yy].reverse(); //反过来                this.reversed.push(steps[xx][yy]);                ++xx;                ++yy;            }        }        xx = x - 1;        yy = y + 1;        while ((xx > 0) && (yy < steps.length - 1) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            --xx;            ++yy;        }        if (steps[xx][yy] != null && steps[xx][yy].getColor().booleanValue() == side)        {            ++xx;            --yy;            while (xx < x)            {                steps[xx][yy].reverse();                this.reversed.push(steps[xx][yy]);                ++xx;                --yy;            }        }        yy = y - 1;        while ((yy > 0) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == opSide))        {            --yy;        }        if (steps[x][yy] != null && steps[x][yy].getColor().booleanValue() == side)        {            ++yy;            while (yy < y)            {                steps[x][yy].reverse();                this.reversed.push(steps[x][yy]);                ++yy;            }        }        yy = y + 1;        while ((yy < steps.length - 1) && (steps[x][yy] != null) && (steps[x][yy].getColor().booleanValue() == opSide))        {            ++yy;        }        if (steps[x][yy] != null && steps[x][yy].getColor().booleanValue() == side)        {            --yy;            while (yy > y)            {                steps[x][yy].reverse();                this.reversed.push(steps[x][yy]);                --yy;            }        }        xx = x + 1;        yy = y - 1;        while ((xx < steps.length - 1) && (yy > 0) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            ++xx;            --yy;        }        if (steps[xx][yy] != null && steps[xx][yy].getColor().booleanValue() == side)        {            --xx;            ++yy;            while (xx > x)            {                steps[xx][yy].reverse();                this.reversed.push(steps[xx][yy]);                --xx;                ++yy;            }        }        xx = x + 1;        while ((xx < steps.length - 1) && (steps[xx][y] != null) && (steps[xx][y].getColor().booleanValue() == opSide))        {            ++xx;        }        if (steps[xx][y] != null && steps[xx][y].getColor().booleanValue() == side)        {            --xx;            while (xx > x)            {                steps[xx][y].reverse();                this.reversed.push(steps[xx][y]);                --xx;            }        }        xx = x + 1;        yy = y + 1;        while ((xx < steps.length - 1) && (yy < steps.length - 1) && (steps[xx][yy] != null) && (steps[xx][yy].getColor().booleanValue() == opSide))        {            ++xx;            ++yy;        }        if (steps[xx][yy] != null && steps[xx][yy].getColor().booleanValue() == side)        {            --xx;            --yy;            while (xx > x)            {                steps[xx][yy].reverse();                this.reversed.push(steps[xx][yy]);                --xx;                --yy;            }        }        return this.reversed.size() - oldSize;    }    public void unChess(Step[][] steps,int x, int y, long count)//撤消一步棋。    {        steps[x][y] = null;        while (count > 0)        {            ((Step) this.reversed.pop()).reverse();            --count;        }    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -