Skip to content

Commit

Permalink
Add Statistics
Browse files Browse the repository at this point in the history
  • Loading branch information
sloenthran committed May 12, 2019
1 parent 5c38db5 commit a18f64f
Show file tree
Hide file tree
Showing 4 changed files with 123 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@
.gradle
boardData.dat
chessNotationData.dat
statistics.dat
JavaChess.jar
2 changes: 1 addition & 1 deletion src/main/java/pl/nogacz/chess/application/Design.java
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public void createTopMenu() {

Button statistics = new Button("Statistics");
statistics.setPrefSize(100, 20);
statistics.setOnMouseClicked(event -> new Statistics());
statistics.setOnMouseClicked(event -> new Statistics().printInfo());

Button author = new Button("Author");
author.setPrefSize(100, 20);
Expand Down
115 changes: 113 additions & 2 deletions src/main/java/pl/nogacz/chess/application/menu/Statistics.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,119 @@
package pl.nogacz.chess.application.menu;

import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;

import java.io.*;
import java.util.ArrayList;
import java.util.Optional;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

/**
* @author Dawid Nogacz on 12.05.2019
*/
//TODO
public class Statistics {
public class Statistics implements Serializable {
private int gameWin = 0;
private int gameLoss = 0;
private int gameDraw = 0;

public Statistics() {
if(isExists()) {
load();
} else {
save();
}
}

public void printInfo() {
Alert alert = new Alert(Alert.AlertType.NONE);
alert.setTitle("JavaChess");
alert.setContentText("Win: " + gameWin + "\n" +
"Loss: " + gameLoss + "\n" +
"Draw: " + gameDraw);

ButtonType reset = new ButtonType("Reset");
ButtonType exit = new ButtonType("OK");

alert.getButtonTypes().setAll(reset, exit);

Optional<ButtonType> result = alert.showAndWait();

if (result.get() == reset){
remove();

gameWin = 0;
gameLoss = 0;
gameDraw = 0;

save();

printInfo();
}
}

private boolean isExists() {
File tempFile = new File("statistics.dat");
return tempFile.exists();
}

private void save() {
try {
ArrayList<Integer> stats = new ArrayList<>();
stats.add(gameWin);
stats.add(gameLoss);
stats.add(gameDraw);

File file = new File("statistics.dat");
ObjectOutputStream output = new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream(file)));
output.writeObject(stats);
output.flush();
output.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

private void load() {
try {
File file = new File("statistics.dat");
ObjectInputStream input = new ObjectInputStream(new GZIPInputStream(new FileInputStream(file)));

Object readObject = input.readObject();
input.close();

if(!(readObject instanceof ArrayList)) throw new Exception("Data is not a ArrayList");

ArrayList<Integer> cacheMap = (ArrayList<Integer>) readObject;

gameWin = cacheMap.get(0);
gameLoss = cacheMap.get(1);
gameDraw = cacheMap.get(2);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}

private void remove() {
File tempFile = new File("statistics.dat");
tempFile.delete();
}

public void addGameWin() {
gameWin++;
remove();
save();
}

public void addGameLoss() {
gameLoss++;
remove();
save();
}

public void addGameDraw() {
gameDraw++;
remove();
save();
}
}
11 changes: 8 additions & 3 deletions src/main/java/pl/nogacz/chess/board/Board.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import javafx.scene.input.MouseEvent;
import pl.nogacz.chess.application.*;
import pl.nogacz.chess.application.menu.EndGame;
import pl.nogacz.chess.application.menu.Statistics;
import pl.nogacz.chess.pawns.Pawn;
import pl.nogacz.chess.pawns.PawnClass;
import pl.nogacz.chess.pawns.PawnColor;
Expand All @@ -25,6 +26,7 @@
public class Board {
private SaveGame saveGame = new SaveGame();
private ChessNotation chessNotation = new ChessNotation();
private Statistics statistics = new Statistics();

private static HashMap<Coordinates, PawnClass> board = new HashMap<>();
private GameLogic gameLogic = new GameLogic();
Expand Down Expand Up @@ -115,6 +117,7 @@ public void readMouseEvent(MouseEvent event) {
if(!gameLogic.isMovePossible()) {
noMovePossibleInfo();
} else if(isKingChecked && possiblePawnIfKingIsChecked.size() == 0) {
statistics.addGameLoss();
endGame("You loss. Maybe you try again?");
} else if(eventCoordinates.isValid()) {

Expand Down Expand Up @@ -202,6 +205,7 @@ public void handle(WorkerStateEvent event) {

checkPromote(moveCoordinates, 1);
} else {
statistics.addGameWin();
endGame("You win! Congratulations :)");
}

Expand Down Expand Up @@ -231,6 +235,7 @@ public void handle(WorkerStateEvent event) {
possiblePawnIfKingIsChecked = gameLogic.getPossiblePawnIfKingIsChecked(PawnColor.BLACK);

if(possiblePawnIfKingIsChecked.size() == 0) {
statistics.addGameWin();
endGame("You win! Congratulations! :)");
} else {
selectedCoordinates = computer.selectRandom(possiblePawnIfKingIsChecked);
Expand All @@ -256,9 +261,9 @@ private void endGame(String message) {

private void noMovePossibleInfo() {
switch(gameLogic.getWinner()) {
case DRAW_COLOR: { endGame("Draw. Maybe you try again?"); break; }
case WHITE: { endGame("You win! Congratulations! :)"); break; }
case BLACK: { endGame("You loss. Maybe you try again?"); break; }
case DRAW_COLOR: { statistics.addGameDraw(); endGame("Draw. Maybe you try again?"); break; }
case WHITE: { statistics.addGameWin(); endGame("You win! Congratulations! :)"); break; }
case BLACK: { statistics.addGameLoss(); endGame("You loss. Maybe you try again?"); break; }
}
}

Expand Down

0 comments on commit a18f64f

Please sign in to comment.