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 + -
显示快捷键?