2021-09-29に更新

KIF形式を調べようぜ(^~^)?

へむー(^~^) ほーん(^q^) 公開下書き

気の早い人向け

📖 kif-parser - Git hub に上げたもの

今回の話し

ramen-tabero-futsu2.png
「 KIFフォーマットを国際化したいんで、 KIFフォーマットを調べようぜ?」

📖 棋譜ファイル KIF 形式

kifuwarabe-futsu.png
「 👆 仕様書の通りだろ」

ohkina-hiyoko-futsu2.png
「 パーサーを実装しましょう」

Example:

# ---- Kifu for Windows95 V3.53 棋譜ファイル ----
開始日時:1999/07/15(木) 19:07:12
終了日時:1999/07/15(木) 19:07:17
手合割:平手
先手:先手の対局者名
後手:後手の対局者名
手数----指手---------消費時間-- # この行は、なくてもいい
1 7六歩(77) ( 0:16/00:00:16)
2 3四歩(33) ( 0:00/00:00:00)
3 中断 ( 0:03/ 0:00:19)

ramen-tabero-futsu2.png
「 👆 漢字 使ってんだな。
これは ビュー であって、モデルではないぜ。 human-presentable」

kifuwarabe-futsu.png
「 👆 ビューをパースしろだぜ」

4.プログラムが読み飛ばすコメント
 先頭が 「#」で始まる行は、プログラムが読み飛ばすコメント行である。
どこに挿入されてもいいし、また、削除してもよい。

ramen-tabero-futsu2.png
「 単一行コメントだな」

5. 手割合

手合割:x

ramen-tabero-futsu2.png
「 👆 x に入るのが……」

KIF むずでょの考えたいいかげんなエイゴ
(手割合) (Handicap)
平手 Hirate
香落ち LostLance
右香落ち LostRightLance
角落ち LostBishop
飛車落ち LostRook
飛香落ち LostRookLance
二枚落ち Lost2Pieces
三枚落ち Lost3Pieces
四枚落ち Lost4Pieces
五枚落ち Lost5Pieces
左五枚落ち LostLeft5Pieces
六枚落ち Lost6Pieces
左七枚落ち LostLeft7Pieces
右七枚落ち LostRight7Pieces
八枚落ち Lost8Pieces
十枚落ち Lost10Pieces
その他 Other

ramen-tabero-futsu2.png
「 👆 道場でみかけるやつだろ。 まあ あとで確かめるか」

6. 対局者名

先手:x
後手:x
下手:x
上手:x
x は 対局者名
KIF むずでょの考えたいいかげんなエイゴ
(手番) (Phase)
先手 FirstPlayer
後手 SecondPlayer
下手 Trainee
上手 Trainer

ramen-tabero-futsu2.png
「 👆 上手は先に指すが後手として扱うのが 感覚的かな」

7. 対局情報

  • 開始日時 - 「1999/07/15」 の形式で、日付を記録しなければいけない
    • 対局日 - 開始日時 の別名
    • 終了日時 - 開始日時と同じ書式
  • 棋戦
  • 戦型
  • 表題
  • 持ち時間
  • 消費時間
  • 場所
  • 掲載
  • 備考
  • 先手省略名 - 局面図の印刷等に使用する
  • 後手省略名 - 局面図の印刷等に使用する

ramen-tabero-futsu2.png
「 👆 ただの付加情報という感じ」

8. 詰将棋情報

  • 作品番号
  • 作品名
  • 作者
  • 発表誌
  • 発表年月
  • 出典
  • 手数
  • 完全性
  • 分類
  • 受賞
  • 備考 - 対局情報としても使われる

ramen-tabero-futsu2.png
「 👆 詰将棋だな」

9. 指し手の表記方法

9-1. 指し手

Format:

<指し手> = [<手番>]<移動先座標><駒>[<装飾子>]<移動元座標>

ramen-tabero-futsu2.png
「 👆 ここらへんから パーサーの出番かな」

9-2. 手番

<手番> = "▲" | "△"
▲: 先手(下手)、△:後手(上手)
※現在、 手番は省略している。

ramen-tabero-futsu2.png
「 👆 三角形はあったりなかったりするんだな。無視すればいいな」

9-3. 移動先座標

<移動先座標> = <X座標><Y座標> | "同 "
<X座標> "1"~"9":全角アラビア数字
<Y座標> "一"~"九":全角漢数字
"同 "は、直前の指し手の移動先

