World Conquest Chronicles

World Conquest Chronicles

go-atari-cli, v1.0

The Atari Go program with a terminal-based interface.

Major version.

Features

  • displaying a board:
    • by symbols (to choose):
      • ASCII;
      • Unicode;
    • by colors (to choose):
      • monochrome;
      • colorful;
    • by size (to choose):
      • terse;
      • wide;
    • misc.:
      • marking searching process;
  • interacting via text commands (moves in Smart Game Format);
  • options:
    • board size (separately specified width and height);
    • human color (i.e. a computer can move first):
      • support automatic random selecting (optional);
    • move searching restrictions:
      • passes of tree building;
      • duration of tree building;
    • optimization via parallel move searching:
      • parallel game simulating:
        • of a single node child;
        • of all node children;
      • parallel tree building;
    • displaying:
      • switching between ASCII/Unicode modes;
      • switching between monochrome/colorful modes;
      • switching between terse/wide modes.

Installation

$ go get github.com/thewizardplusplus/go-atari-cli/...

Usage

$ go-atari-cli -h | -help | --help
$ go-atari-cli [options]

Options:

  • -h, -help, --help — show the help message and exit;
  • -width INTEGER — board width (default: 5);
  • -height INTEGER — board height (default: 5);
  • -humanColor {random|black|white} — human color (default: random);
  • -pass INTEGER — building passes (default: 1000);
  • -duration DURATION — building duration (e.g. 72h3m0.5s; default: 10s);
  • -parallelSimulator — use parallel game simulating of a single node child (default: false; for inverting use -parallelSimulator or -parallelSimulator=true);
  • -parallelBulkySimulator — use parallel game simulating of all node children (default: false; for inverting use -parallelBulkySimulator or -parallelBulkySimulator=true);
  • -parallelBuilder — use parallel tree building (default: true; for inverting use -parallelBuilder=false);
  • -unicode — use Unicode to display stones (default: false; for inverting use -unicode or -unicode=true);
  • -colorful — use colors to display stones (default: false; for inverting use -colorful or -colorful=true);
  • -blackColor INTEGER — SGR parameter for ANSI escape sequences for setting a color of black stones (default: 34; see for details: https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit);
  • -whiteColor INTEGER — SGR parameter for ANSI escape sequences for setting a color of white stones (default: 31; see for details: https://en.wikipedia.org/wiki/ANSI_escape_code#3/4_bit);
  • -wide — display the board wide (default: false; for inverting use -wide or -wide=true).

Examples

ascii.DecodeColor():

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/ascii"
)

func main() {
    color, _ := ascii.DecodeColor("white")
    fmt.Printf("%v\n", color)

    // Output: 1
}

ascii.EncodeColor():

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/ascii"
    models "github.com/thewizardplusplus/go-atari-models"
)

func main() {
    color := ascii.EncodeColor(models.White)
    fmt.Printf("%v\n", color)

    // Output: white
}

ascii.EncodeStone():

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/ascii"
    models "github.com/thewizardplusplus/go-atari-models"
)

func main() {
    stone := ascii.EncodeStone(models.White)
    fmt.Printf("%v\n", stone)

    // Output: o
}

ascii.BoardEncoder.EncodeBoard():

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/ascii"
    models "github.com/thewizardplusplus/go-atari-models"
)

func main() {
    // +-+-+-+-+-+
    // | | | | | |
    // +-+-+-+-+-+
    // | |B|W| | |
    // +-+-+-+-+-+
    // |B|W| |W| |
    // +-+-+-+-+-+
    // | |B|W| | |
    // +-+-+-+-+-+
    // | | | | | |
    // +-+-+-+-+-+
    board := models.NewBoard(models.Size{Width: 5, Height: 5})
    for _, move := range []models.Move{
        {Color: models.Black, Point: models.Point{Column: 1, Row: 1}},
        {Color: models.White, Point: models.Point{Column: 2, Row: 1}},
        {Color: models.Black, Point: models.Point{Column: 0, Row: 2}},
        {Color: models.White, Point: models.Point{Column: 1, Row: 2}},
        {Color: models.White, Point: models.Point{Column: 3, Row: 2}},
        {Color: models.Black, Point: models.Point{Column: 1, Row: 3}},
        {Color: models.White, Point: models.Point{Column: 2, Row: 3}},
    } {
        board = board.ApplyMove(move)
    }

    encoder := ascii.NewBoardEncoder(ascii.EncodeStone, ".", ascii.Margins{}, 1)
    fmt.Printf("%v\n", encoder.EncodeBoard(board))

    // Output:
    // 5.....
    // 4.*o..
    // 3*o.o.
    // 2.*o..
    // 1.....
    //  abcde
}

ascii.BoardEncoder.EncodeBoard() with margins:

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/ascii"
    models "github.com/thewizardplusplus/go-atari-models"
)

func main() {
    margins := ascii.Margins{
        Stone: ascii.StoneMargins{
            HorizontalMargins: ascii.HorizontalMargins{
                Left: 1,
            },
        },
        Legend: ascii.LegendMargins{
            Row: ascii.HorizontalMargins{
                Right: 1,
            },
        },
    }

    // +-+-+-+-+-+
    // | | | | | |
    // +-+-+-+-+-+
    // | |B|W| | |
    // +-+-+-+-+-+
    // |B|W| |W| |
    // +-+-+-+-+-+
    // | |B|W| | |
    // +-+-+-+-+-+
    // | | | | | |
    // +-+-+-+-+-+
    board := models.NewBoard(models.Size{Width: 5, Height: 5})
    for _, move := range []models.Move{
        {Color: models.Black, Point: models.Point{Column: 1, Row: 1}},
        {Color: models.White, Point: models.Point{Column: 2, Row: 1}},
        {Color: models.Black, Point: models.Point{Column: 0, Row: 2}},
        {Color: models.White, Point: models.Point{Column: 1, Row: 2}},
        {Color: models.White, Point: models.Point{Column: 3, Row: 2}},
        {Color: models.Black, Point: models.Point{Column: 1, Row: 3}},
        {Color: models.White, Point: models.Point{Column: 2, Row: 3}},
    } {
        board = board.ApplyMove(move)
    }

    encoder := ascii.NewBoardEncoder(ascii.EncodeStone, ".", margins, 1)
    fmt.Printf("%v\n", encoder.EncodeBoard(board))

    // Output:
    // 5  . . . . .
    // 4  . * o . .
    // 3  * o . o .
    // 2  . * o . .
    // 1  . . . . .
    //    a b c d e
}

unicode.EncodeStone():

package main

import (
    "fmt"

    "github.com/thewizardplusplus/go-atari-cli/encoding/unicode"
    models "github.com/thewizardplusplus/go-atari-models"
)

func main() {
    stone := unicode.EncodeStone(models.White)
    fmt.Printf("%v\n", stone)

    // Output: ●
}

Repository

Link: https://github.com/thewizardplusplus/go-atari-cli/tree/v1.0.

Content: code.

License: MIT.

Screenshots

ASCII/monochrome/terse

ASCII/monochrome/wide

ASCII/colorful/terse

ASCII/colorful/wide

Unicode/monochrome/terse

Unicode/monochrome/wide

Unicode/colorful/terse