前田稔(Maeda Minoru)の超初心者のプログラム入門
string head = "(\r\n;FF[3]GM[1]AP[maeda-igo Ver-1]SZ[19]"; 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("Shift_JIS")); writer.WriteLine(head); SaveBan(); if (m_Top != null) SaveTree(); writer.WriteLine(")"); writer.Close(); } |
short[,] m_St = new short[19, 19]; // 出題図 string alph = "abcdefghijklmnopqrs"; private void SaveBan() { string str; int i,j; writer.Write("AB"); for(i=0; i<19; i++) for(j=0; j<19; j++) if (m_St[i,j]==1) { str = "[" + alph[i] + alph[j] + "]"; writer.Write(str); } writer.Write("AW"); for(i=0; i<19; i++) for(j=0; j<19; j++) if (m_St[i,j]==-1) { str = "[" + alph[i] + alph[j] + "]"; writer.Write(str); } if (m_Top.id!=string.Empty) { str = "N[" + m_Top.id + "]"; writer.Write(str); } if (m_Top.msg!=string.Empty) { str = "C[" + m_Top.msg + "]"; writer.Write(str); } writer.Write("\r\n"); } |
private void SaveTree() { CELL wp; string str; int n, i; // 保存セルのリンクを設定 m_Top.next = null; m_PT = m_Top; SetLink(m_Top); for(wp=m_Top; wp!=null; wp=wp.next) { // セル(一手分)を編集して書き出す str = string.Empty; if (wp.teban!=0) { if (wp.teban == 1) { str = ";B[" + alph[wp.pos.X] + alph[wp.pos.Y] + "]"; writer.Write(str); } if (wp.teban == -1) { str = ";W[" + alph[wp.pos.X] + alph[wp.pos.Y] + "]"; writer.Write(str); } if (wp.id!=string.Empty) { str = "N[" + wp.id + "]"; writer.Write(str); } if (wp.msg != string.Empty) { str = "C[" + wp.msg + "]"; writer.Write(str); } } // レベルアップ'(' ダウン')'を書き出す if (wp.next == null) { for (i = wp.level + 1; i > 0; i--) writer.Write(")"); break; } n = wp.next.level - wp.level; if (wp.car == null && wp.cdr == null) { for (i = (0-n)+1; i > 0; i--) writer.Write(")"); writer.Write("\r\n("); continue; } if (wp.car == null) { if (n == 0) writer.Write(")"); writer.Write("\r\n("); } } writer.Write("\r\n"); } |
private void SetLink(CELL pt) { if (pt==null) return; if (pt.teban!=0) // teban==0 のセルは保存する必要が無い { m_PT.next = pt; // m_PT の後部に連鎖 m_PT = pt; m_PT.next = null; } SetLink(pt.car); SetLink(pt.cdr); } |