From cf3ef409e36f655b8a056f56799a76b0377f4a61 Mon Sep 17 00:00:00 2001 From: dennyabrain Date: Thu, 5 Dec 2024 22:13:26 +0530 Subject: [PATCH] chore: post rishikesh IRL snapshot --- lib/viral_spiral/entity/room.ex | 4 ++++ lib/viral_spiral/game.ex | 26 ++++++++++++++++++++++++++ lib/viral_spiral/room/factory.ex | 25 +++++++++++++++---------- test/viral_spiral/gameplay_test.exs | 17 +++++++++++++++++ 4 files changed, 62 insertions(+), 10 deletions(-) diff --git a/lib/viral_spiral/entity/room.ex b/lib/viral_spiral/entity/room.ex index a396a49..501d4f4 100644 --- a/lib/viral_spiral/entity/room.ex +++ b/lib/viral_spiral/entity/room.ex @@ -161,6 +161,10 @@ defmodule ViralSpiral.Entity.Room do Enum.random(adjectives) <> "-" <> Enum.random(nouns) end + + def reset_unjoined_players(%Room{} = room) do + %{room | unjoined_players: []} + end end defimpl ViralSpiral.Entity.Change, for: ViralSpiral.Entity.Room do diff --git a/lib/viral_spiral/game.ex b/lib/viral_spiral/game.ex index e168aeb..d9adc4c 100644 --- a/lib/viral_spiral/game.ex +++ b/lib/viral_spiral/game.ex @@ -1,6 +1,32 @@ defmodule ViralSpiral.Game do @moduledoc """ Context for Game + + ### Example Gameplay Code + new_game() + |> join(player) + |> join(player) + |> join(player) + |> start() + |> draw_card() + |> pass_card(card, from, to) + |> pass_card(card, from, to) + |> keep_card(card, from, to) + |> draw_card() + |> keep_card(from) + |> draw_card() + |> view_source() + |> hide_source() + |> pass_card(card, from, to) + |> turn_to_fake(card) + |> pass_card(card, from, to) + |> power_cancel_player(target, used_affinity) + |> draw_card() + |> power_viral_spiral(card, from, targets) + |> power_viral_spiral_pass(card, from, to) + |> keep_card(card, from) + |> keep_card(card, from) + |> pass_card(card, from, to) """ alias ViralSpiral.Room.Factory alias ViralSpiral.Canon.Card.Share diff --git a/lib/viral_spiral/room/factory.ex b/lib/viral_spiral/room/factory.ex index fd301f4..26ae52f 100644 --- a/lib/viral_spiral/room/factory.ex +++ b/lib/viral_spiral/room/factory.ex @@ -2,22 +2,23 @@ defmodule ViralSpiral.Room.Factory do @moduledoc """ Create entities for a Game Room """ - alias ViralSpiral.Canon.Card.Sparse + alias ViralSpiral.Room.Reducer alias ViralSpiral.Room.Actions alias ViralSpiral.Room.ChangeDescriptions - alias ViralSpiral.Entity.Change - alias ViralSpiral.Canon.Encyclopedia - alias ViralSpiral.Entity.Article, as: EntityArticle - alias ViralSpiral.Canon.Article - alias ViralSpiralWeb.GameRoomState - alias ViralSpiral.Entity.Deck - alias ViralSpiral.Canon.Deck, as: CanonDeck - alias ViralSpiral.Canon.DrawTypeRequirements alias ViralSpiral.Room.State alias ViralSpiral.Room.EngineConfig + alias ViralSpiral.Canon.Card.Sparse + alias ViralSpiral.Canon.Article + alias ViralSpiral.Canon.Encyclopedia + alias ViralSpiral.Canon.DrawTypeRequirements + alias ViralSpiral.Canon.Deck, as: CanonDeck + alias ViralSpiral.Entity.Change + alias ViralSpiral.Entity.Deck alias ViralSpiral.Entity.Player alias ViralSpiral.Entity.Room + alias ViralSpiral.Entity.Article, as: EntityArticle + alias ViralSpiralWeb.GameRoomState def new_room() do engine_config = %EngineConfig{} @@ -148,7 +149,11 @@ defmodule ViralSpiral.Room.Factory do end def start(%State{} = state) do - room = state.room |> Room.start(length(state.room.unjoined_players)) + room = + state.room + |> Room.start(length(state.room.unjoined_players)) + |> Room.reset_unjoined_players() + State.new(room, state.room.unjoined_players) end diff --git a/test/viral_spiral/gameplay_test.exs b/test/viral_spiral/gameplay_test.exs index 5b25449..26bd631 100644 --- a/test/viral_spiral/gameplay_test.exs +++ b/test/viral_spiral/gameplay_test.exs @@ -4,6 +4,7 @@ defmodule ViralSpiral.GameTest do We only do 2 rounds for brevity. """ + alias ViralSpiral.Room.Factory alias ViralSpiral.Entity.Player alias ViralSpiral.Entity.Turn alias ViralSpiral.Entity.Round @@ -51,4 +52,20 @@ defmodule ViralSpiral.GameTest do root ) end + + test "happy path" do + :rand.seed(:exsss, {123, 135, 254}) + + Factory.new_game() + |> Factory.join("adhiraj") + |> Factory.join("aman") + |> Factory.join("farah") + |> Factory.join("krys") + |> Factory.start() + |> Factory.draw_card() + |> then(fn state -> + # IO.inspect(state.players) + IO.inspect(state.room) + end) + end end