diff --git a/src/lab10_memento/ex1/CheckpointManager.java b/src/lab10_memento/ex1/CheckpointManager.java new file mode 100644 index 0000000..f3f3314 --- /dev/null +++ b/src/lab10_memento/ex1/CheckpointManager.java @@ -0,0 +1,17 @@ +package lab10_memento.ex1; + +public class CheckpointManager { + private Player.Checkpoint lastCheckpoint = null; + + public void save(Player player) { + lastCheckpoint = player.makeCheckpoint(); + } + + public void restore(Player player) { + if (lastCheckpoint != null) { + lastCheckpoint.restore(player); + } else { + System.out.println("No checkpoint to restore"); + } + } +} diff --git a/src/lab10_memento/ex1/Game.java b/src/lab10_memento/ex1/Game.java new file mode 100644 index 0000000..9a19380 --- /dev/null +++ b/src/lab10_memento/ex1/Game.java @@ -0,0 +1,60 @@ +package lab10_memento.ex1; + +public class Game { + private final Player player; + private final CheckpointManager checkpointManager; + + public Game() { + player = new Player(0, 0, 0); + checkpointManager = new CheckpointManager(); + } + + public void printInfo() { + System.out.println("Player position: (" + player.getX() + "," + player.getY() + ")"); + System.out.println("Player score: " + player.getScore()); + System.out.println(); + } + + public void doTurn(int dx, int dy, int score, boolean isCheckpoint) { + player.moveTo(player.getX() + dx, player.getY() + dy); + System.out.print("Player moves to (" + player.getX() + "," + player.getY() + ")"); + if (score != 0) { + player.increaseScore(score); + System.out.print(" and gains +" + score + " score"); + } + if (isCheckpoint) { + checkpointManager.save(player); + System.out.print(". It's a checkpoint and their position and score are saved"); + } + System.out.println(); + printInfo(); + } + + public void doTurn(int dx, int dy) { + doTurn(dx, dy, 0, false); + } + + public void doTurn(int dx, int dy, int score) { + doTurn(dx, dy, score, false); + } + + public void doTurn(int dx, int dy, boolean isCheckpoint) { + doTurn(dx, dy, 0, isCheckpoint); + } + + public void die() { + checkpointManager.restore(player); + System.out.println("Player died ! Returning to previous checkpoint"); + printInfo(); + } + + public static void main(String[] args) { + Game game = new Game(); + + game.printInfo(); + game.doTurn(1, 1, 100); + game.doTurn(1, 1, true); + game.doTurn(4, 4, 100); + game.die(); + } +} diff --git a/src/lab10_memento/ex1/Player.java b/src/lab10_memento/ex1/Player.java new file mode 100644 index 0000000..2e755fa --- /dev/null +++ b/src/lab10_memento/ex1/Player.java @@ -0,0 +1,68 @@ +package lab10_memento.ex1; + +public class Player { + private int x; + private int y; + private int score; + + public Player(int x, int y, int score) { + this.x = x; + this.y = y; + this.score = score; + } + + public void moveTo(int x, int y) { + this.x = x; + this.y = y; + } + + public void increaseScore(int score) { + this.score += score; + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public int getScore() { + return score; + } + + public Checkpoint makeCheckpoint() { + return new Checkpoint(this); + } + + public class Checkpoint { + private final int x; + private final int y; + private final int score; + + public Checkpoint(Player player) { + x = player.getX(); + y = player.getY(); + score = player.getScore(); + } + + public int getX() { + return x; + } + + public int getY() { + return y; + } + + public int getScore() { + return score; + } + + public void restore(Player player) { + player.x = this.getX(); + player.y = this.getY(); + player.score = this.getScore(); + } + } +}