Skip to content

Commit f36f9b1

Browse files
committed
premove indicator
1 parent fd6ba48 commit f36f9b1

5 files changed

Lines changed: 53 additions & 15 deletions

File tree

app/src/main/java/com/example/chaiss/ChessEngine.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ public String setPiece(String fen, String piece, String square) {
4545
return chessLogic.callAttr("set_piece", fen, piece, square).toString();
4646
}
4747

48-
public String renderBoardWithTheme(String fen, String selectedSquare, String[] highlights, String theme, boolean flipBoard) {
48+
public String renderBoardWithTheme(String fen, String selectedSquare, String[] highlights, String theme, boolean flipBoard, String[] premove) {
4949
PyObject pySelected = (selectedSquare != null) ? PyObject.fromJava(selectedSquare) : PyObject.fromJava(null);
5050
PyObject pyMoves;
5151
if (highlights != null) {
5252
pyMoves = Python.getInstance().getBuiltins().callAttr("list", (Object) highlights);
5353
} else {
5454
pyMoves = PyObject.fromJava(null);
5555
}
56-
57-
return chessLogic.callAttr("render_board", fen, pySelected, pyMoves, theme, flipBoard).toString();
56+
PyObject pyPremove = (premove != null) ? Python.getInstance().getBuiltins().callAttr("list", (Object) premove) : PyObject.fromJava(null);
57+
return chessLogic.callAttr("render_board", fen, pySelected, pyMoves, theme, flipBoard, pyPremove).toString();
5858
}
5959

6060
public String renderAnalysisBoardWithTheme(String fen, String theme, boolean flipped) {

app/src/main/java/com/example/chaiss/HardActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,12 +411,20 @@ private void updateBoard() {
411411
if (selectedSquare != null && legalMoves != null) {
412412
legalMovesArray = legalMoves.toArray(new String[0]);
413413
}
414+
String[] premove = null;
415+
if (premoveManager.hasPremove()) {
416+
String premoveStr = premoveManager.getPremove();
417+
if (premoveStr != null && premoveStr.length() >= 4) {
418+
// The first two characters are the from-square, and the next two the to-square.
419+
premove = new String[] { premoveStr.substring(0, 2), premoveStr.substring(2, 4) };
420+
}
421+
}
414422
ChessEngine engine = new ChessEngine();
415423
String boardSvg;
416424
if (selectedSquare != null && legalMovesArray != null) {
417-
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped);
425+
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped, premove);
418426
} else {
419-
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped);
427+
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped, premove);
420428
}
421429
runOnUiThread(() -> {
422430
try {

app/src/main/java/com/example/chaiss/MediumActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,12 +411,20 @@ private void updateBoard() {
411411
if (selectedSquare != null && legalMoves != null) {
412412
legalMovesArray = legalMoves.toArray(new String[0]);
413413
}
414+
String[] premove = null;
415+
if (premoveManager.hasPremove()) {
416+
String premoveStr = premoveManager.getPremove();
417+
if (premoveStr != null && premoveStr.length() >= 4) {
418+
// The first two characters are the from-square, and the next two the to-square.
419+
premove = new String[] { premoveStr.substring(0, 2), premoveStr.substring(2, 4) };
420+
}
421+
}
414422
ChessEngine engine = new ChessEngine();
415423
String boardSvg;
416424
if (selectedSquare != null && legalMovesArray != null) {
417-
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped);
425+
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped, premove);
418426
} else {
419-
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped);
427+
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped, premove);
420428
}
421429
runOnUiThread(() -> {
422430
try {

app/src/main/java/com/example/chaiss/PlayActivity.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,12 +418,20 @@ private void updateBoard() {
418418
if (selectedSquare != null && legalMoves != null) {
419419
legalMovesArray = legalMoves.toArray(new String[0]);
420420
}
421+
String[] premove = null;
422+
if (premoveManager.hasPremove()) {
423+
String premoveStr = premoveManager.getPremove();
424+
if (premoveStr != null && premoveStr.length() >= 4) {
425+
// The first two characters are the from-square, and the next two the to-square.
426+
premove = new String[] { premoveStr.substring(0, 2), premoveStr.substring(2, 4) };
427+
}
428+
}
421429
ChessEngine engine = new ChessEngine();
422430
String boardSvg;
423431
if (selectedSquare != null && legalMovesArray != null) {
424-
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped);
432+
boardSvg = engine.renderBoardWithTheme(currentFEN, selectedSquare, legalMovesArray, currentTheme, boardFlipped, premove);
425433
} else {
426-
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped);
434+
boardSvg = engine.renderBoardWithTheme(currentFEN, null, null, currentTheme, boardFlipped, premove);
427435
}
428436
runOnUiThread(() -> {
429437
try {

app/src/main/python/chess_logic.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def get_legal_moves_from_square(fen, square):
5454
legal_moves.append(to_square)
5555
return legal_moves
5656

57-
def render_board(fen, selected_square=None, legal_moves=None, theme='classic', flip_board=False):
57+
def render_board(fen, selected_square=None, legal_moves=None, theme='classic', flip_board=False, premove=None):
5858
board = chess.Board(fen)
5959
squares_to_highlight = {}
6060
if selected_square:
@@ -66,15 +66,29 @@ def render_board(fen, selected_square=None, legal_moves=None, theme='classic', f
6666
sq = chess.parse_square(move_square)
6767
squares_to_highlight[sq] = "#f5a9a9"
6868

69-
light_color, dark_color = {
70-
'blue': ('#DBEAF9', '#70A3D9'),
71-
'green': ('#E0F0D9', '#4C8B5F'),
72-
}.get(theme, ('#F3D9B2', '#B78959'))
69+
if premove:
70+
try:
71+
premove_from = chess.parse_square(premove[0])
72+
premove_to = chess.parse_square(premove[1])
73+
# Use a red tint color (adjust as desired)
74+
squares_to_highlight[premove_from] = "#ffcccc"
75+
squares_to_highlight[premove_to] = "#ffcccc"
76+
except Exception as e:
77+
print("Error parsing premove squares:", e)
78+
79+
# Choose colors based on theme
80+
if theme == 'blue':
81+
light_color, dark_color = '#DBEAF9', '#70A3D9'
82+
elif theme == 'green':
83+
light_color, dark_color = '#E0F0D9', '#4C8B5F'
84+
else:
85+
light_color, dark_color = '#F3D9B2', '#B78959'
7386

7487
svg_data = chess.svg.board(
7588
board,
89+
size=400,
7690
squares=squares_to_highlight,
77-
orientation=chess.BLACK if flip_board else chess.WHITE, # ← KEY LINE
91+
orientation=chess.BLACK if flip_board else chess.WHITE,
7892
colors={
7993
'square light': light_color,
8094
'square dark': dark_color

0 commit comments

Comments
 (0)