ramen-tabero-futsu2.png
「 👆 ふつう」

9-4. 駒

<駒> 駒名
玉、飛、龍、角、馬、金、銀、成銀、桂、成桂、香、成香、歩、と
龍を「竜」であらわす場合もある。
成銀を「全」、成桂を「圭」、成香を「杏」であらわす場合もある(「詰将棋パラダイス」でも使用)。
KIF むずでょの考えたいいかげんなエイゴ
(駒の種類) (PieceType)
King
Rook
Dragon
Dragon
Bishop
Horse
Gold
Silver
成銀 PromotionSilver
PromotionSilver
Knight
成桂 PromotionKnight
PromotionKnight
Lance
成香 PromotionLance
PromotionLance
Pawn
PromotionPawn

ramen-tabero-futsu2.png
「 👆 ふつう」

9-5. 装飾子

<装飾子> = ["打" | "成"]
打つ場合は、必ず「打」を付ける。
不成の場合は、「不成」を表記しない。

ramen-tabero-futsu2.png
「 👆 ふつう」

9-6. 移動元座標

<移動元座標> = "(11)"~"(99)" :()で囲んだ半角2桁の数字

ramen-tabero-futsu2.png
「 👆 ふつう」

9-7. 終局・中断時の表記

KIF むずでょの考えたいいかげんなエイゴ 説明
(中断表記) (Sign)
中断 Stop
投了 Resign 手番側が投了したことを示す。投了するまでの消費時間を記録する
持将棋 JiShogi 持将棋になったことを示す
千日手 Repeatation 直前の手で千日手になったことを示す。「千日手」の消費時間は 0 となる
詰み Checkmate
切れ負け TimeUp 時間切れで負けを示す
反則勝ち IllegalWin 直前の指し手が反則であることを示す
反則負け IllegalLose その指し手の手番側が何らかの反則で負けたことを示す。反則の内容は、コメントで記録できる
入玉勝ち EnteringKingWin 手番側が入玉宣言で勝ったことを示す
不戦勝 UnearnedWin 先手(上手)の不戦勝
不戦敗 UnearnedLose 先手(上手)の不戦敗

ramen-tabero-futsu2.png
「 👆 ふつう」

10. 消費時間

指し手と同じ行で、指し手の後に、その指し手の消費時間を表記する。
消費時間の()内の最初の数字は、その1手の消費時間(分:秒)、次の数字は、累積の消費時間(時:分:秒)を示す。
消費時間は、省略できる。

ramen-tabero-futsu2.png
「 👆 ミリ秒の精度がないのは人間向けだなあ」

ohkina-hiyoko-futsu2.png
「 一手に1時間40分長考したら どうなんの?」

ramen-tabero-futsu2.png
「 どうなるんだろうな。 100分かな? 1時間40分かな?」

11. 開始局面

詰将棋や任意の局面から始まる棋譜は、指し手の前に、開始局面が付く。
初期配置から始まる棋譜(駒落ちを含む)は、開始局面を省略できる。

ramen-tabero-futsu2.png
「 👆 startpos だな」

12. 指し手のコメント

各指し手の後に「*」で始まる行があると、その指し手に対するコメントになる(複数行可)。  
初手の前のコメントは、開始局面のコメントとなる。  

ramen-tabero-futsu2.png
「 👆 そんなもんが あるんだな。表示用のコメントかな」

ramen-tabero-futsu2.png
「 英語は Explanation とかでいいかな? プログラム用語の コメント とは分けたいしな」

13. しおり

「&」で始まる行は、その前の手を指した局面に対するしおりを示す。  
「&」の後は、しおり名を示す。  

ramen-tabero-futsu2.png
「 👆 なんだろな、この参照演算子みたいなやつ」

ohkina-hiyoko-futsu2.png
「 実例を見ましょう」

将棋の符号

📖 将棋の符号

ramen-tabero-futsu2.png
「 👆 まとめておいたぜ」

<書きかけ>

何度でもクリック!→

むずでょ

光速のアカウント凍結されちゃったんで……。ゲームプログラムを独習中なんだぜ☆電王戦IIに出た棋士もコンピューターもみんな好きだぜ☆▲(パソコン将棋)WCSC29一次予選36位、SDT5予選42位▲(パソコン囲碁)AI竜星戦予選16位

Crieitは個人で開発中です。 興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!

ボードとは?

むずでょ の最近の記事