Fixes
- added simple main - fixed private constructors - added docs
This commit is contained in:
@@ -1,8 +1,38 @@
|
|||||||
package net.berack.upo.ai;
|
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 class Main {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
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.
|
* Crea una nuova istanza del gioco sottoforma di finestra.
|
||||||
* In essa si potrà giocare muovendo le tessere al posto della tessera vuota.
|
* 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
|
* 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.
|
* Come default viene creato il puzzle "GOAL" ovvero non mescolato.
|
||||||
*/
|
*/
|
||||||
private Puzzle8GUI() {
|
public Puzzle8GUI() {
|
||||||
super("Puzzle 8 game");
|
super("Puzzle 8 game");
|
||||||
|
|
||||||
var grid = new GridLayout(Puzzle8.LENGTH, Puzzle8.LENGTH);
|
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_X;
|
||||||
private static final ImageIcon IMAGE_O;
|
private static final ImageIcon IMAGE_O;
|
||||||
@@ -48,8 +49,14 @@ public class TrisGUI extends JFrame {
|
|||||||
private JCheckBoxMenuItem aiFirst;
|
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");
|
super("Tris");
|
||||||
|
|
||||||
var grid = new GridLayout(Tris.LENGTH, Tris.LENGTH);
|
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() {
|
public void reset() {
|
||||||
this.tris = new Tris();
|
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)
|
* Dopo questo metodo la finestra verrà ridisegnata (sempre se ci sono stati dei cambiamenti)
|
||||||
* Nel caso in cui sia stata precedentemente calcolata la soluzione,
|
* Nel caso in cui ci sia un vincitore il tris verrà colorato di rosso
|
||||||
* allora verrà evidenziata una tessera con il colore rosso per indicare
|
|
||||||
* la mossa migliore da fare per la risoluzione.
|
|
||||||
*/
|
*/
|
||||||
public void redraw() {
|
public void redraw() {
|
||||||
for(var arr: this.buttons) {
|
for(var arr: this.buttons) {
|
||||||
@@ -163,7 +169,7 @@ public class TrisGUI extends JFrame {
|
|||||||
this.addActionListener(action -> {
|
this.addActionListener(action -> {
|
||||||
if(tris.isPlayAvailable(x, y) && !tris.isFinished()) {
|
if(tris.isPlayAvailable(x, y) && !tris.isFinished()) {
|
||||||
tris.play(x, y);
|
tris.play(x, y);
|
||||||
if(ai != null) ai.playNext();
|
if(ai != null && !tris.isFinished()) ai.playNext();
|
||||||
redraw();
|
redraw();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user