Fixes
- added simple main - fixed private constructors - added docs
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user