Olá amigos, desenvolvi um jogo da velha em java, e agora preciso aprimorar ele.
O que preciso é o seguinte: um menu para o usuário escolher, dentre esse menu haverá 3 opções:
Humano vs Máquina
Humano vs Humano
Máquina vs Máquina
Vou deixar meu código aqui:
import java.util.ArrayList;
import java.util.List;
public class JogoDaVelha {
public static void main(String[] args) {
List<Jogador> jogadores = new ArrayList<>();
int indexAtual;
boolean finalizado;
jogadores.add(new Jogador(1));
jogadores.add(new Jogador(2));
Menu menu = new Menu();
Tabuleiro tabuleiro = new Tabuleiro();
menu.imprimeTabuleiro(tabuleiro);
finalizado = false;
Jogador vencedor = null;
indexAtual = 0;
while (!finalizado) {
Jogador jogador = jogadores.get(indexAtual);
jogador.jogada(tabuleiro);
if (tabuleiro.verificaVitoria("X") || tabuleiro.verificaVitoria("O")) {
finalizado = true;
vencedor = jogador;
}
menu.imprimeTabuleiro(tabuleiro);
indexAtual = (indexAtual + 1) % jogadores.size();
}
System.out.println("A vitória foi do jogador com id " + vencedor.getid());
}
}
public class Jogador {
private int qtd, id;
private int linha, coluna;
private Menu menu = new Menu();
public Jogador(int id_jogador) {
this.id = id_jogador;
this.qtd = 0;
}
public int getid() {
return this.id;
}
public void jogada(Tabuleiro tabuleiro, int linha, int coluna) {
if (id == 1) {
tabuleiro.setPosicao(linha, coluna, "X");
} else {
tabuleiro.setPosicao(linha, coluna, "O");
}
qtd++;
}
public void jogada(Tabuleiro tabuleiro) {
do {
System.out.println("É a vez do jogador com id " + getid());
do {
linha = menu.lerLinha();
} while (linha < 0 || linha > 2);
do {
coluna = menu.lerColuna();
} while (coluna < 0 || coluna > 2);
if (tabuleiro.getPosicao(linha, coluna) != " ") {
System.out.println("Erro: Essa jogada já foi efetuada!");
menu.imprimeTabuleiro(tabuleiro);
break;
}
} while (tabuleiro.getPosicao(linha, coluna) != " ");
jogada(tabuleiro, linha, coluna);
qtd++;
if (qtd > 9) {
System.out.println("Deu empate!");
System.exit(0);
}
}
}
import java.util.Scanner;
public class Menu{
private Scanner sc = new Scanner (System.in);
private int linha=0, coluna=0;
public Menu(){
}
public void imprimeTabuleiro(Tabuleiro tabuleiro) {
for (int linha = 0; linha < 3; linha++) {
for (int coluna = 0; coluna < 3; coluna++) {
System.out.print(tabuleiro.getPosicao(linha, coluna) + " | ");
}
System.out.println();
}
System.out.println("______________");
}
public int lerLinha() {
do {
System.out.print("Digite a linha: ");
linha = sc.nextInt();
} while (linha < 0 || linha > 2);
return linha;
}
public int lerColuna(){
System.out.print("Digite a coluna: ");
this.coluna = sc.nextInt();
return coluna;
}
}
public class Tabuleiro {
private String[][] matriz;
private String[][] posicoes;
public Tabuleiro() {
posicoes = new String[3][3];
for (int i = 0; i < posicoes.length; i++) {
for (int j = 0; j < posicoes[i].length; j++) {
posicoes[i][j] = "";
}
}
}
public String getPosicao(int linha, int coluna) {
return posicoes[linha][coluna];
}
public String getPosicoes(int a, int b){
return matriz[a][b];
}
public void setPosicao(int linha, int coluna, String valor) {
posicoes[linha][coluna] = valor;
}
public boolean verificaVitoria(String sinal) {
if ((posicoes[0][0].equals(sinal) && posicoes[0][1].equals(sinal) && posicoes[0][2].equals(sinal)) || // linha 1
(posicoes[1][0].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[1][2].equals(sinal)) || // linha 2
(posicoes[2][0].equals(sinal) && posicoes[2][1].equals(sinal) && posicoes[2][2].equals(sinal)) || // linha 3
(posicoes[0][0].equals(sinal) && posicoes[1][0].equals(sinal) && posicoes[2][0].equals(sinal)) || // coluna 1
(posicoes[0][1].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][1].equals(sinal)) || // coluna 2
(posicoes[0][2].equals(sinal) && posicoes[1][2].equals(sinal) && posicoes[2][2].equals(sinal)) || // coluna 3
(posicoes[0][0].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][2].equals(sinal)) || // diagonal
(posicoes[0][2].equals(sinal) && posicoes[1][1].equals(sinal) && posicoes[2][0].equals(sinal))) { // diagonal inversa
return true;
}
return false;
}
}