...

Package catastrophe

import "joueur/games/catastrophe"
Overview
Index

Overview ▾

Package catastrophe contains all the interfaces and AI that are required to represent and play Catastrophe.

Catastrophe Game Info ▾

Convert as many humans to as you can to survive in this post-apocalyptic wasteland.

More Info

The full game rules for Catastrophe can be found on GitHub.

Additional materials, such as the story and game template can be found on GitHub as well.

Variables

TileDirections are all the direction strings that Tile's neighbors can be in.

var TileDirections = [...]string{"North", "South", "East", "West"}

func PlayerName

func PlayerName() string

PlayerName should return the string name of your Player in games it plays.

type AI

AI is your personal AI implimentation.

type AI struct {
    base.AIImpl
}

func (*AI) Ended

func (ai *AI) Ended(won bool, reason string)

Ended is called when the game ends, you can clean up your data and dump files here if need be.

func (*AI) Game

func (ai *AI) Game() Game

Game returns the instance of the Game this AI is currently playing.

func (*AI) GameUpdated

func (ai *AI) GameUpdated()

GameUpdated is called every time the game's state updates, so if you are tracking anything you can update it here.

func (*AI) Player

func (ai *AI) Player() Player

Player returns the instance of the Player this AI is represented by in the game this AI is playing.

func (*AI) RunTurn

func (ai *AI) RunTurn() bool

RunTurn this is called every time it is this AI.player's turn.

func (*AI) Start

func (ai *AI) Start()

Start is called once the game starts and your AI has a Player and Game. You can initialize your AI struct here.

type Game

Game is convert as many humans to as you can to survive in this post- apocalyptic wasteland.

type Game interface {
    // Parent interfaces
    base.Game

    // CatEnergyMult is the multiplier for the amount of energy
    // regenerated when resting in a shelter with the cat overlord.
    CatEnergyMult() float64

    // CurrentPlayer is the player whose turn it is currently. That
    // player can send commands. Other players cannot.
    CurrentPlayer() Player

    // CurrentTurn is the current turn number, starting at 0 for the
    // first player's turn.
    CurrentTurn() int64

    // GameObjects is a mapping of every game object's ID to the
    // actual game object. Primarily used by the server and client to
    // easily refer to the game objects via ID.
    GameObjects() map[string]GameObject

    // HarvestCooldown is the amount of turns it takes for a Tile that
    // was just harvested to grow food again.
    HarvestCooldown() int64

    // Jobs is all the Jobs that Units can have in the game.
    Jobs() []Job

    // LowerHarvestAmount is the amount that the harvest rate is
    // lowered each season.
    LowerHarvestAmount() int64

    // MapHeight is the number of Tiles in the map along the y
    // (vertical) axis.
    MapHeight() int64

    // MapWidth is the number of Tiles in the map along the x
    // (horizontal) axis.
    MapWidth() int64

    // MaxTurns is the maximum number of turns before the game will
    // automatically end.
    MaxTurns() int64

    // MonumentCostMult is the multiplier for the cost of actions when
    // performing them in range of a monument. Does not effect pickup
    // cost.
    MonumentCostMult() float64

    // MonumentMaterials is the number of materials in a monument.
    MonumentMaterials() int64

    // NeutralMaterials is the number of materials in a neutral
    // Structure.
    NeutralMaterials() int64

    // Players is array of all the players in the game.
    Players() []Player

    // Session is a unique identifier for the game instance that is
    // being played.
    Session() string

    // ShelterMaterials is the number of materials in a shelter.
    ShelterMaterials() int64

    // StartingFood is the amount of food Players start with.
    StartingFood() int64

    // StarvingEnergyMult is the multiplier for the amount of energy
    // regenerated when resting while starving.
    StarvingEnergyMult() float64

    // Structures is every Structure in the game.
    Structures() []Structure

    // Tiles is all the tiles in the map, stored in Row-major order.
    // Use `x + y * mapWidth` to access the correct index.
    Tiles() []Tile

    // TimeAddedPerTurn is the amount of time (in nano-seconds) added
    // after each player performs a turn.
    TimeAddedPerTurn() float64

    // TurnsBetweenHarvests is after a food tile is harvested, the
    // number of turns before it can be harvested again.
    TurnsBetweenHarvests() int64

    // TurnsToCreateHuman is the number of turns between fresh humans
    // being spawned on the road.
    TurnsToCreateHuman() int64

    // TurnsToLowerHarvest is the number of turns before the harvest
    // rate is lowered (length of each season basically).
    TurnsToLowerHarvest() int64

    // Units is every Unit in the game.
    Units() []Unit

    // WallMaterials is the number of materials in a wall.
    WallMaterials() int64

    // GetTileAt returns the Tile at a give position (x, y).
    GetTileAt(int64, int64) Tile
}

