Manages the game state of a game of hive and determines valid playable moves.
Additionally, produces new game states from the application of valid moves.
This engine optionally supports games with all 3 official Hive expansions: the Mosquito, the Lady Bug, and the Pill Bug. See details on the GameState below for options.
Usage
You can read about each of the engine’s components below, or dive right in with an instance of GameState:
let state = GameState()
Unit
A Unit represents one of the various pieces a game of Hive is played with – ants, spiders, etc.
Each Unit has a class, which defines the type of bug it is, an owner to let you know who it belongs to, and an identifier to differentiate each instance.
There are a variety of functions for determining if a Unit can move, and where it can move to.
Each class of Unit also provides an extension to the Unit class to calculate its moves. See extension classes such as Unit+Ant and Unit+Beetle for more.
Position
A Position is a space on the “board” where a Unit can be placed or moved to.
Positions rely on a hexagonal grid system, inspired by an excellent article by Red Blog Games. Details on the grid system implementation can be found here.
The Position class also provides functions for determining if a Unit can move freely between two Positions, very important for determining valid moves in the current state.
Movement
A Movement provides details on moving a Unit around the board, or introducing a new Unit to the board.
.move(unit:to:) specifies instructions for moving a Unit to a Position
.place(unit:at:) specifies instructions for placing a Unit at a Position
.yoink(pillBug:unit:to:) specifies instructions for moving a Unit through the use of a Pill Bug to a Position
.pass specifies a non-movement, only available when a player has no other moves.
GameState
The GameState is the structure which manages the overall state of a game of Hive.
Get started by creating an instance: let state = GameState()
Options
By default, a GameState will create a basic game with no additional options. You can enable expansion pieces and common unofficial rules through GameState.Option, as well as performance enhancements.
Provide a set of GameState.Option to the GameState(options:) constructor to change which options you have enabled.
API
You can enumerate all the current moves available with availableMoves.
To update the GameState with a given move, call apply(_:) which will mutate the state in place. If you want to explore various Movements, you can undo a move with undoMove()
For better performance, you can disable move validation with GameState.Option.disableMovementValidation.
Installation
Swift Package Manager
This package is built with Swift Package Manager, so you can require it as a dependency in your Package.swift file:
Hive Engine
Manages the game state of a game of hive and determines valid playable moves.
Additionally, produces new game states from the application of valid moves.
This engine optionally supports games with all 3 official Hive expansions: the Mosquito, the Lady Bug, and the Pill Bug. See details on the
GameStatebelow for options.Usage
You can read about each of the engine’s components below, or dive right in with an instance of
GameState:Unit
A
Unitrepresents one of the various pieces a game of Hive is played with – ants, spiders, etc.Each
Unithas aclass, which defines the type of bug it is, anownerto let you know who it belongs to, and anidentifierto differentiate each instance.There are a variety of functions for determining if a
Unitcan move, and where it can move to.Each class of
Unitalso provides an extension to theUnitclass to calculate its moves. See extension classes such asUnit+AntandUnit+Beetlefor more.Position
A
Positionis a space on the “board” where aUnitcan be placed or moved to.Positions rely on a hexagonal grid system, inspired by an excellent article by Red Blog Games. Details on the grid system implementation can be found here.The
Positionclass also provides functions for determining if aUnitcan move freely between twoPositions, very important for determining valid moves in the current state.Movement
A
Movementprovides details on moving aUnitaround the board, or introducing a newUnitto the board..move(unit:to:)specifies instructions for moving aUnitto aPosition.place(unit:at:)specifies instructions for placing aUnitat aPosition.yoink(pillBug:unit:to:)specifies instructions for moving aUnitthrough the use of a Pill Bug to aPosition.passspecifies a non-movement, only available when a player has no other moves.GameState
The
GameStateis the structure which manages the overall state of a game of Hive.Get started by creating an instance:
let state = GameState()Options
By default, a
GameStatewill create a basic game with no additional options. You can enable expansion pieces and common unofficial rules throughGameState.Option, as well as performance enhancements.Provide a set of
GameState.Optionto theGameState(options:)constructor to change which options you have enabled.API
You can enumerate all the current moves available with
availableMoves.To update the
GameStatewith a given move, callapply(_:)which will mutate the state in place. If you want to explore variousMovements, you can undo a move withundoMove()For better performance, you can disable move validation with
GameState.Option.disableMovementValidation.Installation
Swift Package Manager
This package is built with Swift Package Manager, so you can require it as a dependency in your
Package.swiftfile:See the Releases for the most recent release.
Requirements
Contributing
swift testswiftlintfrom the root of the repository.Notice
Hive Engine is not affiliated with Gen42 Games in any way.