ae…
alguem ai ja fez um jogo de torre de hanoi??? se alguem ja fez…pode postar o codigo aki pra eu ter nocao de como se faz???
flww
ae…
alguem ai ja fez um jogo de torre de hanoi??? se alguem ja fez…pode postar o codigo aki pra eu ter nocao de como se faz???
flww
Eu num fiz jogo assim… gráfico nem nada… só fiz o algoritmo… mas é mto facinho… acho q num é isso q vc qh né:?:
vc pode criar usar um int representando o tamanho da peca, eu aconselho a por tudo numero de 2 na potencia n (ex 1, 2, 4, 8, 16, 32, 64, 128, etc…), pq dai vc pdoe saber todas as pecas q tao em um local com apenas um int. e vc pode armazenar em uma int todas as pecas q tao em cada local, dai pra mostrar na tela eh soh ver quais pecas estao em cada local e fazer um quicksort (jah q as menores sempre vao estar em cima),e pra mover eh soh ver a q esta em cima…
pode ser o algoritimo sim!!! da pra vc postar aki???
Tá aqui um codigozinho básico, com interface no DOS mesmo, não tá completo, mas tem o necessário, que é as torres e o movimento das peças.
[code]/**
// pacotes de nucleo de Java
import java.util.;
import java.io.;
public class Hanoi {
// atributos
private LinkedList[] torre;
private int jogadas;
/**
* Construtor de Hanoi.
* O construtor cria os 3 pinos e inicializa o contador de jogadas
*
* @param O numero de discos do jogo
*/
public Hanoi() {
torre = new LinkedList[3];
for(int i = 0; i < torre.length; i++)
torre[i] = new LinkedList();
jogadas = 0;
}
/**
* Inicializa o jogo, colocando os discos no primeiro pino.
*
* @param O numero de discos do jogo
*/
private void novoJogo(int nDiscos) {
for(int i = nDiscos; i > 0; i--) {
String disco = String.valueOf(i);
torre[0].addFirst(disco);
}
jogadas = 0;
}
/**
* Move o disco de um pino para outro.
*
* @param O pino de onde deve sair o disco (1 a 3).
* @param O pino onde o disco sera colocado (1 a 3).
* @throws Mensagem "erro: jogada invalida" caso o pino de destino tenha um disco menor que o disco movido.
*/
public void move(int deSaida, int deDestino) throws Exception {
deSaida--;
deDestino--;
int discoASerMovido = Integer.parseInt((String)torre[deSaida].getFirst());
if((torre[deDestino].size() == 0) ||
(discoASerMovido < Integer.parseInt((String)torre[deDestino].getFirst()))) {
String disco = String.valueOf(torre[deSaida].getFirst());
torre[deDestino].addFirst(disco);
torre[deSaida].removeFirst();
jogadas++;
} else throw new Exception("erro: jogada invalida");
}
// FALTA FAZER
public void solucao() {}
/**
* Apaga todos os discos dos pinos para comecar um novo jogo.
*/
public void clear() {
for(int i = 0; i < torre.length; i++)
torre[i].clear();
}
/**
* Imprime a saida do jogo, deve ser chamado a cada movimento dos discos.
* Caso o jogador venca, tambem e impresso o numero de jogadas e de jogadas erradas.
*/
public String toString() {
String jogo = "";
for(int i = 0; i < torre.length; i++) {
Iterator buscador = torre[i].iterator();
while(buscador.hasNext())
jogo += String.valueOf(buscador.next());
if(i != torre.length - 1)
if(!buscador.hasNext()) jogo += "|";
}
if((torre[0].size() == 0) && (torre[1].size() == 0)) {
jogo += " : " + jogadas + " : ";
}
return jogo;
}
/**
* Analiza o comando de entrada do usuario para executar o metodo adequado.
*
* @param O comando de entrada do usuario.
* @param O objeto hanoi onde sera executado o jogo.
* @return Uma linha de saida com o resultado do comando, de acordo com a situacao do jogo.
*/
private String analizarComando(String out, Hanoi hanoi) {
StringTokenizer entrada = new StringTokenizer(out);
String comando = entrada.nextToken();
if(comando.equals("novojogo")) {
int nDiscos = Integer.parseInt((String)entrada.nextToken());
hanoi.clear();
hanoi.novoJogo(nDiscos);
}
else if(comando.equals("move")) {
int torreSaida = Integer.parseInt((String)entrada.nextToken());
int torreDestino = Integer.parseInt((String)entrada.nextToken());
try {
hanoi.move(torreSaida, torreDestino);
} catch(Exception e) {
return e.getMessage();
}
}
else if(comando.equals("solucao")) {
hanoi.solucao();
return "FALTA FAZER";
}
return hanoi.toString();
}
// Main.
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
Hanoi hanoi = new Hanoi();
String out = "";
try {
while((out = in.readLine()) != null) {
System.out.println(hanoi.analizarComando(out, hanoi));
}
} catch(Exception e) {
e.getMessage();
System.exit(1);
}
}
} // fim da classe Hanoi[/code]
[size=“11”][color=“green”][color=yellow]utilize a tag CODE do bbcode em seus códigos - matheus[/color][/color][/size]
Eu tive qe implementar esse codigo em assembly no mes passado, mas ta ai um rascunho que eu fiz.
A ideia eh mover os discos de cima pra torre auxiliar, depois mover o maior disco para o destino e em seguida levar os discos que estao na torre auxiliar para a torre destino, soh que isso feito recursivamente.
Espero que ajude
Hanoi(n, orig, aux, dest)
{
if(n>0)
{
Hanoi(n-1, orig, dest, aux);
Hanoi(1, orig, aux, dest);
Hanoi(n-1, aux, orig, dest);
}
}