From ac4ada70df845be1eb8feb0bafd6c0c23c862eaf Mon Sep 17 00:00:00 2001 From: Berack96 Date: Tue, 19 Dec 2023 02:50:15 +0100 Subject: [PATCH] Fixes - added simple main - fixed private constructors - added docs --- src/main/java/net/berack/upo/ai/Main.java | 30 +++++++++++++++++++ .../berack/upo/ai/problem1/Puzzle8GUI.java | 4 +-- .../net/berack/upo/ai/problem2/TrisGUI.java | 16 ++++++---- 3 files changed, 43 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/berack/upo/ai/Main.java b/src/main/java/net/berack/upo/ai/Main.java index b801ed0..b238aa2 100644 --- a/src/main/java/net/berack/upo/ai/Main.java +++ b/src/main/java/net/berack/upo/ai/Main.java @@ -1,8 +1,38 @@ package net.berack.upo.ai; +import java.util.Scanner; +import java.util.function.Function; + +import net.berack.upo.ai.problem1.Puzzle8GUI; +import net.berack.upo.ai.problem2.TrisGUI; + public class Main { public static void main(String[] args) { + var value = read("What do you want to play?\n1. Puzzle8\n2. Tris\n", new Scanner(System.in), num -> num > 0 && num < 2); + var window = switch (value) { + case 1 -> new Puzzle8GUI(); + case 2 -> new TrisGUI(); + default -> null; + }; + if(window != null) { + window.toFront(); + window.requestFocus(); + } + } + + private static int read(String out, Scanner in, Function control) { + var ret = 0; + + do { + try { + System.out.print(out); + var str = in.nextLine(); + ret = Integer.parseInt(str); + } catch (NumberFormatException ignore) {} + } while(!control.apply(ret)); + + return ret; } } \ No newline at end of file diff --git a/src/main/java/net/berack/upo/ai/problem1/Puzzle8GUI.java b/src/main/java/net/berack/upo/ai/problem1/Puzzle8GUI.java index ab7ad14..b0e145e 100644 --- a/src/main/java/net/berack/upo/ai/problem1/Puzzle8GUI.java +++ b/src/main/java/net/berack/upo/ai/problem1/Puzzle8GUI.java @@ -45,11 +45,11 @@ public class Puzzle8GUI extends JFrame { * Crea una nuova istanza del gioco sottoforma di finestra. * In essa si potrà giocare muovendo le tessere al posto della tessera vuota. * Inoltre ci saranno sarà una menubar con delle opzioni tra le quali - * il mescolare le tessere e l'eveidenziazione della migliore mossa. + * il mescolare le tessere e l'evidenziazione della migliore mossa. * * Come default viene creato il puzzle "GOAL" ovvero non mescolato. */ - private Puzzle8GUI() { + public Puzzle8GUI() { super("Puzzle 8 game"); var grid = new GridLayout(Puzzle8.LENGTH, Puzzle8.LENGTH); diff --git a/src/main/java/net/berack/upo/ai/problem2/TrisGUI.java b/src/main/java/net/berack/upo/ai/problem2/TrisGUI.java index 2254868..57ed1b3 100644 --- a/src/main/java/net/berack/upo/ai/problem2/TrisGUI.java +++ b/src/main/java/net/berack/upo/ai/problem2/TrisGUI.java @@ -27,6 +27,7 @@ public class TrisGUI extends JFrame { } /** + * Caricamento statico delle immagini */ private static final ImageIcon IMAGE_X; private static final ImageIcon IMAGE_O; @@ -48,8 +49,14 @@ public class TrisGUI extends JFrame { private JCheckBoxMenuItem aiFirst; /** + * Crea una nuova istanza del gioco sottoforma di finestra. + * In essa si potrà giocare premendo sulla zona in cui si vuole mettere il proprio simbolo. + * Inoltre ci saranno sarà una menubar con delle opzioni tra le quali + * il resettare il gioco e la possibilità di far giocar una AI. + * + * Come default viene abilitata la AI come secondo giocatore. */ - private TrisGUI() { + public TrisGUI() { super("Tris"); var grid = new GridLayout(Tris.LENGTH, Tris.LENGTH); @@ -101,6 +108,7 @@ public class TrisGUI extends JFrame { } /** + * Resetta il gioco e ne crea uno vuoto */ public void reset() { this.tris = new Tris(); @@ -111,9 +119,7 @@ public class TrisGUI extends JFrame { /** * Dopo questo metodo la finestra verrà ridisegnata (sempre se ci sono stati dei cambiamenti) - * Nel caso in cui sia stata precedentemente calcolata la soluzione, - * allora verrà evidenziata una tessera con il colore rosso per indicare - * la mossa migliore da fare per la risoluzione. + * Nel caso in cui ci sia un vincitore il tris verrà colorato di rosso */ public void redraw() { for(var arr: this.buttons) { @@ -163,7 +169,7 @@ public class TrisGUI extends JFrame { this.addActionListener(action -> { if(tris.isPlayAvailable(x, y) && !tris.isFinished()) { tris.play(x, y); - if(ai != null) ai.playNext(); + if(ai != null && !tris.isFinished()) ai.playNext(); redraw(); } });