Advertisement
Guest User

Untitled

a guest
Dec 11th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.42 KB | None | 0 0
  1. :- use_module(library(lists)).
  2.  
  3. count([],_,0).
  4. count([X|T],X,Y):- count(T,X,Z), Y is 1+Z.
  5. count([X1|T],X,Z):- X1\=X,count(T,X,Z).
  6.  
  7. countall(List,X,C) :-
  8. sort(List,List1),
  9. member(X,List1),
  10. count(List,X,C).
  11.  
  12. cards([c(2,♠),c(3,♠),c(4,♠),c(5,♠),c(6,♠),c(7,♠),c(8,♠),
  13. c(9,♠),c(10,♠),c(j,♠),c(q,♠),c(k,♠),c(a,♠),
  14. c(2,♣),c(3,♣),c(4,♣),c(5,♣),c(6,♣),c(7,♣),c(8,♣),
  15. c(9,♣),c(10,♣),c(j,♣),c(q,♣),c(k,♣),c(a,♣),
  16. c(2,♥),c(3,♥),c(4,♥),c(5,♥),c(6,♥),c(7,♥),c(8,♥),
  17. c(9,♥),c(10,♥),c(j,♥),c(q,♥),c(k,♥),c(a,♥),
  18. c(2,♦),c(3,♦),c(4,♦),c(5,♦),c(6,♦),c(7,♦),c(8,♦),
  19. c(9,♦),c(10,♦),c(j,♦),c(q,♦),c(k,♦),c(a,♦)]).
  20.  
  21. del([X|L],X,L).
  22. del([Y|L],X,[Y|L2]) :- X\==Y,del(L,X,L2).
  23.  
  24. 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) :-
  25. 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),
  26. random_card(C4,A3), del(A3,C4,A4), random_card(C5,A4), del(A4,C5,A5), random_card(C6,A5), del(A5,C6,A6),
  27. random_card(C7,A6), del(A6,C7,A7), random_card(C8,A7), del(A7,C8,A8), random_card(C9,A8), del(A8,C9,A9),
  28. random_card(C10,A9), del(A9,C10,A10), random_card(C11,A10), del(A10,C11,A11), random_card(C12,A11), del(A11,C12,A12),
  29. 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), !.
  30.  
  31. random_card(D, A) :-
  32. length(A, B),
  33. C is random(B),
  34. nth0(C, A, D).
  35.  
  36. play :- deal(H, T),
  37. aux_play([p1,H,T,[p1([]),p3([]),p4([])],[p1([]),p2([]),p4([])],[p1([]),p2([]),p3([])]]), !.
  38.  
  39. delMember(_, [], []) :- !.
  40. delMember(X, [X|Xs], Y) :- !, delMember(X, Xs, Y).
  41. delMember(X, [T|Xs], Y) :- !, delMember(X, Xs, Y2), append([T], Y2, Y).
  42.  
  43. pushFront(Item, List, [Item|List]).
  44.  
  45. %---------------------------------------- SWAP CARDS ------------------------------------%
  46.  
  47. swap_card_p1_aux(Player,Rank,Hand,NewHand,T,Memp2,Memp3,Memp4) :-
  48. Player == p2, swap_cardp2(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4);
  49. Player == p3, swap_cardp3(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4);
  50. Player == p4, swap_cardp4(Hand,Rank,NewHand,T,Memp2,Memp3,Memp4).
  51.  
  52.  
  53. 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) :-
  54. member(c(Rank,N), H2),
  55. del(H2,c(Rank,N),NH2),
  56. pushFront(c(Rank,N),H1,NH1),
  57. aux_play([p1,[h(p1,NH1),h(p2,NH2),h(p3,H3),h(p4,H4)],T,Memp2,Memp3,Memp4]).
  58.  
  59.  
  60. 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) :-
  61. member(c(Rank,N), H3),
  62. del(H3,c(Rank,N),NH3),
  63. pushFront(c(Rank,N),H1,NH1),
  64. aux_play([p1,[h(p1,NH1),h(p2,H2),h(p3,NH3),h(p4,H4)],T,Memp2,Memp3,Memp4]).
  65.  
  66. 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) :-
  67. member(c(Rank,N), H4),
  68. del(H4,c(Rank,N),NH4),
  69. pushFront(c(Rank,N),H1,NH1),
  70. aux_play([p1,[h(p1,NH1),h(p2,H2),h(p3,H3),h(p4,NH4)],T,Memp2,Memp3,Memp4]).
  71.  
  72. %-------------------------------------- NAO HÁ BATOTA -----------------------------------%
  73.  
  74. check_card([h(p1,H1),H2,H3,H4],Rank,T,Memp2,Memp3,Memp4) :-
  75. not(member(c(Rank,_), H1)),
  76. writeln("Nao sejas batoteiro. Escolhe outra carta"),
  77. aux_play([p1,[h(p1,H1),H2,H3,H4],T,Memp2,Memp3,Memp4]).
  78.  
  79. %--------------------------------------- BARALHO ----------------------------------------%
  80.  
  81. 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) :-
  82. random_card(RC,T),
  83. del(T,RC,NewT),
  84. pushFront(RC,H1,NH1).
  85.  
  86.  
  87. %----------------------------------- MEMÓRIA DOS PLAYERS ---------------------------------%
  88.  
  89.  
  90. 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([])]) :-
  91. pushFront(Rank,L,NL).
  92.  
  93. update_memp2(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
  94. pushFront(Rank,L,NL).
  95.  
  96. update_memp3(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
  97. pushFront(Rank,L,NL).
  98.  
  99. update_memp4(Rank,[p1(L),p3([]),p4([])],[p1(NL),p3([]),p4([])]):-
  100. pushFront(Rank,L,NL).
  101.  
  102. check_mem(Memp2,Hand,Card) :- random(Card,Memp2), member(Card,Hand),
  103. del(Memp2,Card,NewMemp2).
  104.  
  105. %------------------------------------ JOGADA DO HUMANO ------------------------------------%
  106.  
  107. aux_play([p1,Hand,T,Memp2,Memp3,Memp4]) :-
  108. writeln("Player 1 Human plays"),
  109. writeln("Cards:"),
  110. writeln(Hand),
  111. writeln("Pick a player and rank"),
  112. read(Player),
  113. writeln("Ask for a card"),
  114. read(Rank),
  115. (check_card(Hand,Rank,T,Memp2,Memp3,Memp4) ;
  116. (update_memory(Rank,Memp2,Memp3,Memp4,NewMemp2,NewMemp3,NewMemp4),
  117. writeln(Memp2),writeln(NewMemp2),
  118. swap_card_p1_aux(Player, Rank, Hand, NewHand, T,NewMemp2,NewMemp3,NewMemp4);
  119. (update_memory(Rank,Memp2,Memp3,Memp4,NewMemp2,NewMemp3,NewMemp4),
  120. tablefish(Hand,NewHand,T,NewT,RC),aux_play([p2,NewHand,T,NewMemp2,NewMemp3,NewMemp4])))).
  121.  
  122. %---------------------------------- JOGADA DO PLAYER 2 ------------------------------------%
  123.  
  124. aux_play([p2,Hand,T,Memp2,Memp3,Memp4]) :-
  125. writeln(Memp2),
  126. writeln("Player 2 plays"),
  127. writeln(Hand),
  128. check_mem(Memp2,Hand,Card).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement