// TT4DStats.java
/**
*
* @author Sean Bridges
* @version 1.0
*
* The TT4DStats keeps track of how well each player is doing.
* Keeps track of the number of rows each player has 1,2 and 3 makers in
* while their opponent has 0 markers in.
*
* Can return an evaluation of how each player is doing based on these stats.
*/
public class TT4DStats implements BoardStats
{
//----------------------------------------
//class variables
private static final int rowPoints = 100;
private static final int with2Points = 20;
private static final int with1Points = 1;
//----------------------------------------
//instance variables
private int xRows, oRows, xWith2, oWith2, xWith1, oWith1;
//----------------------------------------
//instance methods
public final void incXRows()
{
xRows++;
}
public final void incORows()
{
oRows++;
}
public final void incXWith1()
{
xWith1++;
}
public final void incXWith2()
{
xWith2++;
}
public final void incOWith1()
{
oWith1++;
}
public final void incOWith2()
{
oWith2++;
}
public final void decXRows()
{
xRows--;
}
public final void decORows()
{
oRows--;
}
public final void decXWith1()
{
xWith1--;
}
public final void decXWith2()
{
xWith2--;
}
public final void decOWith1()
{
oWith1--;
}
public final void decOWith2()
{
oWith2--;
}
public TT4DStats copy()
{
TT4DStats t = new TT4DStats();
t.xRows = xRows;
t.oRows = oRows;
t.xWith1 = xWith1;
t.xWith2 = xWith2;
t.oWith1 = oWith1;
t.oWith2 = oWith2;
return t;
}
private int xPoints()
{
return (xRows * rowPoints) + (xWith2 * with2Points) + (xWith1 * with1Points);
}
private int oPoints()
{
return (oRows * rowPoints) + (oWith2 * with2Points) + (oWith1 * with1Points);
}
//------------------------------------
//BoardStat methods
/**
* Get the score for the given player.
* A score is an indisputable thing, such as the number of hits in battleship.
*/
public int getScore(Player aPlayer)
{
if(aPlayer.getNumber() == TT4DBoard.X_PLAYER_NUMBER)
{
return xRows;
}
if(aPlayer.getNumber() == TT4DBoard.O_PLAYER_NUMBER)
{
return oRows;
}
System.err.println("Invalid player");
Thread.dumpStack();
return 0;
}
/**
* Get an evaluation of how well a player is doing.
* The number returned could b debabtable, such as a measure
* of how strong a chess players position is
*/
public int getStrength(Player aPlayer)
{
if(aPlayer.getNumber() == TT4DBoard.X_PLAYER_NUMBER)
{
return xPoints() - oPoints();
}
if(aPlayer.getNumber() == TT4DBoard.O_PLAYER_NUMBER)
{
return oPoints() - xPoints();
}
System.err.println("Invalid player");
Thread.dumpStack();
return 0;
}
/**
* Returns the maximum possible hueristic.
*/
public int getMaxStrength()
{
return Integer.MAX_VALUE;
}
/**
* Returns the minimum possible hueristic.
*/
public int getMinStrength()
{
return Integer.MIN_VALUE;
}
public String toString()
{
return "TT4dStats: X Score:" + xRows + " OScore:" + oRows + " xStrength:" + (xPoints() - oPoints()) + "\n"
+ "xWith2:" + xWith2 + " xWith1:" + xWith1 + "\n"
+ "oWith2:" + oWith2 + " oWith1:" + oWith1;
}
}//end TT4DStats