diff --git a/pento/lib/pento_web/live/wrong_live.ex b/pento/lib/pento_web/live/wrong_live.ex
index b86319b..13f3faa 100644
--- a/pento/lib/pento_web/live/wrong_live.ex
+++ b/pento/lib/pento_web/live/wrong_live.ex
@@ -1,8 +1,16 @@
defmodule PentoWeb.WrongLive do
use PentoWeb, :live_view
+ @winning_score 15
+
def mount(_params, _session, socket) do
- {:ok, assign(socket, score: 0, message: "Make a guess:", time: time())}
+ socket =
+ socket
+ |> assign(score: 0)
+ |> assign(message: "Make a guess:")
+ |> assign(number: random_number())
+
+ {:ok, socket}
end
def render(assigns) do
@@ -10,33 +18,71 @@ defmodule PentoWeb.WrongLive do
<%= @message %>
- It's <%= @time %>
-
- <%= for n <- 1..10 do %>
+
+ <%= if @score >= winning_score() do %>
<.link
- class="bg-blue-500 hover:bg-blue-700
- text-white font-bold py-2 px-4 border border-blue-700 rounded m-1"
- phx-click="guess"
- phx-value-number={n}
+ href={~p"/guess"}
+ class="bg-blue-500 hover:bg-blue-700 text-white text-center font-bold py-2 px-4 border border-blue-700 rounded m-1"
>
- <%= n %>
+ Play again!
+ <% else %>
+ <%= for n <- 1..10 do %>
+ <.link
+ class="bg-blue-500 hover:bg-blue-700 text-white text-center font-bold py-2 px-4 border border-blue-700 rounded m-1"
+ phx-click="guess"
+ phx-value-number={n}
+ >
+ <%= n %>
+
+ <% end %>
<% end %>
"""
end
- defp time() do
- DateTime.utc_now |> to_string
+ defp random_number() do
+ :rand.uniform(10)
end
+ defp winning_score(), do: @winning_score
+
def handle_event("guess", %{"number" => guess}, socket) do
- message = "Your guess: #{guess}. Wrong. Guess again."
+ number = socket.assigns.number |> to_string()
+ socket =
+ if number == guess do
+ correct_guess(guess, socket)
+ else
+ wrong_guess(guess, socket)
+ end
+
+ {:noreply, socket}
+ end
+
+ defp correct_guess(guess, socket) do
+ score = socket.assigns.score + 8
+
+ message = if score >= @winning_score do
+ "Your guess: #{guess}. Correct. You won!"
+ else
+ "Your guess: #{guess}. Correct. Guess the next number."
+ end
+
+ socket
+ |> assign(message: message)
+ |> assign(score: score)
+ |> assign(number: random_number())
+ end
+
+ defp wrong_guess(guess, socket) do
+ message = "Your guess: #{guess}. Wrong. Guess again."
score = socket.assigns.score - 1
- {:noreply, assign(socket, message: message, score: score, time: time())}
+ socket
+ |> assign(message: message)
+ |> assign(score: score)
end
end