| 1 |
|
| 2 |
|
| 3 |
Public Class frmMain |
| 4 |
|
| 5 |
Private _kifuDataDirectoryReader As KifuDataDirectoryReader |
| 6 |
|
| 7 |
Private _editKifu As Board.Kifu.Kifu |
| 8 |
|
| 9 |
Dim closePoint As Integer = 0 |
| 10 |
|
| 11 |
Private _isLoaded As Boolean = False |
| 12 |
|
| 13 |
Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load |
| 14 |
Viewer.IsBoardViewRotated = False |
| 15 |
Viewer.Initialize() |
| 16 |
Initialize() |
| 17 |
|
| 18 |
EnabledControl() |
| 19 |
VisibleControl() |
| 20 |
_isLoaded = True |
| 21 |
End Sub |
| 22 |
|
| 23 |
Private Sub btnAnswer_Click(sender As System.Object, e As System.EventArgs) Handles btnAnswer.Click |
| 24 |
If _kifuDataDirectoryReader.hasNextKyokumen Then |
| 25 |
viewer.kyokumen = _kifuDataDirectoryReader.NextKyokumen() |
| 26 |
viewer.DrawCurrentBitmap() |
| 27 |
End If |
| 28 |
End Sub |
| 29 |
|
| 30 |
Private Sub btnNextQuestion_Click(sender As System.Object, e As System.EventArgs) Handles btnNextQuestion.Click |
| 31 |
lblDecision.Text = "" |
| 32 |
If _kifuDataDirectoryReader.hasNextFile() Then |
| 33 |
_kifuDataDirectoryReader.readNextFile() |
| 34 |
Viewer.kyokumen = _kifuDataDirectoryReader.CurrentKyokumen |
| 35 |
Viewer.DrawCurrentBitmap() |
| 36 |
End If |
| 37 |
End Sub |
| 38 |
|
| 39 |
|
| 40 |
|
| 41 |
Private Sub Viewer_Editing(sender As System.Object, e As ShogiNextMove.Control.Board.EditingEventArgs) Handles Viewer.Editing |
| 42 |
|
| 43 |
If InPlay() Then |
| 44 |
e.IsMove = True |
| 45 |
If Not Board.KomaMoveValidater.GetInstance.IsValidate(Viewer.kyokumen, e.MovingValue) Then |
| 46 |
e.Cancel = True |
| 47 |
Exit Sub |
| 48 |
End If |
| 49 |
If e.MovingValue.CanPromote Then |
| 50 |
PromoteMoveValue(e.MovingValue) |
| 51 |
End If |
| 52 |
If Not e.MovingValue.ToLocation.IsMasu Then |
| 53 |
e.Cancel = True |
| 54 |
End If |
| 55 |
|
| 56 |
|
| 57 |
If e.MouseRightClicked Then |
| 58 |
e.Cancel = True |
| 59 |
End If |
| 60 |
|
| 61 |
|
| 62 |
End If |
| 63 |
|
| 64 |
|
| 65 |
|
| 66 |
End Sub |
| 67 |
|
| 68 |
Private Sub PromoteMoveValue(movingValue As Board.Te) |
| 69 |
|
| 70 |
Dim masuRect As Rectangle = Me.Viewer.GetMasuRect(movingValue.ToLocation) |
| 71 |
|
| 72 |
Dim x As Integer = Location.X + SystemInformation.HorizontalResizeBorderThickness + masuRect.Left - Viewer.komaSize.Width \ 2 - 1 |
| 73 |
Dim y As Integer |
| 74 |
If (Not Viewer.IsBoardViewRotated AndAlso movingValue.ToLocation.Row < 5) OrElse (Viewer.IsBoardViewRotated AndAlso movingValue.ToLocation.Row > 5) Then |
| 75 |
y = Location.Y + SystemInformation.VerticalResizeBorderThickness + SystemInformation.CaptionHeight + Me.Location.Y + masuRect.Bottom + 1 |
| 76 |
Else |
| 77 |
y = Location.Y + SystemInformation.VerticalResizeBorderThickness + Me.Location.Y + masuRect.Top - (Viewer.komaSize.Height + SystemInformation.FixedFrameBorderSize.Height * 2) + 1 |
| 78 |
End If |
| 79 |
|
| 80 |
Dim frm As New frmPromote(movingValue.Piece.Value, x, y) |
| 81 |
frm.ShowDialog() |
| 82 |
If frm.isPromoted Then |
| 83 |
movingValue.Promote = True |
| 84 |
End If |
| 85 |
|
| 86 |
End Sub |
| 87 |
|
| 88 |
Private Sub rbEdit_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbEdit.CheckedChanged |
| 89 |
VisibleControl() |
| 90 |
EnabledControl() |
| 91 |
If rbEdit.Checked Then |
| 92 |
rbFirstKyokumen.Checked = True |
| 93 |
End If |
| 94 |
End Sub |
| 95 |
|
| 96 |
Private Sub rbPlay_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbPlay.CheckedChanged |
| 97 |
VisibleControl() |
| 98 |
If rbPlay.Checked AndAlso _isLoaded Then |
| 99 |
Initialize() |
| 100 |
End If |
| 101 |
End Sub |
| 102 |
|
| 103 |
Private Sub Initialize() |
| 104 |
_kifuDataDirectoryReader = New KifuDataDirectoryReader |
| 105 |
If _kifuDataDirectoryReader.hasNextFile Then |
| 106 |
_kifuDataDirectoryReader.readNextFile() |
| 107 |
Viewer.kyokumen = _kifuDataDirectoryReader.CurrentKyokumen |
| 108 |
Viewer.DrawCurrentBitmap() |
| 109 |
Else |
| 110 |
Viewer.kyokumen = New Board.Kyokumen |
| 111 |
Viewer.DrawCurrentBitmap() |
| 112 |
End If |
| 113 |
End Sub |
| 114 |
Private Sub rbFirstKyokumen_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbFirstKyokumen.CheckedChanged |
| 115 |
VisibleControl() |
| 116 |
EnabledControl() |
| 117 |
End Sub |
| 118 |
|
| 119 |
Private Sub rbNextMove_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbNextMove.CheckedChanged |
| 120 |
If rbNextMove.Checked Then |
| 121 |
If Board.KyokumenUtil.IsOuGyokuInSamePlayer(Viewer.kyokumen) Then |
| 122 |
MessageBox.Show("王将と玉将が同じ向きです。確認して正しく編集してください。", "王将の向き違反", MessageBoxButtons.OK, MessageBoxIcon.Error) |
| 123 |
rbFirstKyokumen.Checked = True |
| 124 |
Exit Sub |
| 125 |
End If |
| 126 |
If Board.KyokumenUtil.IsNifu(Viewer.kyokumen) Then |
| 127 |
MessageBox.Show("ニ歩です。確認して正しく編集してください。", "二歩", MessageBoxButtons.OK, MessageBoxIcon.Error) |
| 128 |
rbFirstKyokumen.Checked = True |
| 129 |
Exit Sub |
| 130 |
End If |
| 131 |
_editKifu = New Board.Kifu.Kifu |
| 132 |
_editKifu.InitializeBoard(Viewer.kyokumen) |
| 133 |
End If |
| 134 |
End Sub |
| 135 |
|
| 136 |
Private Sub VisibleControl() |
| 137 |
Viewer.KomabakoVisible = Not InPlay() |
| 138 |
gbEditMode.Visible = rbEdit.Checked |
| 139 |
End Sub |
| 140 |
|
| 141 |
Private Sub EnabledControl() |
| 142 |
If rbFirstKyokumen.Checked AndAlso rbEdit.Checked Then |
| 143 |
FirstKyokumenToolStripMenuItem.Enabled = True |
| 144 |
Else |
| 145 |
FirstKyokumenToolStripMenuItem.Enabled = False |
| 146 |
End If |
| 147 |
End Sub |
| 148 |
|
| 149 |
Private Function InPlay() As Boolean |
| 150 |
Return rbPlay.Checked OrElse (rbEdit.Checked AndAlso rbNextMove.Checked) |
| 151 |
End Function |
| 152 |
|
| 153 |
Private Sub Viewer_Edited(sender As System.Object, e As ShogiNextMove.Control.Board.EditedEventArgs) Handles Viewer.Edited |
| 154 |
If rbPlay.Checked Then |
| 155 |
If Not _kifuDataDirectoryReader.hasMove Then |
| 156 |
Exit Sub |
| 157 |
End If |
| 158 |
|
| 159 |
If e.MovingValue.Equals(_kifuDataDirectoryReader.Moving) Then |
| 160 |
lblDecision.Text = "正解" |
| 161 |
closePoint += 1 |
| 162 |
lblPoint.Text = String.Format("得点:{0}/{1}", closePoint, _kifuDataDirectoryReader.Count) |
| 163 |
_kifuDataDirectoryReader.NextKyokumen() |
| 164 |
Else |
| 165 |
lblDecision.Text = "不正解" |
| 166 |
End If |
| 167 |
End If |
| 168 |
|
| 169 |
If rbEdit.Checked AndAlso rbNextMove.Checked Then |
| 170 |
NextMoveAddAndSave(e.MovingValue) |
| 171 |
End If |
| 172 |
|
| 173 |
End Sub |
| 174 |
|
| 175 |
Private Sub NextMoveAddAndSave(NextMoveValue As Board.Te) |
| 176 |
Dim msg As String = String.Format("次の一手は""{0}""でよいですか?", |
| 177 |
Board.Kifu.KifKifuUtil.GetInstance.MoveToString(NextMoveValue, Nothing)) |
| 178 |
Dim ret As DialogResult = MessageBox.Show(msg, "確認", MessageBoxButtons.OKCancel) |
| 179 |
If ret = Windows.Forms.DialogResult.Cancel Then |
| 180 |
Viewer.kyokumen = _editKifu.KyokumenList(0) |
| 181 |
Viewer.DrawCurrentBitmap() |
| 182 |
Exit Sub |
| 183 |
End If |
| 184 |
|
| 185 |
_editKifu.AddMove(NextMoveValue, 0) |
| 186 |
KifuSavefileDaialog.InitialDirectory = _kifuDataDirectoryReader.dirName |
| 187 |
KifuSavefileDaialog.Filter = "csa棋譜ファイル(*.csa)|*.csa" |
| 188 |
If KifuSavefileDaialog.ShowDialog() = Windows.Forms.DialogResult.OK Then |
| 189 |
_kifuDataDirectoryReader.Write(_editKifu, KifuSavefileDaialog.FileName) |
| 190 |
End If |
| 191 |
rbFirstKyokumen.Checked = True |
| 192 |
End Sub |
| 193 |
|
| 194 |
Private Sub HirateToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles HirateToolStripMenuItem.Click |
| 195 |
Viewer.kyokumen = New Board.Kyokumen(New Board.Haichi.Hirate) |
| 196 |
Viewer.DrawCurrentBitmap() |
| 197 |
End Sub |
| 198 |
|
| 199 |
Private Sub TsumeToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TsumeToolStripMenuItem.Click |
| 200 |
Viewer.kyokumen = New Board.Kyokumen(New Board.Haichi.Tsume) |
| 201 |
Viewer.DrawCurrentBitmap() |
| 202 |
End Sub |
| 203 |
|
| 204 |
|
| 205 |
End Class |