Documentation ¶
Overview ¶
駒の価値
利きボード
利きのテスト
Index ¶
- Constants
- Variables
- func CountAllPieces(pPos *Position) [8]int
- func CountErrorCountLists(countList1 [8]int, countList2 [8]int) int
- func EvalMaterial(piece l03.Piece) int16
- func FlipPhase(phase l03.Phase) l03.Phase
- func GenMoveList(pPosSys *PositionSystem, pPos *Position) []l03.Move
- func GetControlLayerName(c ControlLayerT) string
- func MainLoop()
- func NifuFirst(pPos *Position, file l03.Square) bool
- func NifuSecond(pPos *Position, file l03.Square) bool
- func OnBoard(sq l03.Square) bool
- func OnHands(sq l03.Square) bool
- func Search(pPosSys *PositionSystem) l03.Move
- func ShowAllPiecesCount(pPos *Position)
- func ShuffleBoard(pPosSys *PositionSystem, pPos *Position)
- func SprintBoard(pPos *Position, phase l03.Phase, startMovesNum int, offsetMovesIndex int, ...) string
- func SquareFrom(file l03.Square, rank l03.Square) l03.Square
- func SumAbsControl(pPosSys *PositionSystem, layer1 int) [2]int
- func TestControl(pPosSys *PositionSystem, pPos *Position) (bool, string)
- func ValidateSq(sq l03.Square)
- type ControlLayerT
- type MoveEnd
- type PosLayerT
- type Position
- func (pPos *Position) GetLocationOfLongPiece(index int) l03.Square
- func (pPos *Position) GetPieceLocation(index int) l03.Square
- func (pPos *Position) Hetero(from l03.Square, to l03.Square) bool
- func (pPos *Position) Homo(from l03.Square, to l03.Square) bool
- func (pPos *Position) IsEmptySq(sq l03.Square) bool
- type PositionSystem
- func (pPosSys *PositionSystem) AddControlBishop(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
- func (pPosSys *PositionSystem) AddControlDiff(pPos *Position, c ControlLayerT, from l03.Square, sign int8)
- func (pPosSys *PositionSystem) AddControlLance(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
- func (pPosSys *PositionSystem) AddControlRook(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
- func (pPosSys *PositionSystem) ClearControlDiff()
- func (pPosSys *PositionSystem) ClearControlLayer(c ControlLayerT)
- func (pPosSys *PositionSystem) DiffControl(c1 ControlLayerT, c2 ControlLayerT, c3 ControlLayerT)
- func (pPosSys *PositionSystem) DoMove(pPos *Position, move l03.Move)
- func (pPosSys *PositionSystem) Dump() string
- func (pPosSys *PositionSystem) FlipPhase()
- func (pPosSys *PositionSystem) GetPhase() l03.Phase
- func (pPosSys *PositionSystem) MergeControlDiff()
- func (pPosSys *PositionSystem) ReadPosition(pPos *Position, command string)
- func (pPosSys *PositionSystem) RecalculateControl(pPos *Position, c1 ControlLayerT)
- func (pPosSys *PositionSystem) SprintControl(phase l03.Phase, c ControlLayerT) string
- func (pPosSys *PositionSystem) SprintDiff(b1 PosLayerT, b2 PosLayerT) string
- func (pPosSys *PositionSystem) SprintRecord() string
- func (pPosSys *PositionSystem) SprintSfen(pPos *Position) string
- func (pPosSys *PositionSystem) UndoMove(pPos *Position)
Constants ¶
const ( POS_LAYER_MAIN = PosLayerT(0) POS_LAYER_COPY = PosLayerT(1) // テスト用 POS_LAYER_DIFF1 = PosLayerT(2) // テスト用 POS_LAYER_DIFF2 = PosLayerT(3) // テスト用 POS_LAYER_SIZE = 4 )
const ( CONTROL_LAYER_SUM = ControlLayerT(0) CONTROL_LAYER_DIFF_ROOK_OFF = ControlLayerT(1) CONTROL_LAYER_DIFF_BISHOP_OFF = ControlLayerT(2) CONTROL_LAYER_DIFF_LANCE_OFF = ControlLayerT(3) CONTROL_LAYER_DIFF_PUT = ControlLayerT(4) // 打とか指すとか CONTROL_LAYER_DIFF_REMOVE = ControlLayerT(5) CONTROL_LAYER_DIFF_CAPTURED = ControlLayerT(6) CONTROL_LAYER_DIFF_LANCE_ON = ControlLayerT(7) CONTROL_LAYER_DIFF_BISHOP_ON = ControlLayerT(8) CONTROL_LAYER_DIFF_ROOK_ON = ControlLayerT(9) CONTROL_LAYER_TEST_COPY = ControlLayerT(10) // テスト用 CONTROL_LAYER_TEST_ERROR = ControlLayerT(11) // テスト用 CONTROL_LAYER_TEST_RECALCULATION = ControlLayerT(12) // テスト用 再計算 CONTROL_LAYER_DIFF_START = ControlLayerT(1) CONTROL_LAYER_DIFF_END = ControlLayerT(10) // この数を含まない。テスト用も含まない CONTROL_LAYER_ALL_SIZE = 13 // この数を含まない )
const MAX_VALUE = 32767
const PHASE_ARRAY_SIZE = 2
[0], [1]
const RESIGN_MOVE_END = MoveEnd(0)
0 は 投了ということにするぜ(^~^)
const RESIGN_VALUE = -32768
Variables ¶
var App l01.Lesson01App
App - アプリケーション変数の宣言
var OneDigitNumbers = [10]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
position sfen の盤のスペース数に使われますN
Functions ¶
func CountErrorCountLists ¶
CountErrorCountLists - 数えた駒の枚数を比較します
func EvalMaterial ¶
EvalMaterial - 駒の価値。開発者のむずでょが勝手に決めた(^~^)
func GenMoveList ¶
func GenMoveList(pPosSys *PositionSystem, pPos *Position) []l03.Move
GenMoveList - 現局面の指し手のリスト。合法手とは限らないし、全ての合法手を含むとも限らないぜ(^~^)
func GetControlLayerName ¶
func GetControlLayerName(c ControlLayerT) string
GetControlLayerName - 利きボードのレイヤーの名前
func ShuffleBoard ¶
func ShuffleBoard(pPosSys *PositionSystem, pPos *Position)
ShuffleBoard - 盤上の駒、持ち駒をシャッフルします ゲーム中にはできない動きをするので、利きの計算は無視します。 最後に利きは再計算します
func SprintBoard ¶
func SprintBoard(pPos *Position, phase l03.Phase, startMovesNum int, offsetMovesIndex int, moves_text string) string
Print - 局面出力(^q^)
func SquareFrom ¶
From - 筋と段からマス番号を作成します
func SumAbsControl ¶
func SumAbsControl(pPosSys *PositionSystem, layer1 int) [2]int
SumAbsControl - 利きテーブルの各マスを絶対値にし、その総和を返します
func TestControl ¶
func TestControl(pPosSys *PositionSystem, pPos *Position) (bool, string)
TestControl
Types ¶
type MoveEnd ¶
type MoveEnd uint8
MoveEnd - 移動先と成り
pddd dddd
1~7bit: 移動先(0~127) 8bit: 成(0~1)
func GenMoveEnd ¶
GenMoveEnd - 利いているマスの一覧を返します。動けるマスではありません。
func NewMoveEnd ¶
NewMoveEnd - 移動先マス、成りの有無 を指定してください
func (MoveEnd) Destructure ¶
Destructure
移動先マス 0111 1111 (Mask) 0x7f pddd dddd
成 1000 0000 (Mask) 0x80 pddd dddd
type Position ¶
type Position struct { // Go言語で列挙型めんどくさいんで文字列で(^~^) // [19] は 1九、 [91] は 9一(^~^)反時計回りに90°回転した将棋盤の状態で入ってるぜ(^~^)想像しろだぜ(^~^) Board [l03.BOARD_SIZE]l03.Piece // 玉と長い利きの駒の場所。長い利きを消すのに使う // [0]先手玉 [1]後手玉 [2:3]飛 [4:5]角 [6:9]香 PieceLocations [l07.PCLOC_SIZE]l03.Square // 持ち駒の数だぜ(^~^)玉もある(^~^) K, R, B, G, S, N, L, P, k, r, b, g, s, n, l, p Hands1 [l03.HAND_SIZE]int }
Position - 局面 TODO 利きボードも含めたい
func NewPosition ¶
func NewPosition() *Position
func (*Position) GetLocationOfLongPiece ¶
GetLongPiece - 長い利きの駒の場所を取得
func (*Position) Hetero ¶
Hetero - 移動元と移動先の駒を持つプレイヤーが異なれば真。移動先が空マスでも真 持ち駒は指定してはいけません。 Homo の逆だぜ(^~^)片方ありゃいいんだけど(^~^)
type PositionSystem ¶
type PositionSystem struct { // 局面 PPosition [POS_LAYER_SIZE]*Position // マスへの利き数、または差分が入っています。デバッグ目的で無駄に分けてるんだけどな(^~^) // 利きテーブル [0]先手 [1]後手 // [0] 利き // [1] 飛の利き引く(差分) // [2] 角の利き引く(差分) // [3] 香の利き引く(差分) // [4] ムーブ用(差分) // [5] ムーブ用(差分) // [6] ムーブ用(差分) // [7] 香の利き戻す(差分) // [8] 角の利き戻す(差分) // [9] 飛の利き戻す(差分) // [10] テスト用 // [11] テスト用 // [12] テスト用(再計算) ControlBoards [2][CONTROL_LAYER_ALL_SIZE][l03.BOARD_SIZE]int8 // 開始局面の時点で何手目か(^~^)これは表示のための飾りのようなものだぜ(^~^) StartMovesNum int // 開始局面から数えて何手目か(^~^)0から始まるぜ(^~^) OffsetMovesIndex int // 指し手のリスト(^~^) // 1手目は[0]へ、512手目は[511]へ入れろだぜ(^~^) Moves [l02.MOVES_SIZE]l03.Move // 取った駒のリスト(^~^)アンドゥ ムーブするときに使うだけ(^~^)指し手のリストと同じ添え字を使うぜ(^~^) CapturedList [l02.MOVES_SIZE]l03.Piece // contains filtered or unexported fields }
PositionSystem - 局面にいろいろな機能を付けたもの
func NewPositionSystem ¶
func NewPositionSystem() *PositionSystem
func (*PositionSystem) AddControlBishop ¶
func (pPosSys *PositionSystem) AddControlBishop(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
AddControlBishop - 長い利きの駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*PositionSystem) AddControlDiff ¶
func (pPosSys *PositionSystem) AddControlDiff(pPos *Position, c ControlLayerT, from l03.Square, sign int8)
AddControlDiff - 盤上のマスを指定することで、そこにある駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*PositionSystem) AddControlLance ¶
func (pPosSys *PositionSystem) AddControlLance(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
AddControlLance - 長い利きの駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*PositionSystem) AddControlRook ¶
func (pPosSys *PositionSystem) AddControlRook(pPos *Position, c ControlLayerT, sign int8, excludeFrom l03.Square)
AddControlRook - 長い利きの駒の利きを調べて、利きの差分テーブルの値を増減させます
func (*PositionSystem) ClearControlDiff ¶
func (pPosSys *PositionSystem) ClearControlDiff()
ClearControlDiff - 利きの差分テーブルをクリアーするぜ(^~^)
func (*PositionSystem) ClearControlLayer ¶
func (pPosSys *PositionSystem) ClearControlLayer(c ControlLayerT)
func (*PositionSystem) DiffControl ¶
func (pPosSys *PositionSystem) DiffControl(c1 ControlLayerT, c2 ControlLayerT, c3 ControlLayerT)
DiffControl - 利きテーブルの差分計算
func (*PositionSystem) DoMove ¶
func (pPosSys *PositionSystem) DoMove(pPos *Position, move l03.Move)
DoMove - 一手指すぜ(^~^)
func (*PositionSystem) Dump ¶
func (pPosSys *PositionSystem) Dump() string
Dump - 内部状態を全部出力しようぜ(^~^)?
func (*PositionSystem) FlipPhase ¶
func (pPosSys *PositionSystem) FlipPhase()
FlipPhase - フェーズをひっくり返すぜ(^~^)
func (*PositionSystem) GetPhase ¶
func (pPosSys *PositionSystem) GetPhase() l03.Phase
GetPhase - フェーズ
func (*PositionSystem) MergeControlDiff ¶
func (pPosSys *PositionSystem) MergeControlDiff()
MergeControlDiff - 利きの差分を解消するぜ(^~^)
func (*PositionSystem) ReadPosition ¶
func (pPosSys *PositionSystem) ReadPosition(pPos *Position, command string)
ReadPosition - 局面を読み取ります。マルチバイト文字は含まれていないぜ(^q^)
func (*PositionSystem) RecalculateControl ¶
func (pPosSys *PositionSystem) RecalculateControl(pPos *Position, c1 ControlLayerT)
RecalculateControl - 利きの再計算
func (*PositionSystem) SprintControl ¶
func (pPosSys *PositionSystem) SprintControl(phase l03.Phase, c ControlLayerT) string
SprintControl - 利き数ボード出力(^q^)
Parameters ---------- * `c` - 利き数ボードのレイヤー番号(^~^)
func (*PositionSystem) SprintDiff ¶
func (pPosSys *PositionSystem) SprintDiff(b1 PosLayerT, b2 PosLayerT) string
Print - 2局面の比較用画面出力(^q^)
func (*PositionSystem) SprintRecord ¶
func (pPosSys *PositionSystem) SprintRecord() string
SprintRecord - 棋譜表示(^~^)
func (*PositionSystem) SprintSfen ¶
func (pPosSys *PositionSystem) SprintSfen(pPos *Position) string
SprintSfen - SFEN文字列返せよ(^~^)
func (*PositionSystem) UndoMove ¶
func (pPosSys *PositionSystem) UndoMove(pPos *Position)
UndoMove - 棋譜を頼りに1手戻すぜ(^~^)