- added simple main
- fixed private constructors
- added docs
This commit is contained in:
2023-12-19 02:50:15 +01:00
parent 918496ed2b
commit ac4ada70df
3 changed files with 43 additions and 7 deletions

View File

@@ -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<Integer, Boolean> 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;
}
}

View File

@@ -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);

View File

@@ -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();
}
});