go-atari-cli, v1.0
Posted on

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;
- by symbols (to choose):
- 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;
- parallel game simulating:
- 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-parallelSimulatoror-parallelSimulator=true);-parallelBulkySimulator— use parallel game simulating of all node children (default:false; for inverting use-parallelBulkySimulatoror-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-unicodeor-unicode=true);-colorful— use colors to display stones (default:false; for inverting use-colorfulor-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-wideor-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
