MPewsey.Aycblok
0.0.1
See the version list below for details.
dotnet add package MPewsey.Aycblok --version 0.0.1
NuGet\Install-Package MPewsey.Aycblok -Version 0.0.1
<PackageReference Include="MPewsey.Aycblok" Version="0.0.1" />
paket add MPewsey.Aycblok --version 0.0.1
#r "nuget: MPewsey.Aycblok, 0.0.1"
// Install MPewsey.Aycblok as a Cake Addin #addin nuget:?package=MPewsey.Aycblok&version=0.0.1 // Install MPewsey.Aycblok as a Cake Tool #tool nuget:?package=MPewsey.Aycblok&version=0.0.1
Aycblok
About
Aycblok (pronounced "ice block," but cooler) provides a set of procedural generators for creating sliding ice block puzzles.
The aim of the puzzles is for a player character to slide all push blocks onto a goal tile. Once pushed, the push blocks slide until they are stopped by an obstacle: either a permanent stop block, a break block that is removed when hit, or another push block. The player can move freely within non-obstacle or non-player void tiles and must be positioned directly next to a push block in order to push it in one of the cardinal directions. A push block is assumed to disappear when it is pushed onto a goal tile. The puzzle is complete when all push blocks have been pushed onto goal tiles.
The following is a move-by-move report as generated for one such puzzle:
Start board: Move 1: Move 2: Key:
. . . . . . . . . . . . . . . . . . . . . . . . . . . o = Push Block
. . . . . . . . . . . . . . . . . . . . . . . . . . . % = Break Block
. . . . . . . . . . . . . . . . . . . . . . . . . . . # = Stop Block
. o . . . . . # . . . . . . . . # . . . . . . . . # . $ = Goal
. . . . $ . . . . . . . . $ . . . . . . . . $ . . . . * = Push Block at Goal
. . . . . . . % . . . . . . . . % . . . . . . . . % .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . # . o . . . . . . # . . . . . . . o #
. # . . . . . . . . # . . . . . . . . # . . . . . . .
Move 3: Move 4: Move 5:
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . # . . . . . . . . # . . . . . . . . # .
. . . . $ . . . . . . . . $ . . o . . . . . * . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . o . . . . . . . . . . . . . . . . . . .
. . . . . . . . # . . . . . . . . # . . . . . . . . #
. # . . . . . . . . # . . . . . . . . # . . . . . . .
Features
- Ice push block puzzle generation for a specified tile area.
- Input tile areas can have their tiles flagged to apply confining geometry to add challenge or visual interest.
- Support of multiple push blocks in a single puzzle area, which can interact and stop or block each other.
- Support of area obstacles such a holes by means of void tiles, which disallow traversal of a tile by the player, the push blocks, or both.
- Includes a random garbage block generator to clutter the area and make the solution less obvious.
- Customizable parameters for generation steps to help adjust the feel and difficulty of puzzles.
Generation Pipeline Example
The generation pipeline provides a way for multiple generation steps to be chained together. This is often easier than making manual calls to each generation step.
// Create a dictionary of arguments to be passed to each pipeline step.
var args = new Dictionary<string, object>
{
{ "PuzzleArea", new Array2D<PuzzleTile>(20, 20) },
{ "RandomSeed", new RandomSeed(12345) },
};
// Create a pipeline
var pipeline = new Pipeline(
new PuzzleGoalGenerator(goalSize: new Vector2DInt(2, 2)),
new PuzzleMoveGenerator(pushBlockCount: 3, targetPushCount: 20),
new PuzzleGarbageGenerator(targetDensity: 0.1f, breakBlockChance: 0.5f),
);
// Run the pipeline and retrieve an output
var results = pipeline.Run(args);
var layout = results.GetOutput<PuzzleLayout>("PuzzleLayout");
Generation Logger Example
The generators include logging messages that can be subscribed to by adding a delegate to the Logger
, as shown in the below example.
// Have the messages printed to the console.
Logger.AddListener(Console.WriteLine);
// Or added to a list.
var messages = new List<string>();
Logger.AddListener(messages.Add);
// Make sure to have your objects unsubscribe from the event to prevent memory leaks.
Logger.RemoveListener(messages.Add);
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- MPewsey.Common (>= 0.0.6)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.