Version 4

SGF Version 4(FF[4]) に対応します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. SGF Version 4(FF[4]) に対応します。
    今までは Version 3(FF[3]) の仕様に対応していました。
    ところが、ネット上では Version 4 が主流になっているようです。
    FF4 にバージョンアップすると棋譜や詰碁をネットからダウンロードして、利用出来るようになります。
    たけのこ囲碁協会棋譜紹介 を参照して下さい。
    FF4 にバージョンアップしたときの特徴は Text Code の設定と LB タグです。
  2. Text Code から説明します。
    Windows では長らく ANSI(Shift JIS) が使われてきましたが、最近では Unicode が主流になってきました。
    Visual Studio でも C# のソースファイルは Unicode(utf-8) で保存されています。
    そこで SGF ファイルでも Unicode(utf-8) を使うことにします。
    文字コードは CA タグで指定します。
    Kogo's Joseki Dictionary からダウンロードした定石ファイルのヘッダーです。
    FF[4] がバージョンで、CA[UTF-8] が文字コードの指定です。
    (;GM[1]FF[4]CA[UTF-8]AP[CGoban:3]ST[2]
    RU[Japanese]SZ[19]KM[0.00]
    GN[Kogo's Joseki, Jeongseok, Di`ngshi` Dictionary]DT[13.9.2007]CP[see below]GC[No commercial distribution.
    Please, no non-commercial distribution without
    permission and a link to the KJD webpage.
    Contact kogo@waterfire.us. or kogo on KGS
    Updates available at: http://waterfire.us/joseki.htm.
    
    Copyright 2006-2007 by Andre Ay.
    Copyright 1998-2005 by Gary Odom.
    Portions copyright 2000-2001 by Stefan Verstraeten. 
    ]EV[]PC[]SO[]LB[nc:F][oc:D][qc:A][nd:G][od:E][pd:C][qd:B][oe:H][qj:I]]VW[]
    ( ・・・ 以下棋譜が続きます
    
  3. ANSI(Shift JIS) または Unicode(utf-8) で作成されたファイルを読み込むメソッドです。
    まず "utf-8" で読み込んで "CA[UTF-8]" を検索します。
    見つからなければ "shift_jis" で読み直します。
    Text Code の詳細は TEXT File の入力 を参照して下さい。
        // SGF FILE をロード
        private void LoadSGF(string file_name)
        {
            if (!File.Exists(file_name)) return;
            StreamReader reader = new StreamReader(file_name,Encoding.GetEncoding("utf-8"));
            m_SGF= reader.ReadToEnd();
            reader.Close();
            int find = m_SGF.IndexOf("CA[UTF-8]", 0, 80);
            if (find<0)
            {   reader = new StreamReader(file_name, Encoding.GetEncoding("shift_jis"));
                m_SGF = reader.ReadToEnd();
                reader.Close();
            }
                ・・・  
    
  4. 保存は Unicode(utf-8) を使うことにします。
    このプログラムで使用する簡単な SGF のヘッダーです。
        string      head = "(\r\n;FF[4]CA[UTF-8]GM[1]AP[IGO Soft by maeda Ver-2]SZ[19]";
    
  5. "utf-8" で保存します。
        // SGF ファイルに保存
        private void SGFSave(string file)
        {   DialogResult rc;
    
            if (File.Exists(file))
            {   rc = MessageBox.Show("上書きで保存しますか", "選択",
                     MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rc == DialogResult.No)  return;
            }
            writer = new StreamWriter(file,false, Encoding.GetEncoding("utf-8"));
            writer.WriteLine(head);
                ・・・
    
  6. 次に LB tag の説明です。
    LB tag を使うと分岐手順が存在することを明白に記述することが出来ます。
    LB[xy:m] (座標xyに文字mをマーク)
    
    (;W[pd]LB[ob:c][oc:b][qd:a]]
    
  7. LB tag を使った SGF ファイルの例です。
    B[ca] から3分岐、B[aa] から2分岐しています。
    注意しなければならないことは、分岐先の棋譜は括弧で囲って記述されていなければなりません。
    このことは Version 3 でも同じです。
    3分岐 [ab:a][bb:b][ea:c] 及び、2分岐 [ba:a][da:b] している分岐先の棋譜を確かめて下さい。
    (
    ;FF[4]CA[UTF-8]GM[1]AP[IGO Soft by maeda Ver-2]SZ[19]
    AB[bc][cc][db]AW[cd][cf][dc][de][eb][ec]
    ;B[ca]LB[ab:a][bb:b][ea:c]]
    (;W[ab];B[bb];W[ea];B[aa]LB[ba:a][da:b]]
    (;W[ba];B[ac];W[da];B[cb])
    (;W[da];B[cb];W[ba];B[ac]))
    (;W[bb];B[ab];W[ba];B[bd];W[be];B[ad])
    (;W[ea];B[ab];W[bd];B[ba]))
    )
    

[Next Chapter ↓] LB tag をプログラム
[Previous Chapter ↑] 分岐の入力

超初心者のプログラム入門(C# Frame Work)