棋譜の入力

マウスのクリックで棋譜を入力します。

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

プログラムの説明

  1. クリックで石を置く ではマウスのクリックで石を置きましたが、今回は棋譜を入力してツリーに登録します。
    マウスのクリックを検出する OnMyMouseDown() 関数です。
    左クリックで黒石と白石を交互に置きます。
    右クリックで入力モードの終了を問い合わせます。
    ClickPos(ref pos); でクリックされた座標を碁盤の座標に変換します。
    詳細は クリックで石を置く を参照して下さい。
    Append(pos, m_Ishi); が打たれた石をツリーに登録する関数です。
        short       m_Ishi = 0;         // 出題図の黒&白
    
        private void OnMyMouseDown(object sender, MouseEventArgs e)
        {   Point   pos = new Point(e.X, e.Y);
            DialogResult rc;
    
            ClickPos(ref pos);
            if (e.Button == MouseButtons.Right)
            {
                rc = MessageBox.Show("入力モードを終了しますか", "選択",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (rc == DialogResult.Yes) return;
            }
            Append(pos, m_Ishi);
            m_Ishi = (short)(0 - m_Ishi);
        }
    
  2. クリックされた手をツリーに登録する Append(pos, m_Ishi); 関数です。
    m_PT は棋譜の最後の手(現在の手)で、ここから打たれた石をリンクします。
    Check(pos, ishi) は正しい手かを判定する関数です。
    詳細は 打ち上げと禁じ手 を参照して下さい。
        CELL        m_PT;           // 棋譜 Tree
    
        // m_PT に一手追加
        private void Append(Point pos, short teban)
        {
            CELL wp;
            short ishi;
    
            if (m_PT == null)   return;
            ishi = teban;
            if (ishi==0)    ishi = 1;
            if (pos.X<0 || Check(pos, ishi)>1)
            {   MessageBox.Show("不正な石です");
                return;
            }
            wp = new CELL(m_Num++); // 基本セルを生成
            m_PT.car = wp;
            m_PT.next = wp;
            wp.level = m_PT.level;
            wp.pos = pos;
            wp.teban = ishi;
            m_PT = wp;
            upd = true;
            Play(m_Top);    // 出題図から現在までの手順を再現
        }
    

[Next Chapter ↓] 分岐の入力
[Previous Chapter ↑] 棋譜の保存

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