Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- :- use_module(library(lists)).
- count([],_,0).
- count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
- count([X1|T],X,Z):- X1\=X,count(T,X,Z).
- countall(List,X,C) :-
- sort(List,List1),
- member(X,List1),
- count(List,X,C).
- cards([c(2,♠),c(3,♠),c(4,♠),c(5,♠),c(6,♠),c(7,♠),c(8,♠),
- c(9,♠),c(10,♠),c(j,♠),c(q,♠),c(k,♠),c(a,♠),
- c(2,♣),c(3,♣),c(4,♣),c(5,♣),c(6,♣),c(7,♣),c(8,♣),
- c(9,♣),c(10,♣),c(j,♣),c(q,♣),c(k,♣),c(a,♣),
- c(2,♥),c(3,♥),c(4,♥),c(5,♥),c(6,♥),c(7,♥),c(8,♥),
- c(9,♥),c(10,♥),c(j,♥),c(q,♥),c(k,♥),c(a,♥),
- c(2,♦),c(3,♦),c(4,♦),c(5,♦),c(6,♦),c(7,♦),c(8,♦),
- c(9,♦),c(10,♦),c(j,♦),c(q,♦),c(k,♦),c(a,♦)]).
- del([X|L],X,L).
- del([Y|L],X,[Y|L2]) :- X\==Y,del(L,X,L2).
- deal([h(p1,[C1,C2,C3,C4]),h(p2,[C5,C6,C7,C8]),h(p3,[C9,C10,C11,C12]),h(p4,[C13,C14,C15,C16]) ], A15) :-
- cards(A), random_card(C1,A), del(A,C1,A1), random_card(C2,A1), del(A1,C2,A2), random_card(C3,A2), del(A2,C3,A3),
- random_card(C4,A3), del(A3,C4,A4), random_card(C5,A4), del(A4,C5,A5), random_card(C6,A5), del(A5,C6,A6),
- random_card(C7,A6), del(A6,C7,A7), random_card(C8,A7), del(A7,C8,A8), random_card(C9,A8), del(A8,C9,A9),
- random_card(C10,A9), del(A9,C10,A10), random_card(C11,A10), del(A10,C11,A11), random_card(C12,A11), del(A11,C12,A12),
- random_card(C13,A12), del(A12,C13,A13), random_card(C14,A13), del(A13,C14,A14), random_card(C15,A14), del(A14,C15,A15), random_card(C16,A15), !.
- random_card(D, A) :-
- length(A, B),
- C is random(B),
- nth0(C, A, D).
- play :- deal(H, T),
- aux_play([p1,H,T,[p1([]),p3([]),p4([])],[p1([]),p2([]),p4([])],[p1([]),p2([]),p3([])]]), !.
- delMember(_, [], []) :- !.
- delMember(X, [X|Xs], Y) :- !, delMember(X, Xs, Y).
- delMember(X, [T|Xs], Y) :- !, delMember(X, Xs, Y2), append([T], Y2, Y).
- pushFront(Item, List, [Item|List]).
- %---------------------------------------- SWAP CARDS ------------------------------------%
- swap_card_p1_aux(Player,Rank,Hand,NewHand,T,Memp2,Memp3,Memp4) :-
- Player == p2, swap_cardp2(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4);
- Player == p3, swap_cardp3(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4);
- Player == p4, swap_cardp4(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4).
- swap_cardp2([h(p1,H1),h(p2,H2),h(p3,H3),h(p4,H4)],Rank,[h(p1,NH1),h(p2,NH2),h(p3,H3),h(p4,H4)],T,Memp2,Memp3,Memp4) :-
- member(c(Rank,N), H2),
- del(H2,c(Rank,N),NH2),
- pushFront(c(Rank,N),H1,NH1),
- aux_play([p1,[h(p1,NH1),h(p2,NH2),h(p3,H3),h(p4,H4)],T,Memp2,Memp3,Memp4]).
- swap_cardp3([h(p1,H1),h(p2,H2),h(p3,H3),h(p4,H4)],Rank,[h(p1,NH1),h(p2,H2),h(p3,NH3),h(p4,H4)],T,Memp2,Memp3,Memp4) :-
- member(c(Rank,N), H3),
- del(H3,c(Rank,N),NH3),
- pushFront(c(Rank,N),H1,NH1),
- aux_play([p1,[h(p1,NH1),h(p2,H2),h(p3,NH3),h(p4,H4)],T,Memp2,Memp3,Memp4]).
- swap_cardp4([h(p1,H1),h(p2,H2),h(p3,H3),h(p4,H4)],Rank,[h(p1,NH1),h(p2,H2),h(p3,H3),h(p4,NH4)],T,Memp2,Memp3,Memp4) :-
- member(c(Rank,N), H4),
- del(H4,c(Rank,N),NH4),
- pushFront(c(Rank,N),H1,NH1),
- aux_play([p1,[h(p1,NH1),h(p2,H2),h(p3,H3),h(p4,NH4)],T,Memp2,Memp3,Memp4]).
- %-------------------------------------- NAO HÁ BATOTA -----------------------------------%
- check_card([h(p1,H1),H2,H3,H4],Rank,T,Memp2,Memp3,Memp4) :-
- not(member(c(Rank,_), H1)),
- writeln("Nao sejas batoteiro. Escolhe outra carta"),
- aux_play([p1,[h(p1,H1),H2,H3,H4],T,Memp2,Memp3,Memp4]).
- %--------------------------------------- BARALHO ----------------------------------------%
- tablefish([h(p1,H1),h(p2,H2),h(p3,H3),h(p4,H4)],[h(p1,NH1),h(p2,H2),h(p3,H3),h(p4,H4)],T,NewT,RC) :-
- random_card(RC,T),
- del(T,RC,NewT),
- pushFront(RC,H1,NH1).
- %----------------------------------- MEMÓRIA DOS PLAYERS ---------------------------------%
- update_memory(Rank, [p1(L),p3([]),p4([])], [p1(L),p2([]),p4([])], [p1(L),p2([]),p3([])], [p1(NL),p3([]),p4([])], [p1(NL),p2([]),p4([])], [p1(NL),p2([]),p3([])]) :-
- pushFront(Rank,L,NL).
- update_memp2(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
- pushFront(Rank,L,NL).
- update_memp3(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
- pushFront(Rank,L,NL).
- update_memp4(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
- pushFront(Rank,L,NL).
- check_mem(Memp2,Hand,Card) :- random(Card,Memp2), member(Card,Hand),
- del(Memp2,Card,NewMemp2).
- %------------------------------------ JOGADA DO HUMANO ------------------------------------%
- aux_play([p1,Hand,T,Memp2,Memp3,Memp4]) :-
- writeln("Player 1 Human plays"),
- writeln("Cards:"),
- writeln(Hand),
- writeln("Pick a player and rank"),
- read(Player),
- writeln("Ask for a card"),
- read(Rank),
- (check_card(Hand,Rank,T,Memp2,Memp3,Memp4) ;
- (update_memory(Rank,Memp2,Memp3,Memp4,NewMemp2,NewMemp3,NewMemp4),
- writeln(Memp2),writeln(NewMemp2),
- swap_card_p1_aux(Player, Rank, Hand, NewHand, T,NewMemp2,NewMemp3,NewMemp4);
- (update_memory(Rank,Memp2,Memp3,Memp4,NewMemp2,NewMemp3,NewMemp4),
- tablefish(Hand,NewHand,T,NewT,RC),aux_play([p2,NewHand,T,NewMemp2,NewMemp3,NewMemp4])))).
- %---------------------------------- JOGADA DO PLAYER 2 ------------------------------------%
- aux_play([p2,Hand,T,Memp2,Memp3,Memp4]) :-
- writeln(Memp2),
- writeln("Player 2 plays"),
- writeln(Hand),
- check_mem(Memp2,Hand,Card).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement