lesson03

package
v0.0.0-...-4b218a3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2022 License: MIT Imports: 10 Imported by: 0

README

lesson03

moves のパースを作って、do_move を作ろうぜ(^~^)

Build

go build

Run

kifuwarabe-wcsc31 lesson03
usi

isready

usinewgame

pos

do 7g7f

pos

quit

Documentation

Index

Constants

View Source
const (
	// Author - 囲碁思考エンジンの作者名だぜ☆(^~^)
	Author = "Satoshi Takahashi"
)
View Source
const BOARD_SIZE = 100

00~99

View Source
const RESIGN_MOVE = Move(0)

0 は 投了ということにするぜ(^~^)

Variables

App - アプリケーション変数の宣言

Functions

func File

func File(sq Square) int8

File - マス番号から筋(列)を取り出します

func MainLoop

func MainLoop()

MainLoop - 開始。

func Rank

func Rank(sq Square) int8

Rank - マス番号から段(行)を取り出します

func Sprint

func Sprint(pos *Position) string

Print - 局面出力(^q^)

Types

type HandIdx

type HandIdx uint
const (
	HAND_K1 HandIdx = iota // 0: 先手玉
	HAND_R1
	HAND_B1
	HAND_G1
	HAND_S1
	HAND_N1
	HAND_L1
	HAND_P1
	HAND_K2
	HAND_R2
	HAND_B2
	HAND_G2
	HAND_S2
	HAND_N2
	HAND_L2
	HAND_P2
	HAND_SIZE
	HAND_TYPE_SIZE = HAND_SIZE / 2 // 割り切れる
	HAND_IDX_BEGIN = HAND_K1
	HAND_IDX_END   = HAND_SIZE // この数を含まない
)

Hand piece type (先後付きの持ち駒の種類)

* 0~15 * 持ち駒を打つときに利用 * 駒台に玉も置ける

func FromCodeToHandIndex

func FromCodeToHandIndex(code byte, convertAlternativeValue *func(code byte) HandIdx) HandIdx

func FromSqToHandIndex

func FromSqToHandIndex(sq Square) HandIdx

type HandSq

type HandSq Square
const (
	// 持ち駒を打つ 100~115
	// 先手飛打
	HANDSQ_K1 HandSq = 100 + iota
	HANDSQ_R1
	HANDSQ_B1
	HANDSQ_G1
	HANDSQ_S1
	HANDSQ_N1
	HANDSQ_L1
	HANDSQ_P1
	HANDSQ_K2
	HANDSQ_R2
	HANDSQ_B2
	HANDSQ_G2
	HANDSQ_S2
	HANDSQ_N2
	HANDSQ_L2
	HANDSQ_P2
	HANDSQ_END
	HANDSQ_BEGIN     = HANDSQ_K1
	HANDSQ_SIZE      = (HANDSQ_END - HANDSQ_BEGIN)
	HANDSQ_TYPE_SIZE = HANDSQ_SIZE / 2 // 割り切れる
)

func FromCodeToHandSq

func FromCodeToHandSq(code byte, convertAlternativeValue *func(code byte) HandSq) HandSq

func FromSqToHandSq

func FromSqToHandSq(sq Square) HandSq

func (HandSq) ToSq

func (h HandSq) ToSq() Square

type Move

type Move uint16

Move - 指し手

15bit で表せるはず(^~^) .pdd dddd dsss ssss

1~7bit: 移動元(0~127) 8~14bit: 移動先(0~127) 15bit: 成(0~1)

func NewMove

func NewMove(from Square, to Square, promotion bool) Move

NewMove - 初期値として 移動元マス、移動先マス、成りの有無 を指定してください

func ParseMove

func ParseMove(command string, i *int, phase Phase) (Move, error)

ParseMove - 指し手コマンドを解析

func (Move) Destructure

func (move Move) Destructure() (Square, Square, bool)

Destructure - 移動元マス、移動先マス、成りの有無

移動元マス 0000 0000 0111 1111 (Mask) 0x007f .pdd dddd dsss ssss

移動先マス 0011 1111 1000 0000 (Mask) 0x3f80 .pdd dddd dsss ssss

成 0100 0000 0000 0000 (Mask) 0x4000 .pdd dddd dsss ssss

func (Move) ReplaceDestination

func (move Move) ReplaceDestination(sq Square) Move

ReplaceDestination - Replace 7 destination square bits 1100 0000 0111 1111 (Clear) 0xc07f .pdd dddd dsss ssss

func (Move) ReplacePromotion

func (move Move) ReplacePromotion(promotion bool) Move

ReplacePromotion - Replace 1 promotion bit 0100 0000 0000 0000 (Stand) 0x4000 1011 1111 1111 1111 (Clear) 0xbfff .pdd dddd dsss ssss

func (Move) ReplaceSource

func (move Move) ReplaceSource(sq Square) Move

ReplaceSource - Replace 7 source square bits 1111 1111 1000 0000 (Clear) 0xff80 .pdd dddd dsss ssss

func (Move) ToCodeOfM

func (move Move) ToCodeOfM() string

ToCodeOfM - SFEN の moves の後に続く指し手に使える文字列を返します

type Phase

type Phase byte

1:先手 2:後手

const (
	// 空マス
	ZEROTH Phase = iota
	// 先手
	FIRST
	// 後手
	SECOND
)

func Who

func Who(piece Piece) Phase

Who - 駒が先手か後手か空升かを返します

func (Phase) ToCodeOfPh

