From a20340450e8e082eb9310e29fb5f3b3bd3bd6dde Mon Sep 17 00:00:00 2001 From: luizfernandodag Date: Wed, 11 Oct 2023 16:02:48 -0300 Subject: [PATCH] =?UTF-8?q?Luiz=20solu=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- jogo-oito/.gitignore | 1 - .../org.eclipse.core.resources.prefs | 2 - .../.settings/org.eclipse.jdt.core.prefs | 8 - .../.settings/org.eclipse.m2e.core.prefs | 4 - jogo-oito/src/main/java/AStar.java | 84 ++++++ jogo-oito/src/main/java/BFS.java | 84 ++++++ jogo-oito/src/main/java/Enunciado.pdf | Bin 0 -> 67021 bytes jogo-oito/src/main/java/Main.java | 96 +++++++ jogo-oito/src/main/java/State.java | 240 ++++++++++++++++++ .../src/main/java/facade/Controller.java | 41 --- jogo-oito/src/main/java/interfaces/Edge.java | 19 -- jogo-oito/src/main/java/interfaces/Graph.java | 28 -- .../src/main/java/interfaces/Vertex.java | 36 --- jogo-oito/src/main/java/jogo82.iml | 11 + jogo-oito/src/main/java/model/Adjacent.java | 40 --- jogo-oito/src/main/java/model/Cell.java | 109 -------- jogo-oito/src/main/java/model/Keyboard.java | 38 --- jogo-oito/src/main/java/model/Matrix.java | 80 ------ jogo-oito/src/main/java/readme.md | 25 ++ jogo-oito/src/main/java/util/Board.java | 94 ------- jogo-oito/src/main/java/view/JogoDosOito.java | 148 ----------- 21 files changed, 540 insertions(+), 648 deletions(-) delete mode 100644 jogo-oito/.gitignore delete mode 100644 jogo-oito/.settings/org.eclipse.core.resources.prefs delete mode 100644 jogo-oito/.settings/org.eclipse.jdt.core.prefs delete mode 100644 jogo-oito/.settings/org.eclipse.m2e.core.prefs create mode 100644 jogo-oito/src/main/java/AStar.java create mode 100644 jogo-oito/src/main/java/BFS.java create mode 100644 jogo-oito/src/main/java/Enunciado.pdf create mode 100644 jogo-oito/src/main/java/Main.java create mode 100644 jogo-oito/src/main/java/State.java delete mode 100644 jogo-oito/src/main/java/facade/Controller.java delete mode 100644 jogo-oito/src/main/java/interfaces/Edge.java delete mode 100644 jogo-oito/src/main/java/interfaces/Graph.java delete mode 100644 jogo-oito/src/main/java/interfaces/Vertex.java create mode 100644 jogo-oito/src/main/java/jogo82.iml delete mode 100644 jogo-oito/src/main/java/model/Adjacent.java delete mode 100644 jogo-oito/src/main/java/model/Cell.java delete mode 100644 jogo-oito/src/main/java/model/Keyboard.java delete mode 100644 jogo-oito/src/main/java/model/Matrix.java create mode 100644 jogo-oito/src/main/java/readme.md delete mode 100644 jogo-oito/src/main/java/util/Board.java delete mode 100644 jogo-oito/src/main/java/view/JogoDosOito.java diff --git a/jogo-oito/.gitignore b/jogo-oito/.gitignore deleted file mode 100644 index b83d2226..00000000 --- a/jogo-oito/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target/ diff --git a/jogo-oito/.settings/org.eclipse.core.resources.prefs b/jogo-oito/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index 99f26c02..00000000 --- a/jogo-oito/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding/=UTF-8 diff --git a/jogo-oito/.settings/org.eclipse.jdt.core.prefs b/jogo-oito/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bc0c2fff..00000000 --- a/jogo-oito/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,8 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.targetPlatform=18 -org.eclipse.jdt.core.compiler.compliance=18 -org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore -org.eclipse.jdt.core.compiler.release=disabled -org.eclipse.jdt.core.compiler.source=18 diff --git a/jogo-oito/.settings/org.eclipse.m2e.core.prefs b/jogo-oito/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1..00000000 --- a/jogo-oito/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/jogo-oito/src/main/java/AStar.java b/jogo-oito/src/main/java/AStar.java new file mode 100644 index 00000000..a681e5fb --- /dev/null +++ b/jogo-oito/src/main/java/AStar.java @@ -0,0 +1,84 @@ +/* + * Trabalho Jogo dos 8 e Metodos de busca + * + * Inteligencia Artificial - GCC128 + * + * Sistemas de Informação + * Universidade Federal de Lavras + * + * Autor: Alfredo + */ + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.PriorityQueue; +import java.util.Queue; + + +public class AStar { + State estadoInicial; + State estadoFinal; + PriorityQueue pq; + Queue visitados; + + //construtor recebe o array atual e o final para ser utilizado no calculo do custo + public AStar(ArrayList ini, ArrayList fin){ + estadoInicial = new State(ini,fin); + estadoFinal = new State(fin,fin); + pq = new PriorityQueue<>(); + visitados = new LinkedList<>(); + pq.add(estadoInicial); + } + + //resolve a instancia do problema + public void solve(){ + State estadoAtual; + ArrayList children; + boolean flag; + int countMovimentos = 0; + int countAbertos = 0; + + while (!pq.isEmpty()){ + estadoAtual = pq.poll(); + this.visitados.add(estadoAtual); + + //imprime para teste + countMovimentos++; // + System.out.println("Movimento: " + countMovimentos); // + estadoAtual.printState(); // + System.out.println("Cost: " + estadoAtual.getCost()); // + System.out.println(); // + + + + //compara o estado atual com a solução do problema + if (estadoAtual.equals(this.estadoFinal)){ + System.out.println("Resolucao encontrada:"); + estadoAtual.printState(); + System.out.println("Nos abertos repetidos: " + (countAbertos - countMovimentos)); // + return; + } + + + //gera filhos e caso seja diferente de todos visitados, adiciona na fila de prioridade pq + children = estadoAtual.genChildren(); + for (State it : children){ + flag = true; + for(State it2 : this.visitados){ + if (it.equals(it2)){ + flag = false; + break; + } + } + if (flag){ + State auxState = new State(it.n,estadoFinal.n); + pq.add(auxState); + countAbertos++; // + } + } + } + } + + + +} diff --git a/jogo-oito/src/main/java/BFS.java b/jogo-oito/src/main/java/BFS.java new file mode 100644 index 00000000..c3730925 --- /dev/null +++ b/jogo-oito/src/main/java/BFS.java @@ -0,0 +1,84 @@ +/* + * Trabalho Jogo dos 8 e Metodos de busca + * + * Inteligencia Artificial - GCC128 + * + * Sistemas de Informação + * Universidade Federal de Lavras + * + * + * Autor: Alfredo + * + */ + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.Queue; + +public class BFS { + + State estadoInicial; + State estadoFinal; + Queue q; + Queue visitados; + + + //construtor + public BFS(ArrayList ini, ArrayList fin){ + estadoInicial = new State(ini); + estadoFinal = new State(fin); + q = new LinkedList<>(); + visitados = new LinkedList<>(); + q.add(estadoInicial); + } + + //resolve essa instancia do problema + public void solve(){ + State estadoAtual; + ArrayList children; + boolean flag; + int countMovimentos = 0; + int countAbertos = 0; + + while (!q.isEmpty()){ + estadoAtual = q.remove(); + this.visitados.add(estadoAtual); + + + + //imprime para teste + countMovimentos++; // + System.out.println("Movimento: " + countMovimentos); // + estadoAtual.printState(); // + System.out.println(); // + + + + //compara o estado atual com a solução do problema + if (estadoAtual.equals(this.estadoFinal)){ + System.out.println("Resolucao encontrada:"); + estadoAtual.printState(); + System.out.println("Nos abertos repetidos: " + (countAbertos - countMovimentos)); // + return; + } + + + //gera filhos e caso seja diferente de todos visitados, adiciona na fila q + children = estadoAtual.genChildren(); + for (State it : children){ + flag = true; + for(State it2 : this.visitados){ + if (it.equals(it2)){ + flag = false; + break; + } + } + if (flag){ + q.add(it); + countAbertos++; // + } + } + } + } + +} diff --git a/jogo-oito/src/main/java/Enunciado.pdf b/jogo-oito/src/main/java/Enunciado.pdf new file mode 100644 index 0000000000000000000000000000000000000000..07f35aa84fa2d40c52bb35fb10e0637cc2377556 GIT binary patch literal 67021 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 aA~HQ#n?d{&iLcCc^O0v- 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 estadoInicial = new ArrayList<>(); + ArrayList estadoFinal = new ArrayList<>(); + + + estadoInicial.add(1); + estadoInicial.add(2); + estadoInicial.add(3); + estadoInicial.add(5); + estadoInicial.add(0); + estadoInicial.add(6); + estadoInicial.add(4); + estadoInicial.add(7); + estadoInicial.add(8); + + + estadoFinal.add(1); + estadoFinal.add(2); + estadoFinal.add(3); + estadoFinal.add(4); + estadoFinal.add(5); + estadoFinal.add(6); + estadoFinal.add(7); + estadoFinal.add(8); + estadoFinal.add(0); + + State si = new State(estadoInicial); + State sf = new State(estadoFinal); + + Scanner scanner; + Scanner scanner2; + int option; + int qtdMoves; + + do{ + System.out.println("Estado inicial:"); + si.printState(); + System.out.println(); + + System.out.println("Solucao a ser procurada:"); + sf.printState(); + System.out.println(); + + System.out.println("Digite:"); + System.out.println("1 - Resolver por busca em largura (BFS)"); + System.out.println("2 - Resolver por busca A*"); + System.out.println("3 - Randomizar tabuleiro"); + + scanner = new Scanner(System.in); + + option = scanner.nextInt(); + + switch (option) { + case 1 -> { + BFS bfs = new BFS(si.n,sf.n); + bfs.solve(); + } + case 2 -> { + AStar astar = new AStar(si.n,sf.n); + astar.solve(); + } + + case 3 -> { + System.out.println("Quantos movimentos aleatorios deseja realizar?"); + scanner2 = new Scanner(System.in); + qtdMoves = scanner2.nextInt(); + si.randomize(qtdMoves); + } + + default -> System.out.println("Digite uma opção va3lida"); + } + }while (!(option==1 || option==2)); + + + } + +} diff --git a/jogo-oito/src/main/java/State.java b/jogo-oito/src/main/java/State.java new file mode 100644 index 00000000..cc710767 --- /dev/null +++ b/jogo-oito/src/main/java/State.java @@ -0,0 +1,240 @@ +/* + * Trabalho Jogo dos 8 e Metodos de busca + * + * Inteligencia Artificial - GCC128 + * + * Sistemas de Informação + * Universidade Federal de Lavras + * + * + * Autor: Alfredo + * + */ + +import java.util.ArrayList; +import java.util.Objects; + +public class State implements Comparable{ + + public ArrayList n; + public int cost; + + + //construtor para BFS + public State (ArrayList v){ + n = new ArrayList<>(v); + } + + //construtor para AStar + public State(ArrayList stateIni, ArrayList stateFin){ + n = new ArrayList<>(stateIni); + this.cost = calculateCost(stateFin); //já calcula o custo do estado com relação ao final + } + + + //calcula o custo em relação ao estado final com base em uma tabela de custos pre-calculada + public final int calculateCost(ArrayList stateFinal){ + int totalCost = 0; + int auxFinalIndex; + int[][] costTable = { + {0,1,2,1,2,3,2,3,4}, + {1,0,1,2,1,2,3,2,3}, + {2,1,0,3,2,1,4,3,2}, + {1,2,3,0,1,2,1,2,3}, + {2,1,2,1,0,1,2,1,2}, + {3,2,1,2,1,0,3,2,1}, + {2,3,4,1,2,3,0,1,2}, + {3,2,3,2,1,2,1,0,1}, + {4,3,2,3,2,1,2,1,0} + }; + for(int i=0; i genChildren(){ + ArrayList children = new ArrayList<>(); + State s; + s = this.moveUp(); + if (s != null){ + children.add(s); + } + s = this.moveDown(); + if (s != null){ + children.add(s); + } + s = this.moveLeft(); + if (s != null){ + children.add(s); + } + s = this.moveRight(); + if (s != null){ + children.add(s); + } + return children; + } + + //executa n movimentos para embaralhar o tabuleiro + public void randomize(int n){ + int zeroPos; + int rand; + + for (int i=0; i { //move up + if((zeroPos==0) || (zeroPos==1) || (zeroPos==2)){ + + }else{ + this.n.set(zeroPos, this.n.get(zeroPos-3)); + this.n.set(zeroPos-3, 0); + } + } + case 2 -> { //move down + if((zeroPos==6) || (zeroPos==7) || (zeroPos==8)){ + + }else{ + this.n.set(zeroPos, this.n.get(zeroPos+3)); + this.n.set(zeroPos+3, 0); + } + } + case 3 -> { //move left + if((zeroPos==0) || (zeroPos==3) || (zeroPos==6)){ + + }else{ + this.n.set(zeroPos, this.n.get(zeroPos-1)); + this.n.set(zeroPos-1, 0); + } + } + + case 4 -> {//move right + if((zeroPos==2) || (zeroPos==5) || (zeroPos==8)){ + + }else{ + this.n.set(zeroPos, this.n.get(zeroPos+1)); + this.n.set(zeroPos+1, 0); + } + } + } + } + } + + /** + * compara o objeto com outro recebido + * + * @param o => recebe como parametro outro objeto tipo State para comparação de seus ArrayList + * @return retorna true caso os dois Objetos tenham seus ArrayList com os mesmos valores + */ + @Override + public boolean equals(Object o){ + if (o == null) { + return false; + } + if (o.getClass()!= this.getClass()){ + return false; + } + boolean result = false; + State s = (State) o; + for (int i=0; i getCells() { - return this.board.getCells(); - } - - public void swap(Integer keyCode) { - this.board.swap(keyCode); - } - - public Boolean checkGameOver() { - return this.board.checkGameOver(); - - } - - public void click(Integer cellValue) { - this.board.click(cellValue); - } - -} diff --git a/jogo-oito/src/main/java/interfaces/Edge.java b/jogo-oito/src/main/java/interfaces/Edge.java deleted file mode 100644 index 20e56cd0..00000000 --- a/jogo-oito/src/main/java/interfaces/Edge.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ -package interfaces; - -import model.Keyboard; - -/** - * - * @author allen - */ -public interface Edge { - - Keyboard getKey(); - - Vertex getCell(); - -} diff --git a/jogo-oito/src/main/java/interfaces/Graph.java b/jogo-oito/src/main/java/interfaces/Graph.java deleted file mode 100644 index e22aad8e..00000000 --- a/jogo-oito/src/main/java/interfaces/Graph.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template - */ -package interfaces; - -import java.util.List; - -/** - * - * @author allen - */ -public interface Graph { - - void feedback(); - - void setting(); - - void swap(Integer keyCode); - - List getCells(); - - Vertex getEmptyCell(); - - void click(Integer cellValue); - - Boolean checkGameOver(); -} diff --git a/jogo-oito/src/main/java/interfaces/Vertex.java b/jogo-oito/src/main/java/interfaces/Vertex.java deleted file mode 100644 index 4ff55e4b..00000000 --- a/jogo-oito/src/main/java/interfaces/Vertex.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template - */ -package interfaces; - -import java.util.List; -import model.Keyboard; - -/** - * - * @author allen - */ -public interface Vertex { - - void setValue(Integer value); - - Integer getValue(); - - void creatingHorizontalAdjacent(Vertex cell); - - void creatingVerticalAdjacent(Vertex cell); - - String valueToText(); - - Edge getAdjacentByKeyCode(Keyboard key); - - Vertex click(Keyboard key); - - List getAdjacents(); - - void addAdjacents(Edge edge); - - Vertex swapCells(Integer value); - -} diff --git a/jogo-oito/src/main/java/jogo82.iml b/jogo-oito/src/main/java/jogo82.iml new file mode 100644 index 00000000..1de981c3 --- /dev/null +++ b/jogo-oito/src/main/java/jogo82.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jogo-oito/src/main/java/model/Adjacent.java b/jogo-oito/src/main/java/model/Adjacent.java deleted file mode 100644 index 6573c4f4..00000000 --- a/jogo-oito/src/main/java/model/Adjacent.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ -package model; - -import interfaces.Edge; -import interfaces.Vertex; -import java.util.Objects; - -/** - * - * @author allen - */ -public class Adjacent implements Edge{ - - private final Keyboard key; - private final Vertex cell; - - public Adjacent(Keyboard key, Vertex cell) { - this.key = key; - this.cell = cell; - } - - @Override - public Keyboard getKey() { - return this.key; - } - - @Override - public Vertex getCell() { - return this.cell; - } - - @Override - public boolean equals(Object obj) { - return Objects.equals(((Adjacent) obj).getKey(), this.getKey()); - } - -} diff --git a/jogo-oito/src/main/java/model/Cell.java b/jogo-oito/src/main/java/model/Cell.java deleted file mode 100644 index 744d8d39..00000000 --- a/jogo-oito/src/main/java/model/Cell.java +++ /dev/null @@ -1,109 +0,0 @@ -package model; - -import interfaces.Edge; -import interfaces.Vertex; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; - -public class Cell implements Vertex { - - private Integer value; - private final List adjacents; - public static Integer content; - - public Cell(Integer value) { - this.value = value; - this.adjacents = new ArrayList<>(); - } - - public Cell() { - this.value = Cell.content++; - this.adjacents = new ArrayList<>(); - } - - @Override - public void setValue(Integer value) { - this.value = value; - } - - @Override - public Integer getValue() { - return this.value; - } - - @Override - public void creatingHorizontalAdjacent(Vertex cell) { - this.adjacents.add(new Adjacent(Keyboard.LEFT, cell)); - cell.getAdjacents().add(new Adjacent(Keyboard.RIGHT, this)); - } - - @Override - public void creatingVerticalAdjacent(Vertex cell) { - this.adjacents.add(new Adjacent(Keyboard.UP, cell)); - cell.getAdjacents().add(new Adjacent(Keyboard.DOWN, this)); - } - - @Override - public String valueToText() { - return Optional.of(this.value) - .filter(value -> value != 0) - .map(String::valueOf) - .orElse(""); - } - - @Override - public Edge getAdjacentByKeyCode(Keyboard key) { - Adjacent edge = new Adjacent(key, null); - Integer indexEdge = this.adjacents.indexOf(edge); - return Optional.of(indexEdge) - .filter(index -> index != -1) - .map(this.adjacents::get) - .orElse(null); - } - - @Override - public Vertex click(Keyboard key) { - Edge adjacent = this.getAdjacentByKeyCode(key); - return this.movement(adjacent); - } - - private Vertex movement(Edge adjacent) { - return Optional.ofNullable(adjacent) - .map(Edge::getCell) - .map(this::swapCells) - .orElse(this); - } - - private Vertex swapCells(Vertex movementCell) { - this.setValue(movementCell.getValue()); - movementCell.setValue(0); - return movementCell; - } - - @Override - public Vertex swapCells(Integer value) { - return this.adjacents.stream() - .filter(adjacent -> Objects.equals(adjacent.getCell().getValue(), value)) - .findFirst() - .map(this::movement) - .orElse(this); - } - - @Override - public List getAdjacents() { - return this.adjacents; - } - - @Override - public void addAdjacents(Edge edge) { - this.adjacents.add(edge); - } - - @Override - public boolean equals(Object obj) { - return Objects.equals(this.value, ((Cell) obj).value); - } - -} diff --git a/jogo-oito/src/main/java/model/Keyboard.java b/jogo-oito/src/main/java/model/Keyboard.java deleted file mode 100644 index ada8bb7a..00000000 --- a/jogo-oito/src/main/java/model/Keyboard.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ -package model; - -import java.awt.event.KeyEvent; -import java.util.Arrays; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public enum Keyboard { - - UP(KeyEvent.VK_UP), - DOWN(KeyEvent.VK_DOWN), - LEFT(KeyEvent.VK_LEFT), - RIGHT(KeyEvent.VK_RIGHT); - - private final Integer value; - - private static final Map map = Arrays.stream(Keyboard.values()) - .collect(Collectors.toMap(Keyboard::getValue, Function.identity())); - - - Keyboard(Integer value) { - this.value = value; - } - - public Integer getValue() { - return value; - } - - public static Keyboard fromValue(Integer value) { - return map.get(value); - } - -} diff --git a/jogo-oito/src/main/java/model/Matrix.java b/jogo-oito/src/main/java/model/Matrix.java deleted file mode 100644 index 29586eaa..00000000 --- a/jogo-oito/src/main/java/model/Matrix.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license - * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template - */ -package model; - -import interfaces.Vertex; -import java.util.ArrayList; -import java.util.List; - -/** - * - * @author allen - */ -public final class Matrix { - - private final Row firstRow; - private final Row secondRow; - private final Row thirdRow; - public static List cells; - - - public Matrix() { - Matrix.cells = new ArrayList<>(); - Cell.content = 1; - this.firstRow = new Row(); - this.secondRow = new Row(); - this.thirdRow = new Row(); - this.defineAdjacent(); - } - - private void defineAdjacent() { - this.firstRow.initial.creatingVerticalAdjacent(secondRow.initial); - this.secondRow.initial.creatingVerticalAdjacent(thirdRow.initial); - - this.firstRow.center.creatingVerticalAdjacent(secondRow.center); - this.secondRow.center.creatingVerticalAdjacent(thirdRow.center); - - this.firstRow.last.creatingVerticalAdjacent(secondRow.last); - this.secondRow.last.creatingVerticalAdjacent(thirdRow.last); - - this.changePositionToValidateTemplate(); - } - - private void changePositionToValidateTemplate(){ - this.thirdRow.last.setValue(0); - } - - - public List getCells() { - return Matrix.cells; - } - - private final class Row { - - public final Cell initial; - public final Cell center; - public final Cell last; - - public Row() { - this.initial = new Cell(); - this.center = new Cell(); - this.last = new Cell(); - this.defineAdjacent(); - this.loadCells(); - } - - public void loadCells() { - Matrix.cells.add(this.initial); - Matrix.cells.add(this.center); - Matrix.cells.add(this.last); - } - - public void defineAdjacent() { - this.initial.creatingHorizontalAdjacent(this.center); - this.center.creatingHorizontalAdjacent(this.last); - } - - } -} diff --git a/jogo-oito/src/main/java/readme.md b/jogo-oito/src/main/java/readme.md new file mode 100644 index 00000000..3b816425 --- /dev/null +++ b/jogo-oito/src/main/java/readme.md @@ -0,0 +1,25 @@ +# Trabalho Jogo dos 8 e Metodos de busca + +

Inteligencia Artificial - GCC128

+ + +

Descrição:

+ +Código em Java para a resolução do Eight-Puzzle-Game
+aplicando métodos de Busca em Largura e A*
+
+ +

Comando para compilar:

+ +javac State.java BFS.java AStar.java Main.java
+
+ + +

Para rodar:

+ +java Main +
+
+[VIDEO]
+https://youtu.be/bvydHQviFbQ + diff --git a/jogo-oito/src/main/java/util/Board.java b/jogo-oito/src/main/java/util/Board.java deleted file mode 100644 index e71e83ea..00000000 --- a/jogo-oito/src/main/java/util/Board.java +++ /dev/null @@ -1,94 +0,0 @@ -package util; - -import interfaces.Graph; -import interfaces.Vertex; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; -import java.util.List; -import java.util.Optional; -import java.util.stream.IntStream; -import model.Keyboard; -import model.Matrix; - -public class Board implements Graph { - - private List cells; - private Vertex emptyCell; - private Integer length; - private Matrix matrix; - - public Board() { - } - - @Override - public void feedback() { - this.matrix = new Matrix(); - this.cells = this.matrix.getCells(); - this.length = cells.size(); - this.defineEmptyCell(); - } - - @Override - public void setting() { - this.matrix = new Matrix(); - this.cells = this.matrix.getCells(); - this.length = cells.size(); - this.shuffleCell(); - this.defineEmptyCell(); - - } - - private void shuffleCell() { - Iterator iterator = this.shuffleValues().iterator(); - this.cells.stream() - .forEach(vertex -> vertex.setValue(iterator.next())); - } - - private List shuffleValues() { - List values = new ArrayList<>(); - this.cells.stream() - .map(Vertex::getValue) - .forEach(values::add); - Collections.shuffle(values); - return values; - } - - private void defineEmptyCell() { - Optional minCell = this.cells.stream() - .min(Comparator.comparing(cell -> cell.getValue())); - minCell.ifPresent(cell -> { - this.emptyCell = cell; - }); - } - - @Override - public void click(Integer cellValue) { - this.emptyCell = this.emptyCell.swapCells(cellValue); - } - - @Override - public void swap(Integer keyCode) { - Keyboard key = Keyboard.fromValue(keyCode); - this.emptyCell = this.emptyCell.click(key); - } - - @Override - public List getCells() { - return this.cells; - } - - @Override - public Vertex getEmptyCell() { - return this.emptyCell; - } - - @Override - public Boolean checkGameOver() { - return IntStream.range(0, this.length) - .allMatch(index -> this.cells.get(index).getValue() == (index + 1) % this.length); - - } - -} diff --git a/jogo-oito/src/main/java/view/JogoDosOito.java b/jogo-oito/src/main/java/view/JogoDosOito.java deleted file mode 100644 index 2b687559..00000000 --- a/jogo-oito/src/main/java/view/JogoDosOito.java +++ /dev/null @@ -1,148 +0,0 @@ -package view; - -import facade.Controller; -import interfaces.Vertex; -import java.awt.Font; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.stream.IntStream; -import javax.swing.JButton; -import javax.swing.JFrame; -import javax.swing.JLabel; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; - -public class JogoDosOito extends JFrame implements KeyListener { - - private final List buttons; - private final Controller controller; - private JButton reset; - private JButton feedback; - - public JogoDosOito() { - super("Jogo dos Oito"); - this.controller = new Controller(); - this.controller.setting(); - this.buttons = new ArrayList<>(); - } - - private void configureInterface() { - setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - setSize(300, 300); - setLayout(new GridLayout(4, 3)); - setVisible(true); - addKeyListener(this); - setFocusable(true); - } - - private void createButtons() { - this.controller.getCells().forEach(cell -> { - JButton button = this.configButton(cell); - add(button); - buttons.add(button); - }); - } - - private Integer textToValue(String text) { - return Optional.ofNullable(text) - .map(Integer::valueOf) - .orElse(0); - } - - private JButton configButton(Vertex cell) { - JButton button = new JButton(); - button.setFont(new Font("Arial", Font.BOLD, 36)); - button.setText(cell.valueToText()); - button.addActionListener((ActionEvent e) -> { - this.controller.click(this.textToValue(button.getText())); - this.updateBoard(); - this.checkGameOver(); - SwingUtilities.getRoot(button).requestFocus(); - }); - return button; - - } - - private void checkGameOver() { - Optional.ofNullable(this.controller.checkGameOver()) - .filter(Boolean::booleanValue) - .ifPresent(gameOver -> { - JOptionPane.showMessageDialog(this, "Parabéns, você venceu!"); - resetGame(); - }); - } - - private void configMenu() { - this.reset = this.configReset(); - this.feedback = this.configFeedback(); - add(this.feedback); - add(this.reset); - add(new JLabel("")); - } - - private JButton configReset() { - JButton buttonReset = new JButton("Reiniciar"); - buttonReset.addActionListener((ActionEvent e) -> { - this.resetGame(); - SwingUtilities.getRoot(buttonReset).requestFocus(); - }); - return buttonReset; - } - - private JButton configFeedback() { - JButton buttonFeedback = new JButton("Gabarito"); - buttonFeedback.addActionListener((ActionEvent e) -> { - this.showFeedback(); - SwingUtilities.getRoot(buttonFeedback).requestFocus(); - }); - return buttonFeedback; - } - - - private void resetGame() { - this.controller.setting(); - this.updateBoard(); - } - - private void showFeedback() { - this.controller.feedback(); - this.updateBoard(); - } - - private void updateBoard() { - List cells = this.controller.getCells(); - IntStream.range(0, cells.size()) - .forEach(index -> { - JButton button = this.buttons.get(index); - button.setText(cells.get(index).valueToText()); - }); - } - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public void keyPressed(KeyEvent e) { - this.controller.swap(e.getKeyCode()); - this.updateBoard(); - this.checkGameOver(); - } - - @Override - public void keyReleased(KeyEvent e) { - } - - public static void main(String[] args) { - JogoDosOito game = new JogoDosOito(); - game.createButtons(); - game.configMenu(); - game.configureInterface(); - - } -}