defmodule War do
def play_game(deck) do
[player1, player2] = deal_cards(deck)
play_rounds(player1, player2)
enddef deal_cards(deck) do
deck |> Enum.chunk_every(26)
enddef play_rounds(player1, player2) do
case {player1, player2} do
{, } →
{:tie, }{[], player2_deck} -> {:player2, player2_deck} {player1_deck, []} -> {:player1, player1_deck} {[card1 | hand1_without_card], [card2 | hand2_without_card]} -> case compare_cards(card1, card2) do :win -> play_rounds(hand1_without_card ++ [card1, card2], hand2_without_card) :lose -> play_rounds(hand1_without_card, hand2_without_card ++ [card1, card2]) :tie -> play_war(hand1_without_card, hand2_without_card, [card1, card2]) end end
end
We assume both cards are at same rank for a WAR.
def compare_cards(rank1, rank2) when rank1 == rank2, do: :tie
def compare_cards(1, ), do: :win
def compare_cards(, 1), do: :lose
def compare_cards(rank1, rank2) when rank1 > rank2 or rank1 == 1, do: :win
def compare_cards(rank1, rank2) when rank1 < rank2 or rank2 == 1, do: :loseWhen both the players have only one card in their hand in war.
def play_war([a], [b], _) when a == b and is_integer(a), do: {:tie, }
def play_war([a], [b], _) when a > b and is_integer(a), do: :win
def play_war([a], [b], _) when a < b and is_integer(a), do: :loseWhen 1 of the player have only one card.
def play_war([a], [b | _], _) when a > b and is_integer(a), do: :win
def play_war([a | _], [b], _) when a < b and is_integer(a), do: :losedef play_war(, , ), do: {:tie, []}
def play_war(, , _), do: :win
def play_war(, _, _), do: :losedef play_war(hand1, hand2, pile) do
[face_down_c1, card1 | rest1] = hand1
[face_down_c2, card2 | rest2] = hand2face_down_cards = [face_down_c1, face_down_c2] case compare_cards(card1, card2) do :win -> play_rounds(rest1 ++ pile ++ face_down_cards ++ [card1, card2], rest2) :lose -> play_rounds(rest1, rest2 ++ pile ++ [card1, card2] ++ face_down_cards) :tie -> # Again a war. play_war(rest1, rest2, pile) end
end
end
Hey Waheed, curious about this. In part of your code, you use player2_deck, and player1_deck but haven’t defined player1_deck and player2_deck is essentially not used. What’s supposed to happen with these two?