From f46feded1ca3e837c713dc91063f53696ee7acc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Fri, 16 Aug 2024 16:54:19 +0200 Subject: [PATCH] feat: make the first game winable --- pento/lib/pento_web/live/wrong_live.ex | 72 +++++++++++++++++++++----- 1 file changed, 59 insertions(+), 13 deletions(-) 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

Your score: <%= @score %>

<%= @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