func (ph Phase) ToCodeOfPh() string

ToCodeOfPh - 文字列

type Piece

type Piece uint8

先後付きの駒

const (
	PIECE_EMPTY Piece = iota // 0: 駒なし
	PIECE_K1                 // 1: ▲玉
	PIECE_R1                 // 2: ▲飛
	PIECE_B1                 // 3: ▲角
	PIECE_G1                 // 4: ▲金
	PIECE_S1                 // 5: ▲銀
	PIECE_N1                 // 6: ▲桂
	PIECE_L1                 // 7: ▲香
	PIECE_P1                 // 8: ▲歩
	PIECE_PR1                // 9: ▲竜
	PIECE_PB1                //10: ▲馬
	PIECE_PS1                //11: ▲全
	PIECE_PN1                //12: ▲圭
	PIECE_PL1                //13: ▲杏
	PIECE_PP1                //14: ▲と
	PIECE_K2                 //15: ▽玉
	PIECE_R2                 //16: ▽飛
	PIECE_B2                 //17: ▽角
	PIECE_G2                 //18: ▽金
	PIECE_S2                 //19: ▽銀
	PIECE_N2                 //20: ▽桂
	PIECE_L2                 //21: ▽香
	PIECE_P2                 //22: ▽歩
	PIECE_PR2                //23: ▽竜
	PIECE_PB2                //24: ▽馬
	PIECE_PS2                //25: ▽全
	PIECE_PN2                //26: ▽圭
	PIECE_PL2                //27: ▽杏
	PIECE_PP2                //28: ▽と
)

func FromCodeToPiece

func FromCodeToPiece(piece string) Piece

FromCodeToPiece - 文字列からPieceを作成

func FromPhaseAndPieceTypeToPiece

func FromPhaseAndPieceTypeToPiece(phase Phase, pieceType PieceType) Piece

FromPhaseAndPieceTypeToPiece - 駒作成。空マスは作れません

func (Piece) ToCodeOfPc

func (pc Piece) ToCodeOfPc() string

ToCodeOfPc - 文字列

type PieceType

type PieceType byte

先後のない駒種類

const (
	PIECE_TYPE_EMPTY PieceType = 0 + iota // 空マス
	PIECE_TYPE_K
	PIECE_TYPE_R
	PIECE_TYPE_B
	PIECE_TYPE_G
	PIECE_TYPE_S
	PIECE_TYPE_N
	PIECE_TYPE_L
	PIECE_TYPE_P
	PIECE_TYPE_PR
	PIECE_TYPE_PB
	PIECE_TYPE_PS
	PIECE_TYPE_PN
	PIECE_TYPE_PL
	PIECE_TYPE_PP
)

func What

func What(piece Piece) PieceType

What - 先後のない駒種類を返します。

func WhatHand

func WhatHand(sq Square) PieceType

WhatHand - 盤外のマス番号を、駒台の持ち駒の種類と識別し、先後なしの駒種類を返します

func WhatHandSq

func WhatHandSq(handSq HandSq) PieceType

func (PieceType) ToCodeOfPt

func (pt PieceType) ToCodeOfPt() string

ToCodeOfPt - 文字列

type Position

type Position struct {
	// [19] は 1九、 [91] は 9一(^~^)反時計回りに90°回転した将棋盤の状態で入ってるぜ(^~^)想像しろだぜ(^~^)
	Board []Piece
	// 持ち駒の数だぜ(^~^) R, B, G, S, N, L, P, r, b, g, s, n, l, p
	Hands []int
	// 先手が1、後手が2(^~^)
	Phase Phase
	// 何手目か(^~^)
	MovesNum int
	// 指し手のリスト(^~^)
	Moves []Move
}

Position - 局面

func NewPosition

func NewPosition() *Position

func (*Position) DoMove

func (pos *Position) DoMove(move Move)

DoMove - 一手指すぜ(^~^)

func (*Position) GetPieceAtIndex

func (pPos *Position) GetPieceAtIndex(idx int) Piece

func (*Position) GetPieceAtSq

func (pPos *Position) GetPieceAtSq(sq Square) Piece

func (*Position) ReadPosition

func (pos *Position) ReadPosition(command string)

ReadPosition - 局面を読み取ります。マルチバイト文字は含まれていないぜ(^q^)

func (*Position) ResetToStartpos

func (pos *Position) ResetToStartpos()

ResetToStartpos - 初期局面にします。

type Square

type Square int8

マス番号 00~99,100~113

const (
	// 途中から使う iota は 0スタートとは限らないことに注意
	SQ_K1 Square = 100 + iota // 持ち駒を打つ 100~115
	SQ_R1                     // 先手飛打
	SQ_B1
	SQ_G1
	SQ_S1
	SQ_N1
	SQ_L1
	SQ_P1
	SQ_K2
	SQ_R2
	SQ_B2
	SQ_G2
	SQ_S2
	SQ_N2
	SQ_L2
	SQ_P2
	SQ_HAND_START = SQ_K1
	SQ_HAND_END   = SQ_P2 + 1 // この数を含まない
)
const (
	HANDSQ_TYPE_SIZE_SQ Square = Square(HANDSQ_TYPE_SIZE)
)
const (
	HAND_TYPE_SIZE_SQ Square = Square(HAND_TYPE_SIZE)
)
const (
	SQ_EMPTY Square = 0 // マス番号を指定しないことを意味するマス番号
)

func FromFileRankToSq

func FromFileRankToSq(file int8, rank int8) Square

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL