DroidFish: Moved computation of material difference to the Util class, so that it can be reused by the EditBoard activity.

This commit is contained in:
Peter Osterlund
2012-09-19 18:11:53 +00:00
parent aa0cc399bc
commit f0035a6690
4 changed files with 36 additions and 21 deletions

View File

@@ -1012,10 +1012,9 @@ public class DroidFish extends Activity implements GUIInterface {
} }
@Override @Override
public void updateMaterialDifferenceTitle(CharSequence whitePieces, public void updateMaterialDifferenceTitle(Util.MaterialDiff diff) {
CharSequence blackPieces) { whiteFigText.setText(diff.white);
whiteFigText.setText(whitePieces); blackFigText.setText(diff.black);
blackFigText.setText(blackPieces);
} }
private final void setFullScreenMode(boolean fullScreenMode) { private final void setFullScreenMode(boolean fullScreenMode) {

View File

@@ -81,8 +81,7 @@ public interface GUIInterface {
public void updateEngineTitle(); public void updateEngineTitle();
/** Update title with the material difference. */ /** Update title with the material difference. */
public void updateMaterialDifferenceTitle(CharSequence whitePieces, public void updateMaterialDifferenceTitle(Util.MaterialDiff diff);
CharSequence blackPieces);
/** Report a move made that is a candidate for GUI animation. */ /** Report a move made that is a candidate for GUI animation. */
public void setAnimMove(Position sourcePos, Move move, boolean forward); public void setAnimMove(Position sourcePos, Move move, boolean forward);

View File

@@ -7,6 +7,9 @@ import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import org.petero.droidfish.gamelogic.Piece;
import org.petero.droidfish.gamelogic.Position;
import android.os.Build; import android.os.Build;
public final class Util { public final class Util {
@@ -38,4 +41,32 @@ public final class Util {
inBuf.close(); inBuf.close();
return ret.toArray(new String[ret.size()]); return ret.toArray(new String[ret.size()]);
} }
/** Represent materiel difference as two unicode strings. */
public final static class MaterialDiff {
public CharSequence white;
public CharSequence black;
MaterialDiff(CharSequence w, CharSequence b) {
white = w;
black = b;
}
}
/** Compute material difference for a position. */
public static MaterialDiff getMaterialDiff(Position pos) {
StringBuilder whiteString = new StringBuilder();
StringBuilder blackString = new StringBuilder();
for (int p = Piece.WPAWN; p >= Piece.WQUEEN; p--) {
int diff = pos.nPieces(p) - pos.nPieces(Piece.swapColor(p));
while (diff < 0) {
whiteString.append(Piece.toUniCode(Piece.swapColor(p)));
diff++;
}
while (diff > 0) {
blackString.append(Piece.toUniCode(p));
diff--;
}
}
return new MaterialDiff(whiteString, blackString);
}
} }

View File

@@ -1035,21 +1035,7 @@ public class DroidChessController {
} }
public final void updateMaterialDiffList() { public final void updateMaterialDiffList() {
Position pos = game.currPos(); gui.updateMaterialDifferenceTitle(Util.getMaterialDiff(game.currPos()));
StringBuilder whiteString = new StringBuilder();
StringBuilder blackString = new StringBuilder();
for (int p = Piece.WPAWN; p >= Piece.WQUEEN; p--) {
int diff = pos.nPieces(p) - pos.nPieces(Piece.swapColor(p));
while (diff < 0) {
whiteString.append(Piece.toUniCode(Piece.swapColor(p)));
diff++;
}
while (diff > 0) {
blackString.append(Piece.toUniCode(p));
diff--;
}
}
gui.updateMaterialDifferenceTitle(whiteString, blackString);
} }
private final synchronized void setThinkingInfo(int id, ArrayList<ArrayList<Move>> pvMoves, String pvStr, private final synchronized void setThinkingInfo(int id, ArrayList<ArrayList<Move>> pvMoves, String pvStr,