% GAME WHERE ONLY RUNS ARE USED %---------------------------------------------------------------------------------------------------------------------------------------------------------- % 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_runs((Player, Hand, Melds, _), Deck, DiscardPile, (_, NewHand3, NewestMelds, _), 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), merge_sort(NewHand1, NewHand2), find_run(NewHand2, NewHand3, [diamonds, clubs, hearts, spades], Melds, NewestMelds), random_discard(NewHand3, DiscardPile, NewHand4, NewDiscardPile), human_readable(NewHand4, HRNewHand4), write(Player), write(" hand after turn: "), write(HRNewHand4), nl, human_readable_melds(NewestMelds, HRNewestMelds), write(Player), write(" melds after turn: "), write(HRNewestMelds), nl, nl. % initializes the game and plays an entire round of rummy play_rummy_runs :- deck(Deck), player((player1, Hand1, Melds1, Score1)), player((player2, Hand2, Melds2, Score2)), init_rummy(Deck, (_, Hand1, _, _), (_, Hand2, _, _), DiscardPile, NewDeck, (_, NewHand1, _, _), (_, NewHand2, _, _)), play_rummy_round_runs(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_runs(Score1, _) :- Score1 >= 500, write("Player1 wins with score "), write(Score1). play_entire_game_runs(_, Score2) :- Score2 >= 500, write("Player2 wins with score "), write(Score2). play_entire_game_runs(Score1, Score2):- deck(Deck), player((player1, Hand1, Melds1, _)), player((player2, Hand2, Melds2, _)), init_rummy(Deck, (_, Hand1, _, _), (_, Hand2, _, _), DiscardPile, NewDeck, (_, NewHand1, _, _), (_, NewHand2, _, _)), play_rummy_round_runs(NewDeck, (player1, NewHand1, Melds1, Score1), (player2, NewHand2, Melds2, Score2), DiscardPile, UpdateScore1, UpdateScore2), play_entire_game_runs(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_runs([], (_, 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_runs(_, (_, [], 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_runs(_, (_, 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_runs(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_runs((Player1, Hand1, Melds1, Score1), Deck, DiscardPile, (_, NewHand1, NewMeld1, _), NewDeck1, NewDiscard1), take_turn_runs((Player2, Hand2, Melds2, Score2), NewDeck1, NewDiscard1, (_, NewHand2, NewMeld2, _), NewDeck2, NewDiscard2), nl, nl, play_rummy_round_runs(NewDeck2, (Player1, NewHand1, NewMeld1, Score1), (Player2, NewHand2, NewMeld2, Score2), NewDiscard2, UpdateScore1, UpdateScore2).