mirror of
https://github.com/2OOP/pism.git
synced 2026-02-04 19:04:49 +00:00
made more classes deepClonable.
This commit is contained in:
@@ -60,7 +60,9 @@ public abstract class BitboardGame<T extends BitboardGame<T>> implements TurnBas
|
||||
|
||||
this.playerBitboard = Arrays.copyOf(other.playerBitboard, other.playerBitboard.length);
|
||||
this.currentTurn = other.currentTurn;
|
||||
this.players = Arrays.copyOf(other.players, other.players.length); // TODO: Make this a deep copy
|
||||
this.players = Arrays.stream(other.players)
|
||||
.map(Player<T>::deepCopy)
|
||||
.toArray(Player[]::new);
|
||||
}
|
||||
|
||||
public int getColumnSize() {
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package org.toop.game.games.reversi;
|
||||
|
||||
import org.toop.framework.gameFramework.model.player.AI;
|
||||
import org.toop.framework.gameFramework.model.player.AbstractAI;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public final class ReversiAIR extends AbstractAI<BitboardReversi> {
|
||||
public final class ReversiAIR extends AbstractAI<BitboardReversi>{
|
||||
public int getMove(BitboardReversi game) {
|
||||
int[] moves = game.getLegalMoves();
|
||||
if (moves.length == 0) return -1;
|
||||
@@ -12,4 +13,8 @@ public final class ReversiAIR extends AbstractAI<BitboardReversi> {
|
||||
int inty = new Random().nextInt(0, moves.length);
|
||||
return moves[inty];
|
||||
}
|
||||
|
||||
public ReversiAIR deepCopy() {
|
||||
return new ReversiAIR();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.toop.game.games.tictactoe;
|
||||
|
||||
import org.toop.framework.gameFramework.model.player.AI;
|
||||
import org.toop.framework.gameFramework.model.player.AbstractAI;
|
||||
import org.toop.framework.gameFramework.model.game.PlayResult;
|
||||
import org.toop.framework.gameFramework.GameState;
|
||||
@@ -99,4 +100,9 @@ public final class TicTacToeAIR extends AbstractAI<BitboardTicTacToe> {
|
||||
|
||||
return score;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AI<BitboardTicTacToe> deepCopy() {
|
||||
return new TicTacToeAIR();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package org.toop.game.players;
|
||||
|
||||
import org.toop.framework.gameFramework.model.player.AbstractAI;
|
||||
import org.toop.framework.gameFramework.model.player.AbstractPlayer;
|
||||
import org.toop.framework.gameFramework.model.player.MoveProvider;
|
||||
import org.toop.framework.gameFramework.model.player.*;
|
||||
import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
||||
|
||||
/**
|
||||
@@ -17,18 +15,23 @@ import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
||||
public class ArtificialPlayer<T extends TurnBasedGame<T>> extends AbstractPlayer<T> {
|
||||
|
||||
/** The AI instance used to calculate moves. */
|
||||
private final MoveProvider<T> ai;
|
||||
private final AI<T> ai;
|
||||
|
||||
/**
|
||||
* Constructs a new ArtificialPlayer using the specified AI.
|
||||
*
|
||||
* @param ai the AI instance that determines moves for this player
|
||||
*/
|
||||
public ArtificialPlayer(MoveProvider<T> ai, String name) {
|
||||
public ArtificialPlayer(AI<T> ai, String name) {
|
||||
super(name);
|
||||
this.ai = ai;
|
||||
}
|
||||
|
||||
public ArtificialPlayer(ArtificialPlayer<T> other) {
|
||||
super(other);
|
||||
this.ai = other.ai.deepCopy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines the next move for this player using its AI.
|
||||
* <p>
|
||||
@@ -44,4 +47,9 @@ public class ArtificialPlayer<T extends TurnBasedGame<T>> extends AbstractPlayer
|
||||
public int getMove(T gameCopy) {
|
||||
return ai.getMove(gameCopy);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArtificialPlayer<T> deepCopy() {
|
||||
return new ArtificialPlayer<T>(this);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.toop.game.players;
|
||||
|
||||
import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
||||
import org.toop.framework.gameFramework.model.player.AbstractPlayer;
|
||||
import org.toop.framework.gameFramework.model.player.Player;
|
||||
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
@@ -16,6 +17,10 @@ public class LocalPlayer<T extends TurnBasedGame<T>> extends AbstractPlayer<T> {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public LocalPlayer(LocalPlayer<T> other) {
|
||||
super(other);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMove(T gameCopy) {
|
||||
return getValidMove(gameCopy);
|
||||
@@ -57,6 +62,11 @@ public class LocalPlayer<T extends TurnBasedGame<T>> extends AbstractPlayer<T> {
|
||||
return move;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocalPlayer<T> deepCopy() {
|
||||
return new LocalPlayer<T>(this.getName());
|
||||
}
|
||||
|
||||
/*public void register() {
|
||||
// Listening to PlayerAttemptedMove
|
||||
new EventFlow().listen(GUIEvents.PlayerAttemptedMove.class, event -> {
|
||||
|
||||
@@ -2,6 +2,7 @@ package org.toop.game.players;
|
||||
|
||||
import org.toop.framework.gameFramework.model.game.TurnBasedGame;
|
||||
import org.toop.framework.gameFramework.model.player.AbstractPlayer;
|
||||
import org.toop.framework.gameFramework.model.player.Player;
|
||||
|
||||
/**
|
||||
* Represents a player controlled remotely or over a network.
|
||||
@@ -23,4 +24,13 @@ public class OnlinePlayer<T extends TurnBasedGame<T>> extends AbstractPlayer<T>
|
||||
public OnlinePlayer(String name) {
|
||||
super(name);
|
||||
}
|
||||
|
||||
public OnlinePlayer(OnlinePlayer<T> other) {
|
||||
super(other);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Player<T> deepCopy() {
|
||||
return new OnlinePlayer<>(this);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user