% FILE: cards.pl % LINE: Defines all components related to a player: name, melds, hand, score, % DATE: February 20, 2021 % loading prolog files :- consult("/home/matt/Documents/CSC466/Project/player.pl"). % deck(D), player((player1, Hand1, Meld1, Score1)), player((player2, Hand2, Meld2, Score2)), init_rummy(D, (player1, Hand1, Meld1, Score1), (player2, Hand2, Meld2, Score2), DiscardPile). % name, hand, melds, score player((player1, [], [], 0)). player((player2, [], [], 0)). % human player for later on? human_player(name, [], [], 0). % discard pile representation discard_pile([]). % Deck representation deck([card(ace, hearts, 1),card(two, hearts, 2),card(three, hearts, 3),card(four, hearts, 4),card(five, hearts, 5),card(six, hearts, 6), card(seven, hearts, 7),card(eight, hearts, 8),card(nine, hearts, 9),card(ten, hearts, 10),card(jack, hearts, 11),card(queen, hearts, 12), card(king, hearts, 13),card(ace, clubs, 1),card(two, clubs, 2),card(three, clubs, 3),card(four, clubs, 4),card(five, clubs, 5), card(six, clubs, 6),card(seven, clubs, 7),card(eight, clubs, 8),card(nine, clubs, 9),card(ten, clubs, 10),card(jack, clubs, 11), card(queen, clubs, 12),card(king, clubs, 13),card(ace, hearts, 1),card(two, diamonds, 2),card(three, diamonds, 3),card(four, diamonds, 4), card(five, diamonds, 5),card(six, diamonds, 6),card(seven, diamonds, 7),card(eight, diamonds, 8),card(nine, diamonds, 9),card(ten, diamonds, 10), card(jack, diamonds, 11),card(queen, diamonds, 12),card(king, diamonds, 13),card(ace, spades, 1),card(two, spades, 2),card(three, spades, 3), card(four, spades, 4),card(five, spades, 5),card(six, spades, 6),card(seven, spades, 7),card(eight, spades, 8),card(nine, spades, 9),card(ten, spades, 10), card(jack, spades, 11),card(queen, spades, 12),card(king, spades, 13)]). % shuffles deck, deal cards to players, deals one card to discard pile init_rummy(Deck, (_, Hand1, _, _), (_, Hand2, _, _), DiscardPile) :- shuffle(Deck, NewDeck), deal_out(NewDeck, NewerDeck, Hand1, NewHand1, Hand2, NewHand2, 13), deal_discard(NewerDeck, NDeck, DiscardPile), write("Player1 Hand = "), write(NewHand1), nl, nl, write("Player2 Hand = "), write(NewHand2), nl, nl, write("Discard Pile = "), write(DiscardPile), nl, nl, write("Deck = "), write(NDeck), nl, nl. % Shuffles cards shuffle(Deck, NewDeck) :- random_permutation(Deck, NewDeck). % Deals cards into the player's hands % Deck, NewDeck, Hand1, NewHand1, Hand2 NewHand2, Terminate deal_out([_|Rest], Rest, Hand1, Hand1, Hand2, Hand2, 0). deal_out([First, Second|Rest], NewDeck, Hand1, NewHand1, Hand2, NewHand2, Terminate) :- NewTerm is Terminate - 1, deal_out(Rest, NewDeck, [First|Hand1], NewHand1, [Second|Hand2], NewHand2, NewTerm). % initializes the discard pile by dealing one card into it deal_discard([First|Rest], Rest, [First]). % takes one card off the top of the deck draw_from_deck([Card|RestDeck], RestDeck, Hand, [Card|Hand]). % binds the card on top of the deck to a variable draw([First|_], First).