Veggerby.Boards.Cards 0.1.0-prerelease0212

This is a prerelease version of Veggerby.Boards.Cards.
dotnet add package Veggerby.Boards.Cards --version 0.1.0-prerelease0212
                    
NuGet\Install-Package Veggerby.Boards.Cards -Version 0.1.0-prerelease0212
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Veggerby.Boards.Cards" Version="0.1.0-prerelease0212" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Veggerby.Boards.Cards" Version="0.1.0-prerelease0212" />
                    
Directory.Packages.props
<PackageReference Include="Veggerby.Boards.Cards" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Veggerby.Boards.Cards --version 0.1.0-prerelease0212
                    
#r "nuget: Veggerby.Boards.Cards, 0.1.0-prerelease0212"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Veggerby.Boards.Cards@0.1.0-prerelease0212
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Veggerby.Boards.Cards&version=0.1.0-prerelease0212&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Veggerby.Boards.Cards&version=0.1.0-prerelease0212&prerelease
                    
Install as a Cake Tool

Veggerby.Boards.Cards

Deterministic cards and decks module for Veggerby.Boards. Provides card and deck artifacts, ordered piles, and events for create, shuffle, draw, move, and discard. Shuffles use the engine's RNG snapshot for full replay determinism.

Depends on Veggerby.Boards. Use when you need card mechanics (decks, hands, discard piles) with immutable, event-driven semantics.

Install

 dotnet add package Veggerby.Boards.Cards

Scope

Adds:

  • Artifacts: Card, Deck with named piles
  • State: DeckState with ordered piles and optional supply counts
  • Events: CreateDeckEvent, ShuffleDeckEvent, DrawCardsEvent, MoveCardsEvent, DiscardCardsEvent
  • Builder: CardsGameBuilder wiring a minimal open phase and helper CreateInitialDeckEvent()

Not included: UI/AI, network, or game-specific victory logic.

Quick Start

using Veggerby.Boards.Cards;

// Build a minimal cards-capable game
var builder = new CardsGameBuilder();
builder.WithSeed(42UL); // optional: seed RNG for deterministic shuffle
var progress = builder.Compile();

// Initialize deck state (piles)
progress = progress.HandleEvent(builder.CreateInitialDeckEvent());

// Shuffle the draw pile deterministically
var deck = progress.Game.GetArtifact<Deck>("deck-1");
progress = progress.HandleEvent(new ShuffleDeckEvent(deck, CardsGameBuilder.Piles.Draw));

// Draw two cards to hand
progress = progress.HandleEvent(new DrawCardsEvent(deck, CardsGameBuilder.Piles.Draw, CardsGameBuilder.Piles.Hand, 2));

// Inspect state
var ds = progress.State.GetState<DeckState>(deck);
var handCount = ds.Piles[CardsGameBuilder.Piles.Hand].Count; // 2

Key Concepts (Cards Layer)

  • Named piles: decks are composed of ordered piles (e.g., draw, hand, discard, in-play). Order is preserved; appends add to the end.
  • Deterministic shuffle: uses GameState.Random (seed via GameBuilder.WithSeed) so the same inputs produce the same shuffled order.
  • Immutable snapshots: events never mutate in place; rules gate validity and mutators return a new GameState.
  • Declarative intent: events express “what” (draw 2 from draw → hand), rules ensure “can”, mutators implement “how”.

Extending This Module

Examples:

  • Multiple decks per game (register additional Deck artifacts)
  • Additional piles (e.g., exile, tableau) by declaring them on the Deck
  • Supply/gain semantics via a new event (peek, reveal, gain from supply)
  • Reshuffle policy when draw is empty (explicit event to move discard → draw and shuffle)

Keep extensions pure and deterministic.

Testing

Run the module tests:

cd test/Veggerby.Boards.Tests
dotnet test --filter "FullyQualifiedName~Cards"

Test Coverage:

  • Deck creation and pile initialization
  • Deterministic shuffle (parity across runs with same seed)
  • Draw operations (single and multiple cards)
  • Move and discard operations
  • Peek and reveal operations
  • Reshuffle mechanics (discard to draw)
  • Invalid operation rejection

Known Limitations

  • No Visibility Tracking: Revealed cards not tracked by default (extend via extras if needed)
  • No Card Effects: Card-specific abilities not implemented (extend for specific games)
  • Single Deck Focus: Multi-deck scenarios work but require manual artifact registration

References

Interop With Core

All transitions are immutable and deterministic. Cards logic is layered on core primitives (events, rules, phases) and does not introduce side effects.

Versioning

Semantic versioning aligned with repository releases. Breaking behavior/API changes bump MAJOR.

Contributing

Open issues & PRs at https://github.com/veggerby/Veggerby.Boards. Follow contribution guidelines and code style.

License

MIT License. See root LICENSE.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Veggerby.Boards.Cards:

Package Downloads
Veggerby.Boards.DeckBuilding

Deck-building core scaffolding for Veggerby.Boards: deterministic supply and player zones built on Cards module.

Veggerby.Boards.Monopoly

Monopoly implementation components for Veggerby.Boards built atop the core engine.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-prerelease0212 78 4/13/2026
0.1.0-prerelease0211 87 2/8/2026
0.1.0-prerelease0210 75 1/26/2026
0.1.0-prerelease0209 75 1/12/2026
0.1.0-prerelease0208 77 1/11/2026
0.1.0-prerelease0207 78 1/11/2026
0.1.0-prerelease0206 88 1/11/2026
0.1.0-prerelease0205 86 1/10/2026
0.1.0-prerelease0204 84 1/9/2026
0.1.0-prerelease0203 80 1/9/2026
0.1.0-prerelease0202 80 1/9/2026
0.1.0-prerelease0201 78 1/8/2026
0.1.0-prerelease0200 84 1/8/2026
0.1.0-prerelease0199 81 1/7/2026
0.1.0-prerelease0198 82 1/6/2026
0.1.0-prerelease0197 76 1/6/2026
0.1.0-prerelease0196 81 1/6/2026
0.1.0-prerelease0195 81 1/5/2026
0.1.0-prerelease0194 97 1/4/2026
0.1.0-prerelease0193 262 12/17/2025
Loading failed