type GameObject

GameObject is an object in the game. The most basic class that all game classes should inherit from automatically.

type GameObject interface {
    // Parent interfaces
    base.GameObject

    // Logs is any strings logged will be stored here. Intended for
    // debugging.
    Logs() []string

    // Log adds a message to this GameObject's logs. Intended for your
    // own debugging purposes, as strings stored here are saved in the
    // gamelog.
    Log(string)
}

type Job

Job is information about a Unit's job.

type Job interface {
    // Parent interfaces
    GameObject

    // ActionCost is the amount of energy this Job normally uses to
    // perform its actions.
    ActionCost() float64

    // CarryLimit is how many combined resources a Unit with this Job
    // can hold at once.
    CarryLimit() int64

    // Moves is the number of moves this Job can make per turn.
    Moves() int64

    // RegenRate is the amount of energy normally regenerated when
    // resting at a shelter.
    RegenRate() float64

    // Title is the Job title.
    //
    // Literal Values: "fresh human", "cat overlord", "soldier",
    // "gatherer", "builder", or "missionary"
    Title() string

    // Upkeep is the amount of food per turn this Unit consumes. If
    // there isn't enough food for every Unit, all Units become
    // starved and do not consume food.
    Upkeep() int64
}

type Player

Player is a player in this game. Every AI controls one player.

type Player interface {
    // Parent interfaces
    GameObject

    // Cat is the overlord cat Unit owned by this Player.
    Cat() Unit

    // ClientType is what type of client this is, e.g. 'Python',
    // 'JavaScript', or some other language. For potential data mining
    // purposes.
    ClientType() string

    // Food is the amount of food owned by this player.
    Food() int64

    // Lost is if the player lost the game or not.
    Lost() bool

    // Name is the name of the player.
    Name() string

    // Opponent is this player's opponent in the game.
    Opponent() Player

    // ReasonLost is the reason why the player lost the game.
    ReasonLost() string

    // ReasonWon is the reason why the player won the game.
    ReasonWon() string

    // Structures is every Structure owned by this Player.
    Structures() []Structure

    // TimeRemaining is the amount of time (in ns) remaining for this
    // AI to send commands.
    TimeRemaining() float64

    // Units is every Unit owned by this Player.
    Units() []Unit

    // Upkeep is the total upkeep of every Unit owned by this Player.
    // If there isn't enough food for every Unit, all Units become
    // starved and do not consume food.
    Upkeep() int64

    // Won is if the player won the game or not.
    Won() bool
}

type Structure

Structure is a structure on a Tile.

type Structure interface {
    // Parent interfaces
    GameObject

    // EffectRadius is the range of this Structure's effect. For
    // example, a radius of 1 means this Structure affects a 3x3
    // square centered on this Structure.
    EffectRadius() int64

    // Materials is the number of materials in this Structure. Once
    // this number reaches 0, this Structure is destroyed.
    Materials() int64

    // Owner is the owner of this Structure if any, otherwise nil.
    //
    // Value can be returned as a nil pointer.
    Owner() Player

    // Tile is the Tile this Structure is on.
    //
    // Value can be returned as a nil pointer.
    Tile() Tile

    // Type is the type of Structure this is ('shelter', 'monument',
    // 'wall', 'road', 'neutral').
    //
    // Literal Values: "neutral", "shelter", "monument", "wall", or
    // "road"
    Type() string
}

type Tile

Tile is a Tile in the game that makes up the 2D map grid.

