src/pon2/app/generate

This module implements Nazo Puyo generators.

Types

GenerateOption = object
  requirement*: GenerateRequirement
  moveCount*: Positive
  colorCount*: range[1 .. 5]
  heights*: array[Column, Option[Natural]]
  puyoCounts*: tuple[color: Option[Natural], garbage: Natural] ## `color` can be `none` only if the kind is chain-like.
  connect2Counts*: tuple[total: Option[Natural], vertical: Option[Natural],
                         horizontal: Option[Natural]]
  connect3Counts*: tuple[total: Option[Natural], vertical: Option[Natural],
                         horizontal: Option[Natural], lShape: Option[Natural]]
  allowDouble*: bool
  allowLastDouble*: bool
Option for generation.
GenerateRequirement = object
Requirement for generation.
GenerateRequirementColor {.pure.} = enum
  All, SingleColor, Garbage, Color
Requirement color for generation.

Procs

func color(self: GenerateRequirement): GenerateRequirementColor {.inline,
    ...raises: [], tags: [], forbids: [].}
func color=(self: var GenerateRequirement; color: GenerateRequirementColor) {.
    inline, ...raises: [], tags: [], forbids: [].}
Sets the color of the requirement. If the requirement does not have a color, UnpackDefect is raised.
proc generate(option: GenerateOption; rule: Rule;
              parallelCount: Positive = processorCount()): NazoPuyoWrap {.
    inline, ...raises: [GenerateError, KeyError], tags: [TimeEffect], forbids: [].}
Returns a randomly generated nazo puyo that has a unique solution. If generation fails, GenerateError will be raised. parallelCount will be ignored on JS backend.
proc generate(option: GenerateOption; rule: Rule; seed: SomeSignedInt;
              parallelCount: Positive = processorCount()): NazoPuyoWrap {.inline.}
Returns a randomly generated nazo puyo that has a unique solution. If generation fails, GenerateError is raised. parallelCount is ignored on JS backend.
proc generate[F: TsuField or WaterField](option: GenerateOption;
    parallelCount: Positive = processorCount()): NazoPuyo[F] {.inline.}
Returns a randomly generated nazo puyo that has a unique solution. If generation fails, GenerateError will be raised. parallelCount will be ignored on JS backend.
proc generate[F: TsuField or WaterField](option: GenerateOption;
    seed: SomeSignedInt; parallelCount: Positive = processorCount()): NazoPuyo[F] {.
    inline.}
Returns a randomly generated nazo puyo that has a unique solution. If generation fails, GenerateError is raised. parallelCount is ignored on JS backend.
func initGenerateRequirement(kind: RequirementKind;
                             color: GenerateRequirementColor): GenerateRequirement {.
    inline, ...raises: [], tags: [], forbids: [].}
Returns a requirement.
func initGenerateRequirement(kind: RequirementKind;
                             color: GenerateRequirementColor;
                             number: RequirementNumber): GenerateRequirement {.
    inline, ...raises: [], tags: [], forbids: [].}
Returns a requirement.
func initGenerateRequirement(kind: RequirementKind; number: RequirementNumber): GenerateRequirement {.
    inline, ...raises: [], tags: [], forbids: [].}
func kind(self: GenerateRequirement): RequirementKind {.inline, ...raises: [],
    tags: [], forbids: [].}
Returns the kind of the requirement.
func kind=(self: var GenerateRequirement; kind: RequirementKind) {.inline,
    ...raises: [], tags: [], forbids: [].}
Sets the kind of the requirement.
func number(self: GenerateRequirement): RequirementNumber {.inline, ...raises: [],
    tags: [], forbids: [].}
func number=(self: var GenerateRequirement; number: RequirementNumber) {.inline,
    ...raises: [], tags: [], forbids: [].}
Sets the number of the requirement. If the requirement does not have a color, UnpackDefect is raised.