Desenvolver Jogo da Velha em Java contra Computador com três níveis de dificuldades

Java

Eclipse

17/07/2020

Bom dia. Alguém poderia me ajudar em relação ao código? Preciso implementar as jogadas do computador, no momento, só consigo efetuar a jogadas do usuário (marcação X), minha ideia era que a cada jogada do usuário, a próxima seria do Computador, por exemplo: preencher espaços que não foram preenchidos, etc.(precisa ter 3 níveis de dificuldade, de jogadas), e assim, sucessivamente. Segue o código abaixo:

import java.util.Scanner;

public class Jogo {
	//Vai desenhar o tabuleiro
    static char [][] tab = {{'_', '|','_','|','_'} , {'_', '|','_','|','_'} , {' ', '|',' ','|',' '}};
	
	public static void main(String[] args) {
		
		//Chama método JogadorHumano e passa parâmetro tab Jogo para iniciar jogo 
		JogadorHumano(tab);
		JogadorHumano(tab);
	}
	
	//Método para verificar marcação da jogada, posição, int posicaoMarcada para verificar se já foi marcada
	//char [][] tabuleirojogo vai verificar tabuleiro
	//Método boolean para retornar true ou false
	public static boolean VerificaEspacoPreenchido(int posicaoMarcada, char [][] tabuleiroJogo) {
		
		//Estrututa Switch para verificar posição, qual posição foi maracada, posso mudar essa estrutura para if/else
		switch(posicaoMarcada){
			case 1: 
			//Verifica se a posição 1 está preenchida
			if(tabuleiroJogo[0][0] == '_') {
				//Bolean será true, retonando que não está preenchido
				return true;
			}
			//Se tiver preenchida retorna false
			else {
				return false;
			}
			case 2: 
				if(tabuleiroJogo[0][2] == '_') {
					
					return true;
				}
				
				else {
					return false;
				}
				
			case 3: 
				if(tabuleiroJogo[0][4] == '_') {
					
					return true;
				}
				
				else {
					return false;
				}
			case 4: 
				if(tabuleiroJogo[1][0] == '_') {
					
					return true;
				}
				
				else {
					return false;
				}
			case 5: 
				if(tabuleiroJogo[1][2] == '_') {
					
					return true;
				}
				
				else {
					return false;
				}
			case 6: 
				if(tabuleiroJogo[1][4] == '_') {
					
					return true;
				}
				
				else {
					return false;
				}
			case 7: 
				if(tabuleiroJogo[2][0] == ' ') {//''Espaço vazio
					
					return true;
				}
				
				else {
					return false;
				}
			case 8: 
				if(tabuleiroJogo[2][2] == ' ') {
					
					return true;
				}
				
				else {
					return false;
				}
			case 9: 
				if(tabuleiroJogo[2][4] == ' ') {
					
					return true;
				}
				
				else {
					return false;
				}
				default:
					return false;
		}
	}
	
	
	//Essa pode ser a classe que vai imprimi o tabuleiro
	//Deifine método array passando com  parâmetro nome do mesmo
	public static void ImprimiTabuleiro(char[][] tabuleiroJogo) { //Vai exibir tabuleiro
		
		for (char[] linha : tabuleiroJogo) {
			for(char c : linha) {
				System.out.print(c);
			}
			System.out.println();
		}
	}//Separar essa parte do código em outra classe
	
	
	//Método para fazer as jogadas do computador após cada jogada do Jogador Humano, deve inserir em uma posição que não está preenchida
	public static void JogadorComputador(char [][] tabuleiroJogo) {
		
		
	}
	
	//Métod para as jogadas do jogador humano, pega o que foi digitado no teclado e substitui no tabuleiro
	public static void JogadorHumano(char [][] tabuleiroJogo) {
		//System.out.print("*** Jogo da Velha ***");
		System.out.println();
		ImprimiTabuleiro(tab);
		System.out.println("Jogador Humano, digite um opção de 1 a 9 para inserir no tabuleiro:");
		//Pega o que foi digitado no teclado
		Scanner teclado = new Scanner(System.in);
		//Variável para ler posição
		int posicao = teclado.nextInt();
		JogadorComputador(tab);
		//Guarda resultado do retorno do método na variável verif do tipo booleana
		boolean verif = VerificaEspacoPreenchido(posicao, tabuleiroJogo);
		//Enquanto for diferente de true fica nesse loop dizendo que é jogado que está sendo efetuada é inválida
		//Só sai desse loop até efetuar uma jogada valida
		while(verif != true) {
			System.out.println("A jogado efetuada é inválida!");
			System.out.println("Digite uma nova opção:");
			//Lê nova jogada efetuada
			posicao = teclado.nextInt();
			//Verifica a jogada
			verif = VerificaEspacoPreenchido(posicao, tabuleiroJogo);
		}
		//Chama método e passa os parâmetros posicao, que é digitado pelo usuário, Jogador Humano, e o tabuleiroJogo
		//Atualiza posição tabuleiro de acordo com que o usuário escolhe
		AtualizaTabuleiro(posicao, "Jogador Humano", tabuleiroJogo);
	}
	
	
	//pos: posição, jogador: representa jogador, tabuleiroJogo é o tabuleiro, pois precisamos alterar elementos
	public static void AtualizaTabuleiro(int pos, String jogador, char[][] tabuleiroJogo) {
		//Método para mudar as posições vazias do tabuleiro(com underline) pelas marcações, jogador humano X
		//jogador computador O
		char marcacao = ' ';//Vazia, preenchida de acordo com marcação: X ou O
		//Verifica jogador é Humano e efetua a marcação X
		if( jogador == "Jogador Humano") {
			marcacao = 'X';//Marca X Jogador Humano
		}
		// Verificar jogador é o Computador e efetua a marcação O
		else if(jogador == "Jogador Computador") {
			marcacao = 'O';//Marca O Jogador Computador
		}
		
		//Posso fazer está estrutura que verifica posições indices utilizando if/else
		switch (pos) {
		//Se a posição for igual a 1
		case 1:
			tabuleiroJogo[0][0] = marcacao;
			break;
			
		case 2:
			tabuleiroJogo[0][2] = marcacao;
			break;
			
		case 3:
			tabuleiroJogo[0][4] = marcacao;
			break;
			
		case 4:
			tabuleiroJogo[1][0] = marcacao;
			break;
			
		case 5:
			tabuleiroJogo[1][2] = marcacao;
			break;
			
		case 6:
			tabuleiroJogo[1][4] = marcacao;
			break;
			
		case 7:
			tabuleiroJogo[2][0] = marcacao;
			break;
			
		case 8:
			tabuleiroJogo[2][2] = marcacao;
			break;
			
		case 9:
			tabuleiroJogo[2][4] = marcacao;
			break;
			
		default:
			break;
		}
		ImprimiTabuleiro(tab);
	}
	
} 
Paulo André

Paulo André

Curtidas 0
POSTAR