type Tile interface {
    // Parent interfaces
    GameObject

    // Food is the number of food dropped on this Tile.
    Food() int64

    // HarvestRate is the amount of food that can be harvested from
    // this Tile per turn.
    HarvestRate() int64

    // Materials is the number of materials dropped on this Tile.
    Materials() int64

    // Structure is the Structure on this Tile if present, otherwise
    // nil.
    //
    // Value can be returned as a nil pointer.
    Structure() Structure

    // TileEast is the Tile to the 'East' of this one (x+1, y). Nil if
    // out of bounds of the map.
    //
    // Value can be returned as a nil pointer.
    TileEast() Tile

    // TileNorth is the Tile to the 'North' of this one (x, y-1). Nil
    // if out of bounds of the map.
    //
    // Value can be returned as a nil pointer.
    TileNorth() Tile

    // TileSouth is the Tile to the 'South' of this one (x, y+1). Nil
    // if out of bounds of the map.
    //
    // Value can be returned as a nil pointer.
    TileSouth() Tile

    // TileWest is the Tile to the 'West' of this one (x-1, y). Nil if
    // out of bounds of the map.
    //
    // Value can be returned as a nil pointer.
    TileWest() Tile

    // TurnsToHarvest is the amount of turns before this resource can
    // be harvested.
    TurnsToHarvest() int64

    // Unit is the Unit on this Tile if present, otherwise nil.
    //
    // Value can be returned as a nil pointer.
    Unit() Unit

    // X is the x (horizontal) position of this Tile.
    X() int64

    // Y is the y (vertical) position of this Tile.
    Y() int64

    // GetNeighbors returns an array of the neighbors of this Tile.
    GetNeighbors() []Tile

    // IsPathable returns if the Tile is pathable for FindPath
    IsPathable() bool

    // HasNeighbor checks if this Tile has a specific neighboring Tile.
    HasNeighbor(Tile) bool
}

type Unit

Unit is a unit in the game.

type Unit interface {
    // Parent interfaces
    GameObject

    // Acted is whether this Unit has performed its action this turn.
    Acted() bool

    // Energy is the amount of energy this Unit has (from 0.0 to
    // 100.0).
    Energy() float64

    // Food is the amount of food this Unit is holding.
    Food() int64

    // Job is the Job this Unit was recruited to do.
    Job() Job

    // Materials is the amount of materials this Unit is holding.
    Materials() int64

    // MovementTarget is the tile this Unit is moving to. This only
    // applies to neutral fresh humans spawned on the road. Otherwise,
    // the tile this Unit is on.
    //
    // Value can be returned as a nil pointer.
    MovementTarget() Tile

    // Moves is how many moves this Unit has left this turn.
    Moves() int64

    // Owner is the Player that owns and can control this Unit, or nil
    // if the Unit is neutral.
    //
    // Value can be returned as a nil pointer.
    Owner() Player

    // Squad is the Units in the same squad as this Unit. Units in the
    // same squad attack and defend together.
    Squad() []Unit

    // Starving is whether this Unit is starving. Starving Units
    // regenerate energy at half the rate they normally would while
    // resting.
    Starving() bool

    // Tile is the Tile this Unit is on.
    //
    // Value can be returned as a nil pointer.
    Tile() Tile

    // TurnsToDie is the number of turns before this Unit dies. This
    // only applies to neutral fresh humans created from combat.
    // Otherwise, 0.
    TurnsToDie() int64

    // Attack attacks an adjacent Tile. Costs an action for each Unit
    // in this Unit's squad. Units in the squad without an action
    // don't participate in combat. Units in combat cannot move
    // afterwards. Attacking structures will not give materials.
    Attack(Tile) bool

    // ChangeJob changes this Unit's Job. Must be at max energy (100)
    // to change Jobs.
    ChangeJob(string) bool

    // Construct constructs a Structure on an adjacent Tile.
    Construct(Tile, string) bool

    // Convert converts an adjacent Unit to your side.
    Convert(Tile) bool

    // Deconstruct removes materials from an adjacent Tile's
    // Structure. You cannot deconstruct friendly structures (see
    // `Unit.attack`).
    Deconstruct(Tile) bool

    // Drop drops some of the given resource on or adjacent to the
    // Unit's Tile. Does not count as an action.
    Drop(Tile, string, int64) bool

    // Harvest harvests the food on an adjacent Tile.
    Harvest(Tile) bool

    // Move moves this Unit from its current Tile to an adjacent Tile.
    Move(Tile) bool

    // Pickup picks up some materials or food on or adjacent to the
    // Unit's Tile. Does not count as an action.
    Pickup(Tile, string, int64) bool

    // Rest regenerates energy. Must be in range of a friendly shelter
    // to rest. Costs an action. Units cannot move after resting.
    Rest() bool
}