From aa0cc399bca9e7aa07615a04a1739d5a43b54be4 Mon Sep 17 00:00:00 2001 From: Peter Osterlund Date: Wed, 19 Sep 2012 16:23:32 +0000 Subject: [PATCH] DroidFish: Optional second title line with captured piece information and time control information. Implemented by Leo Mayer, with some changes by me. --- .../fonts/DroidFishChessNotationDark.otf | Bin 27032 -> 24216 bytes DroidFish/res/layout-land/main.xml | 5 + DroidFish/res/layout/main.xml | 5 + DroidFish/res/layout/main_left_handed.xml | 5 + DroidFish/res/layout/title.xml | 123 ++++++++++++++---- DroidFish/res/values/strings.xml | 2 + DroidFish/res/xml/preferences.xml | 5 + .../org/petero/droidfish/ChessBoardPlay.java | 6 +- .../src/org/petero/droidfish/DroidFish.java | 86 ++++++++++-- .../org/petero/droidfish/GUIInterface.java | 4 + .../gamelogic/DroidChessController.java | 30 +++++ .../org/petero/droidfish/gamelogic/Piece.java | 31 +++++ .../petero/droidfish/gamelogic/TextIO.java | 22 ++-- 13 files changed, 272 insertions(+), 52 deletions(-) diff --git a/DroidFish/assets/fonts/DroidFishChessNotationDark.otf b/DroidFish/assets/fonts/DroidFishChessNotationDark.otf index 637b6b82184d6c7fa3ae6fc600581d2f15c4c1aa..646a53c79b97e741bd1c0e18a3c2678ef7eb5956 100644 GIT binary patch delta 7040 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 + + + + + + - - + - - + + + + + + + + - - - + android:layout_height="wrap_content" + android:layout_gravity="center_vertical"> + + + + + + + diff --git a/DroidFish/res/values/strings.xml b/DroidFish/res/values/strings.xml index 30a2e6d..39fc919 100644 --- a/DroidFish/res/values/strings.xml +++ b/DroidFish/res/values/strings.xml @@ -200,6 +200,8 @@ you are not actively using the program.\ Start New Game? Use the CuckooChess engine for even lower strength. P N B R Q K + Displays an additional subtitle for captured pieces + Show Material Difference Too few spaces Invalid piece Invalid side diff --git a/DroidFish/res/xml/preferences.xml b/DroidFish/res/xml/preferences.xml index 4dd6630..f40a259 100644 --- a/DroidFish/res/xml/preferences.xml +++ b/DroidFish/res/xml/preferences.xml @@ -196,6 +196,11 @@ android:entries="@array/viewPieceType_texts" android:defaultValue="@string/viewPieceType_default"> + + 0) { + sb.append(mps); + sb.append(" / "); + } + sb.append(timeToString(tc)); + if ((inc > 0) || (mps <= 0)) { + sb.append(" + "); + sb.append(tmpInfo[2] / 1000); + } + summaryTitleText.setText(sb.toString()); + } + @Override public void updateEngineTitle() { String engine = settings.getString("engine", "stockfish"); @@ -960,6 +1011,13 @@ public class DroidFish extends Activity implements GUIInterface { setEngineTitle(engine, strength); } + @Override + public void updateMaterialDifferenceTitle(CharSequence whitePieces, + CharSequence blackPieces) { + whiteFigText.setText(whitePieces); + blackFigText.setText(blackPieces); + } + private final void setFullScreenMode(boolean fullScreenMode) { WindowManager.LayoutParams attrs = getWindow().getAttributes(); if (fullScreenMode) { diff --git a/DroidFish/src/org/petero/droidfish/GUIInterface.java b/DroidFish/src/org/petero/droidfish/GUIInterface.java index 93f6783..859e374 100644 --- a/DroidFish/src/org/petero/droidfish/GUIInterface.java +++ b/DroidFish/src/org/petero/droidfish/GUIInterface.java @@ -80,6 +80,10 @@ public interface GUIInterface { /** Update engine title text. */ public void updateEngineTitle(); + /** Update title with the material difference. */ + public void updateMaterialDifferenceTitle(CharSequence whitePieces, + CharSequence blackPieces); + /** Report a move made that is a candidate for GUI animation. */ public void setAnimMove(Position sourcePos, Move move, boolean forward); diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java index c02ed82..68a3719 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/DroidChessController.java @@ -111,6 +111,17 @@ public class DroidChessController { game.timeController.setTimeControl(timeControl, movesPerSession, timeIncrement); } + /** + * @return Array containing time control, moves per session and time increment. + */ + public final int[] getTimeLimit() { + int[] ret = new int[3]; + ret[0] = timeControl; + ret[1] = movesPerSession; + ret[2] = timeIncrement; + return ret; + } + /** The chess clocks are stopped when the GUI is paused. */ public final synchronized void setGuiPaused(boolean paused) { guiPaused = paused; @@ -1020,6 +1031,25 @@ public class DroidChessController { gui.setPosition(game.currPos(), sb.toString(), game.tree.variations()); updateRemainingTime(); + updateMaterialDiffList(); + } + + public final void updateMaterialDiffList() { + Position pos = 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> pvMoves, String pvStr, diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/Piece.java b/DroidFish/src/org/petero/droidfish/gamelogic/Piece.java index 095c994..2fa6f42 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/Piece.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/Piece.java @@ -1,6 +1,7 @@ /* DroidFish - An Android chess program. Copyright (C) 2011 Peter Ă–sterlund, peterosterlund2@gmail.com + Copyright (C) 2012 Leo Mayer This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -41,6 +42,30 @@ public class Piece { public static final int nPieceTypes = 13; + // Unicode for color neutral chess pieces + public static final char NOTATION_KING = 0xe050; + public static final char NOTATION_QUEEN = 0xe051; + public static final char NOTATION_ROOK = 0xe052; + public static final char NOTATION_BISHOP = 0xe053; + public static final char NOTATION_KNIGHT = 0xe054; + public static final char NOTATION_PAWN = 0xe055; + + // Unicode for white chess pieces + public static final char WHITE_KING = 0x2654; + public static final char WHITE_QUEEN = 0x2655; + public static final char WHITE_ROOK = 0x2656; + public static final char WHITE_BISHOP = 0x2657; + public static final char WHITE_KNIGHT = 0x2658; + public static final char WHITE_PAWN = 0x2659; + + // Unicode for black chess pieces + public static final char BLACK_KING = 0x265A; + public static final char BLACK_QUEEN = 0x265B; + public static final char BLACK_ROOK = 0x265C; + public static final char BLACK_BISHOP = 0x265D; + public static final char BLACK_KNIGHT = 0x265E; + public static final char BLACK_PAWN = 0x265F; + /** * Return true if p is a white piece, false otherwise. * Note that if p is EMPTY, an unspecified value is returned. @@ -59,4 +84,10 @@ public class Piece { return EMPTY; return isWhite(pType) ? pType + (BKING - WKING) : pType - (BKING - WKING); } + + /** Converts the piece into a character for the material diff. */ + public final static char toUniCode(int p) { + // As we assume, the coding of the pieces is sequential, lets do some math. + return (char)(WHITE_KING + p - 1); + } } diff --git a/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java b/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java index 0992c2b..c6c2338 100644 --- a/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java +++ b/DroidFish/src/org/petero/droidfish/gamelogic/TextIO.java @@ -21,6 +21,7 @@ package org.petero.droidfish.gamelogic; import java.util.ArrayList; import java.util.List; +import org.petero.droidfish.PGNOptions; import org.petero.droidfish.R; @@ -729,14 +730,19 @@ public class TextIO { } /** Convert a piece and a square to a string, such as Nf3. */ - public final static String pieceAndSquareToString(boolean localized, int p, int sq) { - String ret; - if ((p == Piece.WPAWN) || (p == Piece.BPAWN)) - ret = localized ? pieceNames[0] : "P"; - else - ret = localized ? pieceToCharLocalized(p) : pieceToChar(p); - ret += squareToString(sq); - return ret; + public final static String pieceAndSquareToString(int currentPieceType, int p, int sq) { + StringBuilder ret = new StringBuilder(); + if (currentPieceType == PGNOptions.PT_FIGURINE) { + ret.append(Piece.toUniCode(p)); + } else { + boolean localized = (currentPieceType != PGNOptions.PT_ENGLISH); + if ((p == Piece.WPAWN) || (p == Piece.BPAWN)) + ret.append(localized ? pieceNames[0] : "P"); + else + ret.append(localized ? pieceToCharLocalized(p) : pieceToChar(p)); + } + ret.append(squareToString(sq)); + return ret.toString(); } private final static String pieceToChar(int p) {