From 9023022ba5ba73738dfed789d78274cea7e07edb Mon Sep 17 00:00:00 2001 From: oers Date: Tue, 19 Nov 2024 09:23:33 +0100 Subject: [PATCH] reversatile-88 Some evaluations are shown in Guess Best Move --- .../com/shurik/droidzebra/ZebraEngine.java | 23 +++++++++++++---- .../de/earthlingz/oerszebra/DroidZebra.java | 25 ------------------- .../guessmove/GuessMoveModeManager.java | 13 ++++++++-- 3 files changed, 29 insertions(+), 32 deletions(-) diff --git a/project/src/main/java/com/shurik/droidzebra/ZebraEngine.java b/project/src/main/java/com/shurik/droidzebra/ZebraEngine.java index 581df61..e4b0416 100644 --- a/project/src/main/java/com/shurik/droidzebra/ZebraEngine.java +++ b/project/src/main/java/com/shurik/droidzebra/ZebraEngine.java @@ -19,6 +19,7 @@ import android.util.Log; +import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.json.JSONArray; import org.json.JSONException; @@ -186,9 +187,9 @@ private static void copyFile(InputStream in, OutputStream out) throws IOExceptio } } - private void waitForEngineState(ENGINE_STATE state, int milliseconds) { + private void waitForEngineState(int milliseconds, ENGINE_STATE... state) { synchronized (engineStateEventLock) { - if (mEngineState != state) + if (!ArrayUtils.contains(state, mEngineState)) try { engineStateEventLock.wait(milliseconds); } catch (InterruptedException e) { @@ -198,9 +199,9 @@ private void waitForEngineState(ENGINE_STATE state, int milliseconds) { } } - private void waitForEngineState(ENGINE_STATE state) { + private void waitForEngineState(ENGINE_STATE... state) { synchronized (engineStateEventLock) { - while (mEngineState != state && isRunning) + while (!ArrayUtils.contains(state, mEngineState) && isRunning) try { engineStateEventLock.wait(); } catch (InterruptedException e) { @@ -251,6 +252,18 @@ private void stopGame() { } } + public void forceStopGame() { + zeForceExit(); + // if waiting for move - get back into the engine + mPendingEvent = new JSONObject(); + try { + mPendingEvent.put("type", UI_EVENT_EXIT); + } catch (JSONException e) { + // Log.getStackTraceString(e); + } + waitForEngineState(ENGINE_STATE.ES_READY2PLAY, ENGINE_STATE.ES_USER_INPUT_WAIT); + } + public void makeMove(GameState gameState, Move move) throws InvalidMove { if (gameState != currentGameState) { //TODO switch context and play @@ -284,7 +297,7 @@ public void makeMove(GameState gameState, Move move) throws InvalidMove { private void stopIfThinkingOnHumanTime() { if (isThinkingOnHumanTime()) { stopMove(); - waitForEngineState(ENGINE_STATE.ES_USER_INPUT_WAIT, 1000); + waitForEngineState(1000, ENGINE_STATE.ES_USER_INPUT_WAIT); } } diff --git a/project/src/main/java/de/earthlingz/oerszebra/DroidZebra.java b/project/src/main/java/de/earthlingz/oerszebra/DroidZebra.java index 4e7dd19..fe0035e 100644 --- a/project/src/main/java/de/earthlingz/oerszebra/DroidZebra.java +++ b/project/src/main/java/de/earthlingz/oerszebra/DroidZebra.java @@ -730,7 +730,6 @@ public void onBoard(GameState gameState) { } if (!boardChanged) { - Log.v("Handler", "invalidate"); mBoardView.invalidate(); } } @@ -938,30 +937,6 @@ void undoAll() { engine.undoAll(gameState); } - //------------------------------------------------------------------------- - // Pass Dialog - public static class DialogQuit extends DialogFragment { - - public static DialogQuit newInstance() { - return new DialogQuit(); - } - - public DroidZebra getDroidZebra() { - return (DroidZebra) getActivity(); - } - - @Nonnull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - return new AlertDialog.Builder(getActivity()) - .setTitle(R.string.dialog_quit_title) - .setPositiveButton(R.string.dialog_quit_button_quit, (dialog, id) -> getDroidZebra().finish() - ) - .setNegativeButton(R.string.dialog_quit_button_cancel, null) - .create(); - } - } - //------------------------------------------------------------------------- // Pass Dialog public static class DialogBusy extends DialogFragment { diff --git a/project/src/main/java/de/earthlingz/oerszebra/guessmove/GuessMoveModeManager.java b/project/src/main/java/de/earthlingz/oerszebra/guessmove/GuessMoveModeManager.java index 7c1eaa7..c20bb93 100644 --- a/project/src/main/java/de/earthlingz/oerszebra/guessmove/GuessMoveModeManager.java +++ b/project/src/main/java/de/earthlingz/oerszebra/guessmove/GuessMoveModeManager.java @@ -63,18 +63,27 @@ private static EngineConfig createGeneratorConfig(String opening) { } public void generate(int minIn, int max, GuessMoveListener guessMoveListener) { + gameState.setGameStateListener(new GameStateListener() { + @Override + public void onBoard(GameState board) { + return; + } + }); int min = Math.max(minIn, 4); this.guessMoveListener = guessMoveListener; final int movesPlayed = random.nextInt(max - min) + min; this.candidateMoves = new CandidateMove[0]; + listener.onBoardStateChanged(); + engine.forceStopGame(); + new GameGenerator(engine).generate(generatorConfig, guesserConfig, movesPlayed, gameState -> { GuessMoveModeManager.this.gameState = gameState; gameState.setGameStateListener(new GameStateListener() { @Override public void onBoard(GameState board) { - listener.onBoardStateChanged(); updateCandidateMoves(board.getCandidateMoves()); guessMoveListener.onSideToMoveChanged(board.getSideToMove()); + listener.onBoardStateChanged(); } }); guessMoveListener.onGenerated(gameState.getSideToMove()); @@ -97,7 +106,7 @@ private void updateCandidateMoves(CandidateMove[] newCandidates) { if (this.candidateMoves.length == replacement.size()) { this.candidateMoves = replacement.toArray(this.candidateMoves); } else { - this.candidateMoves = replacement.toArray(new CandidateMove[replacement.size()]); + this.candidateMoves = replacement.toArray(new CandidateMove[0]); } }