Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

mmacedo

Prolog - jogo

Mensagens Recomendadas

mmacedo

Boas, tnh um projecto de universidade que consiste em fazer o jogo reversi, quadro 3x3, em prolog. Tenho andado a procura na net de ajuda, mas n encontro nada. :wallbash:

Alguem pode ajudar? :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Sim, podemos.

Mas só se colocares as tuas dúvida concretas de forma simples.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mmacedo

Boas,

O jogo é o reversi. Nao sei se sabem kual é mas se nao souberem eu tento aqui deixar o "enunciado". É o seguinte : ter um quadro 3x3 (9 quadriculas) e ao clicar por exemplo na quadricula do canto superior esquerdo fica "pintada" a coluna e a linha correspondente. Caso seja  clikada de seguida uma quadricula presente nas que foram anteriormente "pintadas" estas voltam ao estado inicial,ou seja, em branco e as colunas/linhas correspondentes a quadricula clikada sao "pintadas".

Exemplo mais concreto em que A1,A2..A9 sao quadriculas do quadro de jogo :

A1 A2 A3

A4 A5 A6

A7 A8 A9

Se clicarmos em A1, as celulas A1 A2 A3,A4 E A7 ficam "Pintadas". Se depois clikarmos em A2, as quadriculas A1 A2 e A3 voltam ao estado inicial, em branco, e as quadriculas A5 E A6 ficam "pintadas". O objectivo do jogo é "Pintar" o jogo todo.

Em prolog isto faz-se segundo o prof com mudancas de estado,isto é, com as transitions e usando um sistema de inferencia chamado de solvedf.

Este é o codigo do solvedf.pl

solvedf:-
initial(InitialState),
solvedf(InitialState, [initialState], Solution),
        write(Solution).
solvedf(State, _, []):-
final(State),!.
solvedf(State, History, [Move|Solution]):-
transition(State, Move, State1),
\+ member(State1, History),
solvedf(State1, [state1|History], Solution).

Este é o meu codigo das transicoes, que corresponde a mudanca de estado ao clikar em cd quadricula(é 0 qunado esta em branco e 1 quando esta pintado)


initial(on([[0,0,0],[0,0,0],[0,0,0]])).
final(on([[1,1,1],[1,1,1],[1,1,1]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a1),on([[1,1,1],[1,0,0],[1,0,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a2),on([[1,1,1],[0,1,0],[0,1,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a3),on([[1,1,1],[0,0,1],[0,0,1]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a4),on([[1,1,1],[1,0,0],[1,0,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a5),on([[1,1,1],[0,1,0],[0,1,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a6),on([[1,1,1],[0,0,1],[0,0,1]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a7),on([[1,1,1],[1,0,0],[1,0,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a8),on([[1,1,1],[0,1,0],[0,1,0]])).

transition(on([[0,0,0],[0,0,0],[0,0,0]]),click(a9),on([[1,1,1],[0,0,1],[0,0,1]])).

O problema é que ao correr isto no SWi-Prolog ele dam "false"  :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

mmacedo, qual é a tua dúvida em concreto?

É que ninguém aqui vai fazer debug ao teu projecto e encontrar os bugs que tens no teu código, isso é tarefa tua.

Agora, se explicares concretamente qual é a tua dúvida, ai podemos ajudar.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mmacedo

Sim, tambem nao tava a espera que o fizessem  :P . A duvida é saber se akilo k estou a fazer,isto é, as mudancas de estado das transicoes esta correcta ou se tnh k fazer de outra maneira

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
exeCUTOR

Para perceberes onde esta o problema, executa "trace.", dentro do SWI-Prolog, e corre um qualquer predicado para seguires a sua execução.


Just smile and wave boys, smile and wave.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
taviroquai

Oi!

Percebo pouco de Prolog, mas, segundo a minha lógica, deduzo que devias dar as clausulas "transition()" de outra forma...

Dessa forma o prolog, para além de não saber associar o predicado "click(X)" ás posições nas clausulas "initial()" e "final()", esses predicados "transition(X, Y, Z)" apenas indicam para pintar (atribuir o valor 1) quando se verifica "click()"... e não indicam para limpar (atribuir o valor 0).

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.