Koncaman
Utilizador Saloio
Boas.
Recebi uma proposta de trabalho final de uma cadeira que consiste em desenvolver um programa jogador de sokoban... aquele joguito do jovem que arruma caixotes...
o programa analisa os níveis, e dá (ou tenta dar) a melhor solução possível (i. e. a que precisa de menos movimentos)
Inicialmente vou-me preocupar em por o programa a apresentar soluções para níveis só com um caixote, mas pretendo por isto a trabalhar em níveis de vários caixotes.
Eu quando me disseram o que era para fazer, eu pensei, ahh e tal mas isso nem é preciso grande trabalho, uns for's while's e if's e arrumo o assunto, mas depois de pensar um bocadinho melhor na coisa, é que me dei conta da verdadeira complexidade do problema. Isto não vai ser fácil, mas o meu maior problema é como abordar o problema. no fim de contas isto é um problema de inteligência artificial, relativamente complicado, que para mim é uma novidade (enquanto programador).
Estou a pensar em criar uma estrutura de dados, onde o programa vai guardando o nível alterado (a cada passo efectuado) sendo que em todos os ciclos o programa tem um nível novo (baseado no nível anterior mas com um movimento) e aplicar-lhe sempre o mesmo critério de movimentação.
não sei se me faço entender... mas ate ao momento esta parece-me uma solução razoável, mas pesada. e é suposto o programa ser leve.
os níveis são recebidos num formato deste tipo:
#####
#__._#
#____#####
#_______$_#
#_@##____#
#########
onde:
# é uma parede/coluna
@ é a posição inicial do arrumador
$ é a posição inicial do caixote
. é a posição onde se pretende que fique o caixote
_ é um espaço normal
Gostava que me dessem uma dica qualquer por onde pegar nisto, e se quiserem pensar mais um bocadinho, uma solução possível para a estrutura de dados, e para o algoritmo a implementar, assim muito por alto, é só para dar um empurrãozinho...
Obrigado.
Recebi uma proposta de trabalho final de uma cadeira que consiste em desenvolver um programa jogador de sokoban... aquele joguito do jovem que arruma caixotes...
o programa analisa os níveis, e dá (ou tenta dar) a melhor solução possível (i. e. a que precisa de menos movimentos)
Inicialmente vou-me preocupar em por o programa a apresentar soluções para níveis só com um caixote, mas pretendo por isto a trabalhar em níveis de vários caixotes.
Eu quando me disseram o que era para fazer, eu pensei, ahh e tal mas isso nem é preciso grande trabalho, uns for's while's e if's e arrumo o assunto, mas depois de pensar um bocadinho melhor na coisa, é que me dei conta da verdadeira complexidade do problema. Isto não vai ser fácil, mas o meu maior problema é como abordar o problema. no fim de contas isto é um problema de inteligência artificial, relativamente complicado, que para mim é uma novidade (enquanto programador).
Estou a pensar em criar uma estrutura de dados, onde o programa vai guardando o nível alterado (a cada passo efectuado) sendo que em todos os ciclos o programa tem um nível novo (baseado no nível anterior mas com um movimento) e aplicar-lhe sempre o mesmo critério de movimentação.
não sei se me faço entender... mas ate ao momento esta parece-me uma solução razoável, mas pesada. e é suposto o programa ser leve.
os níveis são recebidos num formato deste tipo:
#####
#__._#
#____#####
#_______$_#
#_@##____#
#########
onde:
# é uma parede/coluna
@ é a posição inicial do arrumador
$ é a posição inicial do caixote
. é a posição onde se pretende que fique o caixote
_ é um espaço normal
Gostava que me dessem uma dica qualquer por onde pegar nisto, e se quiserem pensar mais um bocadinho, uma solução possível para a estrutura de dados, e para o algoritmo a implementar, assim muito por alto, é só para dar um empurrãozinho...
Obrigado.
Última edição: