前田稔(Maeda Minoru)の超初心者のプログラム入門
![]()
![]()
CELL m_Copy; // 棋譜のコピー領域
CELL m_wp; // 作業用(m_Copyの入力)
short m_Ishi = 0; // 黒&白
//★ Mouse Click
private void OnMyMouseDown(object sender, MouseEventArgs e)
{ Point pos = new Point(e.X, e.Y);
CELL wp;
ClickPos(ref pos);
if (e.Button == MouseButtons.Right)
{
cdr_Link();
return;
}
if (pos.X < 0) break;
wp = new CELL(m_Num++); // 基本セルを生成
wp.pos = pos;
wp.teban = m_Ishi;
m_wp.car = wp;
m_wp = wp;
m_Ban[pos.X, pos.Y] = m_Ishi;
m_Ishi = (short)(0 - m_Ishi);
break;
Invalidate();
}
|
// m_PT から分岐手順の追加
private void cdr_Link()
{
DialogResult rc;
CELL wp;
if (m_PT == null) return;
rc = MessageBox.Show("分岐手順として追加しますか", "選択",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (rc == DialogResult.No) return;
// 分岐が無いとき、分岐の開始を作成
if (m_PT.cdr==null)
{ // 基本手順→分岐選択(level アップ)
m_PT.cdr = m_PT.car;
m_PT.car = null;
m_PT = m_PT.cdr;
CELL.UpLevel(m_PT, 1);
CELL.UpLevel(m_Copy, m_PT.level-m_Copy.level);
}
// 分岐があるとき
else
{ if (m_PT.level < m_PT.cdr.level)
{ CELL.UpLevel(m_Copy, m_PT.cdr.level-m_Copy.level);
}
// 選択A(cdr)を level アップ
else
{ wp = m_PT.cdr;
m_PT.cdr = m_PT.car;
m_PT.car = null;
m_PT = m_PT.cdr;
CELL.UpLevel(m_PT, 1);
CELL.UpLevel(m_Copy, m_PT.level-m_Copy.level);
m_Copy.car.cdr = wp;
}
}
// 分岐手順の追加
for(; m_PT.cdr!=null; m_PT=m_PT.cdr);
m_PT.cdr = m_Copy.car;
m_PT.next = m_Copy.car;
m_PT = m_Copy.car;
}
|
// level をアップ(ダウン)
static public void UpLevel(CELL pt, int lv)
{ if (pt==null) return;
pt.level = pt.level + lv;
UpLevel(pt.car, lv);
UpLevel(pt.cdr, lv);
return;
}
|
![]()
[Next Chapter ↓] RadioButton
[Previous Chapter ↑] 棋譜の入力