variation.java
来自「java 开发的围棋打谱程序 可供大家做参考」· Java 代码 · 共 120 行
JAVA
120 行
package org.nebula.goapplet;
import java.util.*;
/**
* Variation
*
* Description:
*
* @author harry
*
*/
public class Variation {
public static final int BORDER_LEFT = 0;
public static final int BORDER_TOP = 1;
public static final int BORDER_RIGHT = 2;
public static final int BORDER_BOTTOM = 3;
public Vector movements;
public Movement owner;
public int curIndex;
public Variation() {
movements = new Vector();
owner = null;
curIndex = 0;
}
public Movement getMovement(int index) {
return (Movement) movements.elementAt(index);
}
public void getBorders(int[] borders) {
for (int i = 0; i < getMovementCount(); i++) {
Movement m = getMovement(i);
ensureContain(m.col, m.row, borders);
int j;
for (j = 0; j < m.getForceCount(); j++) {
Movement.HandTip ht = m.forceAt(j);
ensureContain(ht.col, ht.row, borders);
}
for (j = 0; j < m.captiveCount(); j++) {
Movement.Captive ht = m.captiveAt(j);
ensureContain(ht.col, ht.row, borders);
}
for (j = 0; j < m.getVarCount(); j++) {
m.getVariation(j).getBorders(borders);
}
}
}
public Movement reset() {
curIndex = 0;
return (Movement) movements.elementAt(curIndex);
}
public Movement next() {
if (curIndex == movements.size() - 1)
return null;
curIndex++;
return (Movement) movements.elementAt(curIndex);
}
public Movement previous() {
if (curIndex == 0)
return null;
curIndex--;
return (Movement) movements.elementAt(curIndex);
}
public boolean hasNext() {
if (curIndex == movements.size() - 1)
return false;
return true;
}
public boolean hasPrevious() {
if (curIndex == 0)
return false;
return true;
}
public Movement getCurrentMovement() {
return (Movement) movements.elementAt(curIndex);
}
public void addMovement(Movement m) {
movements.addElement(m);
m.owner = this;
}
public int getMovementCount() {
return movements.size();
}
private void ensureContain(int x, int y, int[] borders) {
if ((x < 0) || (y < 0)) {
return;
}
if ((borders[BORDER_LEFT] == -1) || (borders[BORDER_LEFT] > x)) {
borders[BORDER_LEFT] = x;
}
if ((borders[BORDER_RIGHT] == -1) || (borders[BORDER_RIGHT] < x)) {
borders[BORDER_RIGHT] = x;
}
if ((borders[BORDER_TOP] == -1) || (borders[BORDER_TOP] > y)) {
borders[BORDER_TOP] = y;
}
if ((borders[BORDER_BOTTOM] == -1) || (borders[BORDER_BOTTOM] < y)) {
borders[BORDER_BOTTOM] = y;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?