% FILE: game_types.pl % LINE: Defines all variants of games tested % DATE: February 20, 2021 % takes the most basic turn for a player % draws from the deck, % possibly add variable for player for writing purposes % GAME WHERE ONLY SETS ARE USED AS MOVES % --------------------------------------------------------------------------------------------------------------------------------------------------------- % The player given will take a turn, where a turn consists of picking a card (from the deck), checking to see if any melds can be played % and then randomly discarding a card take_turn_sets((Player, Hand, Melds, _), Deck, DiscardPile, (_, NewHand3, NewMelds, _), NewDeck1, NewDiscardPile) :- write(Player), write(" turn!"), nl, human_readable(Hand, HRHand), write(Player), write(" hand before turn: "), write(HRHand), nl, human_readable_melds(Melds, HRMelds), write(Player), write(" melds before turn: "), write(HRMelds), nl, nl, draw_from_deck(Deck, NewDeck1, Hand, NewHand1), find_set(NewHand1, NewHand1, Melds, NewMelds, NewHand2), random_discard(NewHand2, DiscardPile, NewHand3, NewDiscardPile), human_readable(NewHand3, HRNewHand3), write(Player), write(" hand after turn: "), write(HRNewHand3), nl, human_readable_melds(NewMelds, HRNewMelds), write(Player), write(" melds after turn: "), write(HRNewMelds), nl, nl. % initializes the game and plays an entire round of rummy play_rummy_sets :- deck(Deck), player((player1, Hand1, Melds1, Score1)), player((player2, Hand2, Melds2, Score2)), init_rummy(Deck, (_, Hand1, _, _), (_, Hand2, _, _), DiscardPile, NewDeck, (_, NewHand1, _, _), (_, NewHand2, _, _)), play_rummy_round_sets(NewDeck, (player1, NewHand1, Melds1, Score1), (player2, NewHand2, Melds2, Score2), DiscardPile). % Plays an entire game of rummy with basic moves and no heuristics play_entire_game_sets(Score1, _) :- Score1 >= 500, write("Player1 wins with score "), write(Score1). play_entire_game_sets(_, Score2) :- Score2 >= 500, write("Player2 wins with score "), write(Score2). play_entire_game_sets(Score1, Score2):- deck(Deck), player((player1, Hand1, Melds1, _)), player((player2, Hand2, Melds2, _)), init_rummy(Deck, (_, Hand1, _, _), (_, Hand2, _, _), DiscardPile, NewDeck, (_, NewHand1, _, _), (_, NewHand2, _, _)), play_rummy_round_sets(NewDeck, (player1, NewHand1, Melds1, Score1), (player2, NewHand2, Melds2, Score2), DiscardPile, UpdateScore1, UpdateScore2), play_entire_game_sets(UpdateScore1, UpdateScore2). % Plays an entire round of rummy. The round ends when either the deck, or one of the players' % hands is empty play_rummy_round_sets([], (_, Hand1, Melds1, Score1), (_, Hand2, Melds2, Score2), _, UpdateScore1, UpdateScore2) :- calculate_score((_, Hand1, Melds1, Score1), (_, Hand2, Melds2, Score2), UpdateScore1, UpdateScore2), write("Player 1 Score: "), write(UpdateScore1), nl, write("Player 2 Score: "), write(UpdateScore2), nl. play_rummy_round_sets(_, (_, [], Melds1, Score1), (_, Hand2, Melds2, Score2), _, UpdateScore1, UpdateScore2) :- calculate_score((_, [], Melds1, Score1), (_, Hand2, Melds2, Score2), UpdateScore1, UpdateScore2), write("Player 1 Score: "), write(UpdateScore1), nl, write("Player 2 Score: "), write(UpdateScore2), nl. play_rummy_round_sets(_, (_, Hand1, Melds1, Score1), (_, [], Melds2, Score2), _, UpdateScore1, UpdateScore2) :- calculate_score((_, Hand1, Melds1, Score1), (_, [], Melds2, Score2), UpdateScore1, UpdateScore2), write("Player 1 Score: "), write(UpdateScore1), nl, write("Player 2 Score: "), write(UpdateScore2), nl. play_rummy_round_sets(Deck, (Player1, Hand1, Melds1, Score1), (Player2, Hand2, Melds2, Score2), DiscardPile, UpdateScore1, UpdateScore2) :- human_readable(Deck, HRDeck), write("Deck: "), write(HRDeck), nl, human_readable(DiscardPile, HRDiscardPile), write("Discard Pile: "), write(HRDiscardPile), nl, nl, take_turn_sets((Player1, Hand1, Melds1, Score1), Deck, DiscardPile, (_, NewHand1, NewMeld1, _), NewDeck1, NewDiscard1), take_turn_sets((Player2, Hand2, Melds2, Score2), NewDeck1, NewDiscard1, (_, NewHand2, NewMeld2, _), NewDeck2, NewDiscard2), nl, nl, play_rummy_round_sets(NewDeck2, (Player1, NewHand1, NewMeld1, Score1), (Player2, NewHand2, NewMeld2, Score2), NewDiscard2, UpdateScore1, UpdateScore2). % ---------------------------------------------------------------------------------------------------------------------------------------------------------