
前田稔(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);
}
|
![]()