package components;
import javax.swing.ImageIcon;
import util.ChessfigureConstants;
/**
* Abstrakte Klasse für eine Schachfigur. Es darf keine Instanz dieser Klasse
* gebildet werden, da eine Figur immer von einem Typ (König, Dame...) sein
* muss.
*
* @author Florian Franke
*
*/
public abstract class Figure
{
/**
* Farbe der Figur
*/
protected byte color = util.ChessfigureConstants.BLACK;
/**
* Icon der Figur
*/
protected ImageIcon icon = null;
/**
* Figurtyp (Koenig, Dame...)
*/
protected byte figureType;
/**
* Buchstabe der Figur fuer die Ausgabe in Schachnotation.
*/
protected char figureLetter;
/**
* Wurde die Figur schon bewegt?
*/
protected boolean moved;
/**
* Erstellt eine Figur
* @param color
*/
public Figure(byte color)
{
this.setColor(color);
}
/**
* Gibt den Figur-Buchstaben fuer die algebraische Notation aus.
*
* @return Buchstabe der Figur
*/
public char getFigureLetter() {
return this.figureLetter;
}
/**
* Setzt die Farbe der Figur
* @param color
*/
public void setColor(byte color)
{
try {
if (color == 1 || color == 0)
this.color = color;
else {
throw new Exception("Ungueltige Farbe der Figur!");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
/**
* Je nach Farbe und Figur wird mit dieser Methode das Icon gesetzt.
*/
protected abstract void setIcon();
/**
* Gibt das Icon der entsprechenden Figur zurück
* @return Icon
*/
public ImageIcon getIcon()
{
return this.icon;
}
/**
* Legt den Figurtyp fest.
* @param figureType Der neue Figurtyp
*/
public void setFigureType(byte figureType)
{
try {
if (ChessfigureConstants.isValidFigureType(figureType))
this.figureType = figureType;
else
throw new FigureException("Ungueltiger Figurtyp!");
} catch (FigureException e)
{
System.out.println(e.getMessage());
}
}
/**
* Gibt den Byte-Wert der Figur zurueck
* @return
*/
public byte getFigureType()
{
return this.figureType;
}
/**
* Gibt die Farbe der Figur zurueck
*
* @return Farbe der Figur
*/
public byte getColor() {
return color;
}
/**
* Setzen, ob die Figur schon bewegt wurde
* @param moved
*/
public void setMoved(boolean moved)
{
this.moved = moved;
}
/**
* Wurde die Figur schon bewegt?
* @return
*/
public boolean isMoved()
{
return this.moved;
}
public byte getFigureAsByte()
{
return ChessfigureConstants.makeFigureByte(this.getColor(), this.figureType, this.isMoved());
}
@Override
public String toString()
{
return "Figure [color=" + color + ", toString()=" + super.toString()
+ "]";
}
}