Problemas com validacao de jogo da velha

21 respostas
Lego

Fala pessoal, tranquilo?
estou comecando com Java e o professor passou um exercicio onde teriamos que fazer um jogo da velha em Java
segue o que ja fizemos
http://pastebin.com/QkjrZE1D

o problema eh que se vcs testarem veram que nao esta validando as vitorias corretamente ou empates
quebramos a cabeca em sala mas nada saiu
nao vamos recorrer a “internet” pra resolver precisamos fazer do nosso jeito por mais “errado” que ele possa parecer
precisa funcionar rsrs

Edit: Estamos usando o Eclipse

21 Respostas

R

Por acaso voce esta usando o GUJ pela Intranet ? acho que nao ne =P

Lego

Eu quiz dizer que nao podemos acessar a internet pra procurar informacoes
tipo o algoritimo ja pronto mas ele nos deixou vir procurar ajuda em foruns rsrsrs

R

hahahaha espertinhos -, blz entao, tipo assim, aqui ninguem gosta de fazer trabalho para os outros entende ? entao tipo, vou dar uma olhada e tentar ajudar so dando dicas.

e lai vai uma.

else if(jogadas == 9){ System.out.println("EMPATE"); result = true; }

Voce sabia que eu posso vencer na ultima jogada ?

Essa logica ae voces vao quebrar a cuca, hehehehe. Se quiser deixar ela pra depois tudo bem ^^

Lego

Entendo perfeitamente eh exatamente isso que procuro, dicas

O Jogador pode vencer em no minimo 5 rodadas
e o max de jogadas que ambos podem fazer sao 9 rodadas

Nos matamos pra pensar em um metodo que valide isso
que em 5 rodadas termine o jogo e que em 9 de empate
mas sempre conseguiamos um e nao o outro

R

Qual o que voces nao conseguiam ?

Lego

Nos conseguimos o vencedor
mais o jogo continua ate dar 9 rodadas

devo estar me enrolando em algum while

R

Entendi. Vo ver o codigo aqui e ja te falo, tenho mania de ler na pressa, e nunca pego o entendimento de primeira por,causa disso ‘-’

Lego

Aqui se ele encontrar um vencedor ele da a msg de Vitoria e volta para esse ponto

while( result == false){
			
				System.out.println(j1+", informe a linha de 0 a 2: ");
				l = scanner.nextInt();
		
				validaLinha();
				
				System.out.println(j1+", informe a coluna de 0  a 2: ");
				c = scanner.nextInt();
R

Uhum, acho que entendi o que ta acontecendo, vou te falar somente o meu ponto de vista, tu te vira ae pra ver como vai sair desse calabouço:

  1. Voce tem 2 whiles, um dentro do outro.

O primeiro voce usa para verificar o que ? so pra montar o tabuleiro aparentemente. Entao, o 2 que tem toda a logica e tal.

Quando voce da a vitoria para alguem voce sai do 2 while, que é o do result, voce diz que ele é true e sai, pelo menos é pra sair, se souber fazer debug faça.

Apos isso ele vai pro 1 while, que é o do resp. Ai vem a pergunta , quando voce NAO responde sim, o que voce responde ? o scanner.next(resp) atualiza mesmo essa variavel ?

Lego

Nao consigo sair do while
ta dificil

R

o que voce fez ? sabe fazer debug ?

Lego

Sei sim to fazendo aqui ele ta em loop infinito
nessa parte

eu ganho com o X por exemplo
v[l][c] = "X";
				jogadas++;
				
				System.out.println(jogadas);
				
				if(result == false){
				vitoria("X");

				}
				
				tabuleiro();

dai ele imprime o tabuleiro e volta pra k

tabuleiro();
				
				
							
				System.out.println(j2+", informe a linha de 0 a 2: ");
				l = scanner.nextInt();
				
				validaLinha();
				
				System.out.println(j2+", informe a coluna de 0  a 2: ");
				c = scanner.nextInt();
R

Se voce prestar atencao, ele da o final mas nao termina, porque ta certo, o seu codigo ta fazendo isso, apos ele sair do IF do vitoria(X) por exemplo, logo abaixo, ele segue o fluxo normalmente do codigo, e logicamente, tem mais linhas abaixo dele ^^, o certo era quando o cara vencer, voce precisaria colocar dentro do if (result == false), um verificacao se o usuario venceu ou nao, se sim, voce faz uma quebra do while, que é claro, EU NAO vou dizer com que é, kkkkkkkkkkkkk.

R

Outra coisa, é feinho voce usar uma comparacao com booleano desse jeito:

if (result == false)

Para booleanos use assim:

if (!result) // a Exclamacao ta dizendo : "Se o result NAO FOR VERDADEIRO, ou seja, se ele for false

ou

if (result) // Sem a exclamacao ta dizendo: "Se o result FOR VERDADEIRO, ou seja, se ele for true
R

Mais 1 detalhe antes de dormir, ele nao ta atualizando a tua variavel RESULT, pay attention =D…FUIII

Lego

while( result == false){ if (result = "X") break;
isso? kk

R

Nao mano, e isso nao. Mas o break ta certo ^^, so ta no lugar errado.

Lego

Eu preciso fazer uma verificacao exatamente do que?

R

Ultima dica mesmo, agora vo vazar mesmo…

o Break c poe la naqueles ifs la do vitoria X e O, nem precisa mudar la o que tem, so pensa em como vai fazer a logica la dentro…, outra COISA, TEU RESULT NAO TA ATUALIZANDO, pense e reflita guru =D. Eu terminei esse teu jogo da velha aqui, da pra brincar legal man, so nao da pra ganhar dinheiro , kkkkkkkkkkkkkkk… AGORA FUI MESMO QUER VER ? ‘-’

Lego

Ae mano conseguimos la depois de alguns ajustes rsrs
vlw pela ajuda!

http://pastebin.com/SzMEyHW3

WellingtonRamos

Essa não é uma verificação válida:

if (result = "X")

Neste trecho há 2 erros. O primeiro é que o comparador é ==. Já o segundo é que, comparação entre strings deve ser feito utilizando o método equals.

Infelizmente não consigo ver teu código pra ajudar mais (proibições de proxy).

Criado 1 de fevereiro de 2013
Ultima resposta 1 de fev. de 2013
Respostas 21
Participantes 3