Jump to content
Sign in to follow this  
mmacedo

Prolog - jogo

Recommended Posts

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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other sites
Triton

Se apresentares dúvidas, pode ser que ainda me lembre de alguma coisa de Prolog para ajudar.


<3 life

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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."

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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).

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.