add: ai think time.

remove: georgian language pack
This commit is contained in:
ramollia
2025-10-06 23:25:48 +02:00
parent ce02fc2b88
commit e6fa522f39
17 changed files with 213 additions and 283 deletions

View File

@@ -1,5 +1,5 @@
package org.toop.app;
public record GameInformation(String[] playerName, boolean[] isPlayerHuman, int[] computerDifficulty,
public record GameInformation(String[] playerName, boolean[] isPlayerHuman, int[] computerDifficulty, int[] computerThinkTime,
boolean isConnectionLocal, String serverIP, String serverPort) {
}

View File

@@ -2,7 +2,6 @@ package org.toop.app.layer.layers;
import javafx.application.Platform;
import javafx.geometry.Pos;
import javafx.scene.Node;
import org.toop.app.App;
import org.toop.app.GameInformation;
import org.toop.app.layer.Container;
@@ -23,10 +22,12 @@ public final class MultiplayerLayer extends Layer {
private boolean isPlayer1Human = true;
private String player1Name = "";
private int computer1Difficulty = 0;
private int computer1ThinkTime = 0;
private boolean isPlayer2Human = true;
private String player2Name = "";
private int computer2Difficulty = 0;
private int computer2ThinkTime = 0;
private String serverIP = "";
private String serverPort = "";
@@ -64,11 +65,17 @@ public final class MultiplayerLayer extends Layer {
final var computerNameSeparator = NodeBuilder.separator();
final var computerDifficultyText = NodeBuilder.text(AppContext.getString("computerDifficulty"));
final var computerDifficultySeparator = NodeBuilder.separator();
final var computerDifficultySlider = NodeBuilder.slider(10, computer1Difficulty, (difficulty) ->
computer1Difficulty = difficulty);
final var computerThinkTimeText = NodeBuilder.text(AppContext.getString("computerThinkTime"));
final var computerThinkTimeSlider = NodeBuilder.slider(5, computer1ThinkTime, (thinkTime) ->
computer1ThinkTime = thinkTime);
player1Container.addNodes(computerNameText, computerNameSeparator,
computerDifficultyText, computerDifficultySlider);
computerDifficultyText, computerDifficultySlider, computerDifficultySeparator,
computerThinkTimeText, computerThinkTimeSlider);
}
if (isConnectionLocal) {
@@ -93,11 +100,17 @@ public final class MultiplayerLayer extends Layer {
final var computerNameSeparator = NodeBuilder.separator();
final var computerDifficultyText = NodeBuilder.text(AppContext.getString("computerDifficulty"));
final var computerDifficultySlider = NodeBuilder.slider(10, computer1Difficulty, (difficulty) ->
final var computerDifficultySeparator = NodeBuilder.separator();
final var computerDifficultySlider = NodeBuilder.slider(10, computer2Difficulty, (difficulty) ->
computer2Difficulty = difficulty);
final var computerThinkTimeText = NodeBuilder.text(AppContext.getString("computerThinkTime"));
final var computerThinkTimeSlider = NodeBuilder.slider(5, computer2ThinkTime, (thinkTime) ->
computer2ThinkTime = thinkTime);
player2Container.addNodes(computerNameText, computerNameSeparator,
computerDifficultyText, computerDifficultySlider);
computerDifficultyText, computerDifficultySlider, computerDifficultySeparator,
computerThinkTimeText, computerThinkTimeSlider);
}
} else {
final var serverIPText = NodeBuilder.text(AppContext.getString("serverIP"));
@@ -115,7 +128,7 @@ public final class MultiplayerLayer extends Layer {
serverPortText, serverPortInput);
}
final var versusText = NodeBuilder.text("VS");
final var versusText = NodeBuilder.header("VS");
final var connectionTypeText = NodeBuilder.text(AppContext.getString("connectionType") + ":");
final var connectionTypeToggle = NodeBuilder.toggle(AppContext.getString("local"), AppContext.getString("server"), !isConnectionLocal, (server) -> {
@@ -129,6 +142,7 @@ public final class MultiplayerLayer extends Layer {
new String[]{player1Name, player2Name},
new boolean[]{isPlayer1Human, isPlayer2Human},
new int[]{computer1Difficulty, computer2Difficulty},
new int[]{computer1ThinkTime, computer2ThinkTime},
isConnectionLocal, serverIP, serverPort)));
} else {
new EventFlow()

View File

@@ -20,6 +20,7 @@ import org.toop.local.AppContext;
import javafx.geometry.Pos;
import javafx.scene.paint.Color;
import java.time.Duration;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -145,8 +146,19 @@ public final class TicTacToeLayer extends Layer {
return;
}
} else {
final long start = System.currentTimeMillis();
move = ticTacToeAI.findBestMove(ticTacToe, compurterDifficultyToDepth(10,
information.computerDifficulty()[currentPlayer]));
if (information.computerThinkTime()[currentPlayer] > 0) {
final long elapsedTime = System.currentTimeMillis() - start;
final long sleepTime = information.computerThinkTime()[currentPlayer] * 1000L - elapsedTime;
try {
Thread.sleep(sleepTime);
} catch (InterruptedException _) {}
}
}
if (move == null) {