Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- carta(c(R,S)) :- ranks(LR), naipe(LS), member(R,LR), member(S,LS).
- ranks([2,3,4,5,6,dama,valete,rei,bisca,a]).
- naipe([copas,paus,espadas,ouros]).
- mesmoNaipe(c(_,S),c(_,S)).
- %base de dados para o predicado cartaMaisAlta().
- valor(carta(dama,_),7):-!.
- valor(carta(valete,_),8):-!.
- valor(carta(rei,_),9):-!.
- valor(carta(bisca,_),10):-!.
- valor(carta(a,_),11):-!.
- valor(carta(X,_),X):-!. integer(X), X>=2, X=<6.
- %pontuação de cada carta. Depois de terminar o jogo
- pontos(carta(dama,_),2):-!.
- pontos(carta(valete,_),3):-!.
- pontos(carta(rei,_),4):-!.
- pontos(carta(bisca,_),10):-!.
- pontos(carta(a,_),11):-!.
- pontos(carta(X,_),0) :- integer(X), X>=2 , X=<6.
- %esta a falhar nas cartas que nao sao numeros
- cartaMaisAlta(R1,R2,R1) :- ranks(R), member(R1,R), valor(carta(R1,_),C1), valor(carta(R2,_),C2), C1>=C2.
- cartaMaisAlta(R1,R2,R2) :- ranks(R), member(R1,R), valor(carta(R1,_),C1), valor(carta(R2,_),C2), C2>=C1.
- play:- baralho(L), trunfo(L,T), writeln(T), delete(L,T,L1), distribui(L1,M1,M2,L2),
- %player(M1,H1,C1), player(M2,H2,C2), hand(H1), hand(H2), contador(C1),contador(C2), nextPlayer(M1,M2),
- aux_play([2,play,L2,M1,M2,[],[],_,T]).
- trunfo(L,T):- reverse(L,[T|_]).
- %nextPlayer(M1,M2).
- %player(H,C):-
- %aux_play()
- aux_play([_,_,[],[],[],S1,S2,_,T]):-
- (drawGame(S1,S2),S=draw;winGame(S1,S2),S=lose;winGame(S2,S1),S=win).
- aux_play([_,draw,_,_,_,_,_,_,_]):-writeln("Draw").
- aux_play([_,lose,_,_,_,_,_,_,_]):-writeln("Human wins").
- aux_play([_,win,_,_,_,_,_,_,_]):-writeln("Minimax wins").
- % levar sempre tudo que importa com esta funcao (baralho, maos dos jogadores,trunfo, stacks)
- aux_play([1,play,L,M1,M2,S1,S2,(RLP,NLP),(RT,NT)]):- writeln("-----------------"),
- writeln("Computer plays:"),
- %minimax([1,play,L,M1],[P,S,L1,M3],J), writeln(J),
- writeln("PC playing"),
- writeln("Na mao:"),
- writeln(M1),
- writeln("Inserir carta"), flush_output,
- read((R,N)),
- newHand((R,N),M1,M3),
- %%% P1 nao jogou trunfo e P2 jogou trunfo
- ((N == NT, not(NLP == NT), addStack((RLP,NLP),(R,N),S1,S3), S4 = S2);
- %%% P1 jogou trunfo e P2 nao jogou trunfo
- (NLP == NT, not(N==NT), addStack((RLP,NLP),(R,N),S2,S4), S3 = S1);
- %%% Nao jogaram trunfo mas sao de naipes diferentes => o primeiro que jogou fica com a palha toda
- (not(NLP==N), not(N==NT), not(NLP==NT), addStack((RLP,NLP),(R,N),S2,S4), S3 = S1);
- %%% Nao jogaram trunfo mas sao de naipes iguais => ver quem jogou carta de maior rank
- (N==NLP, not(N==NT), not(NLP==NT), (cartaMaisAlta(R,RLP,R), addStack((RLP,NLP),(R,N),S1,S3), S4 = S2);
- (cartaMaisAlta(R,RLP,RLP), addStack((RLP,NLP),(R,N),S2,S4), S3 = S1));
- %%% ambos jogaram trunfo => ver quem jogou carta de maior rank
- (N==NT, NLP==NT, (cartaMaisAlta(R,RLP,R), addStack((RLP,NLP),(R,N),S1,S3), S4 = S2) ;
- (cartaMaisAlta(R,RLP,RLP), addStack((RLP,NLP),(R,N),S2,S4), S3 = S1))), % verificar quem ganhou a mao e adicionar a stack
- writeln("Stack Jogador 1 (PC):"), writeln(S3),
- writeln("Stack Jogador 2 (Humano):"), writeln(S4),
- %writeln(M3), % mao depois de jogar, antes de receber cartas
- %writeln(M2), % ^
- givecards(L,M3,M2,L2,M5,M4),
- %writeln(M5), % mao depois de receber cartas, algo errado com o givecards
- %writeln(M4), % ^
- aux_play([2,play,L2,M5,M4,S3,S4,_,(RT,NT)]).
- aux_play([2,play,L,M1,M2,S1,S2,_,T]):-
- writeln("Human playing"),
- writeln("Na mao:"),
- writeln(M2),
- writeln("Inserir carta"), flush_output,
- read((R,N)),
- newHand((R,N),M2,M),
- aux_play([1,play,L,M1,M,S1,S2,(R,N),T]).
- addStack((R,N),(R1,N1),S1,S2):- append([(R,N),(R1,N1)],S1,S2).
- :-use_module(library(random)).
- baralho(L2) :- ranks(L1), allcards(L1,_,L), random_permutation(L,L2).
- %shuffle(L1, L):-random_permutation(L1,L).
- %givecards(baralho,P1,P2,restoBaralho,cartas P1, cartas P2).
- givecards([X,Y|L1],M1,M2,L1,[X|M1],[Y|M2]).
- %lista de todas as cartas(produto cartesiano das listas ranks e naipe)
- allcards([],_,[]).
- allcards([X|L1],L2,R) :- naipe(L2), aux_cards(X,L2,L3),
- allcards(L1,L2,L4), append(L3,L4,R).
- aux_cards(_,[],[]).
- aux_cards(X,[Y|L1],[(X,Y)|L2]) :-aux_cards(X,L1,L2).
- :-use_module(library(lists)).
- %numero de cartas por jogador = 3
- %distribui(baralho, cartas P1, cartas P2, resto do baralho)
- distribui([A,B,C,D,E,F|L1],[A,B,C],[D,E,F],L1).
- newHand((R,N),M,M2):- member((R,N),M), delete(M,(R,N),M2),!. % not finished
- %newHand((R,N),M,M2):-not(member((R,N),M)), writeln("Essa carta nao existe na tua mao").
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement