[Shoginextmove-commit] [shoginextmove][76]

アーカイブの一覧に戻る

svnno****@sourc***** svnno****@sourc*****
2016年 2月 22日 (月) 15:48:06 JST


Revision: 76
          http://sourceforge.jp/projects/shoginextmove/scm/svn/commits/76
Author:   bellyoshi
Date:     2016-02-22 15:48:06 +0900 (Mon, 22 Feb 2016)
Log Message:
-----------


Added Paths:
-----------
    ShogiNextMove/Board/
    ShogiNextMove/Board/Haichi/
    ShogiNextMove/Board/Haichi/Hachimaiochi.vb
    ShogiNextMove/Board/Haichi/Haichi.vb
    ShogiNextMove/Board/Haichi/Hikyoochi.vb
    ShogiNextMove/Board/Haichi/Hirate.vb
    ShogiNextMove/Board/Haichi/Hisyaochi.vb
    ShogiNextMove/Board/Haichi/Jumaiochi.vb
    ShogiNextMove/Board/Haichi/Kakuochi.vb
    ShogiNextMove/Board/Haichi/KomaOchi.vb
    ShogiNextMove/Board/Haichi/Kyoochi.vb
    ShogiNextMove/Board/Haichi/Nimaiochi.vb
    ShogiNextMove/Board/Haichi/Rokumaiochi.vb
    ShogiNextMove/Board/Haichi/Tsume.vb
    ShogiNextMove/Board/Haichi/Yonmaiochi.vb
    ShogiNextMove/Board/Kifu/
    ShogiNextMove/Board/Kifu/CSAKifuReader.vb
    ShogiNextMove/Board/Kifu/CSAKifuUtil.vb
    ShogiNextMove/Board/Kifu/CSAKifuWriter.vb
    ShogiNextMove/Board/Kifu/CommonKifuUtil.vb
    ShogiNextMove/Board/Kifu/KifKifuUtil.vb
    ShogiNextMove/Board/Kifu/Kifu.vb
    ShogiNextMove/Board/Kifu/KifuType.vb
    ShogiNextMove/Board/Kifu/KifuUtilBase.vb
    ShogiNextMove/Board/Kifu/MoveUtil.vb
    ShogiNextMove/Board/Kifu/Teaiwari.vb
    ShogiNextMove/Board/Koma.vb
    ShogiNextMove/Board/KomaMoveDirection.vb
    ShogiNextMove/Board/KomaMoveValidater.vb
    ShogiNextMove/Board/KomaUtil.vb
    ShogiNextMove/Board/Kyokumen.vb
    ShogiNextMove/Board/KyokumenHaichiComp.vb
    ShogiNextMove/Board/KyokumenUtil.vb
    ShogiNextMove/Board/Location.vb
    ShogiNextMove/Board/NullMoveType.vb
    ShogiNextMove/Board/Te.vb
    ShogiNextMove/Control/
    ShogiNextMove/Control/Board/
    ShogiNextMove/Control/Board/BoardViewer.Designer.vb
    ShogiNextMove/Control/Board/BoardViewer.resx
    ShogiNextMove/Control/Board/BoardViewer.vb
    ShogiNextMove/Control/Board/EditedEventArgs.vb
    ShogiNextMove/Control/Board/EditingEventArgs.vb
    ShogiNextMove/Control/Board/ImageLoader.vb
    ShogiNextMove/Image/
    ShogiNextMove/Image/Default/
    ShogiNextMove/Image/Default/images.ban.png
    ShogiNextMove/Image/Default/images.goteFu.png
    ShogiNextMove/Image/Default/images.goteGin.png
    ShogiNextMove/Image/Default/images.goteGyoku.png
    ShogiNextMove/Image/Default/images.goteHisha.png
    ShogiNextMove/Image/Default/images.goteKaku.png
    ShogiNextMove/Image/Default/images.goteKei.png
    ShogiNextMove/Image/Default/images.goteKin.png
    ShogiNextMove/Image/Default/images.goteKyo.png
    ShogiNextMove/Image/Default/images.goteNGin.png
    ShogiNextMove/Image/Default/images.goteNKei.png
    ShogiNextMove/Image/Default/images.goteNKyo.png
    ShogiNextMove/Image/Default/images.goteOu.png
    ShogiNextMove/Image/Default/images.goteRyu.png
    ShogiNextMove/Image/Default/images.goteTo.png
    ShogiNextMove/Image/Default/images.goteUma.png
    ShogiNextMove/Image/Default/images.highlightRed.png
    ShogiNextMove/Image/Default/images.masu.png
    ShogiNextMove/Image/Default/images.rotatedMasu.png
    ShogiNextMove/Image/Default/images.senteFu.png
    ShogiNextMove/Image/Default/images.senteGin.png
    ShogiNextMove/Image/Default/images.senteGyoku.png
    ShogiNextMove/Image/Default/images.senteHisha.png
    ShogiNextMove/Image/Default/images.senteKaku.png
    ShogiNextMove/Image/Default/images.senteKei.png
    ShogiNextMove/Image/Default/images.senteKin.png
    ShogiNextMove/Image/Default/images.senteKyo.png
    ShogiNextMove/Image/Default/images.senteNGin.png
    ShogiNextMove/Image/Default/images.senteNKei.png
    ShogiNextMove/Image/Default/images.senteNKyo.png
    ShogiNextMove/Image/Default/images.senteOu.png
    ShogiNextMove/Image/Default/images.senteRyu.png
    ShogiNextMove/Image/Default/images.senteTo.png
    ShogiNextMove/Image/Default/images.senteUma.png
    ShogiNextMove/KifuData/
    ShogiNextMove/KifuData/20140819.csa
    ShogiNextMove/KifuData/20140826.csa
    ShogiNextMove/KifuData/20140905.csa
    ShogiNextMove/KifuData/3.csa
    ShogiNextMove/KifuData/Debug.csa
    ShogiNextMove/KifuData/kei11.csa
    ShogiNextMove/KifuData/yoshi55_wata-Superboy2-20140827_114157.csa
    ShogiNextMove/KifuDataDirectoryReader.vb
    ShogiNextMove/MoveKomaInfo.vb
    ShogiNextMove/My Project/
    ShogiNextMove/My Project/Application.Designer.vb
    ShogiNextMove/My Project/Application.myapp
    ShogiNextMove/My Project/AssemblyInfo.vb
    ShogiNextMove/My Project/Resources.Designer.vb
    ShogiNextMove/My Project/Resources.resx
    ShogiNextMove/My Project/Settings.Designer.vb
    ShogiNextMove/My Project/Settings.settings
    ShogiNextMove/ShogiNextMove.vbproj
    ShogiNextMove/ShogiNextMove.vbproj.user
    ShogiNextMove/frmMain.Designer.vb
    ShogiNextMove/frmMain.resx
    ShogiNextMove/frmMain.vb
    ShogiNextMove/frmPromote.Designer.vb
    ShogiNextMove/frmPromote.resx
    ShogiNextMove/frmPromote.vb
    ShogiNextMove/obj/
    ShogiNextMove/obj/x86/
    ShogiNextMove/obj/x86/Debug/
    ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache
    ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.Control.Board.BoardViewer.resources
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.Resources.resources
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.exe
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmMain.resources
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmPromote.resources
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.pdb
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.FileListAbsolute.txt
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.GenerateResource.Cache
    ShogiNextMove/obj/x86/Debug/ShogiNextMove.xml
    ShogiNextMove/obj/x86/Debug/TempPE/
    ShogiNextMove/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll
    ShogiNextMove/obj/x86/Release/
    ShogiNextMove/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
    ShogiNextMove/obj/x86/Release/ShogiNextMove.Control.Board.BoardViewer.resources
    ShogiNextMove/obj/x86/Release/ShogiNextMove.Resources.resources
    ShogiNextMove/obj/x86/Release/ShogiNextMove.exe
    ShogiNextMove/obj/x86/Release/ShogiNextMove.frmMain.resources
    ShogiNextMove/obj/x86/Release/ShogiNextMove.frmPromote.resources
    ShogiNextMove/obj/x86/Release/ShogiNextMove.pdb
    ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.FileListAbsolute.txt
    ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.GenerateResource.Cache
    ShogiNextMove/obj/x86/Release/ShogiNextMove.xml
    ShogiNextMove/obj/x86/Release/TempPE/
    ShogiNextMove/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll
    ShogiNextMove.Test/CSAKifuUtilTest.vb
    ShogiNextMove.Test/CSAKifuWriterTest.vb
    ShogiNextMove.Test/KifKifuUtilTest.vb
    ShogiNextMove.Test/KifuTest.vb
    ShogiNextMove.Test/KomaLocationTest.vb
    ShogiNextMove.Test/KomaMoveDirectionTest.vb
    ShogiNextMove.Test/KomaTest.vb
    ShogiNextMove.Test/KomaUtilTest.vb
    ShogiNextMove.Test/KyokumenHaichiCompTest.vb
    ShogiNextMove.Test/KyokumenTest.vb
    ShogiNextMove.Test/KyokumenUtilTest.vb
    ShogiNextMove.Test/LocationTest.vb
    ShogiNextMove.Test/My Project/
    ShogiNextMove.Test/My Project/AssemblyInfo.vb
    ShogiNextMove.Test/ShogiNextMove.Test.vbproj
    ShogiNextMove.Test/TeTest.vb
    ShogiNextMove.vsmdi
    ShogiNextMove1.vsmdi
    ShogiNextMove2.vsmdi
    ShogiNextMove3.vsmdi

Property Changed:
----------------
    ShogiNextMove/
    ShogiNextMove.Test/


Property changes on: ShogiNextMove
___________________________________________________________________
Added: svn:ignore
   + bin


Added: ShogiNextMove/Board/Haichi/Hachimaiochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Hachimaiochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Hachimaiochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,22 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Hachimaiochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+            KomaOchi(2, 2, C_KAKU)
+            KomaOchi(1, 1, C_KYO)
+            KomaOchi(2, 1, C_KEI)
+            KomaOchi(3, 1, C_GIN)
+            KomaOchi(7, 1, C_GIN)
+            KomaOchi(8, 1, C_KEI)
+            KomaOchi(9, 1, C_KYO)
+
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Haichi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Haichi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Haichi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,33 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+
+    Public MustInherit Class HaichiBase
+
+        Protected _masu() As Byte
+        Public ReadOnly Property MasuArray() As Byte()
+            Get
+                Return _masu
+            End Get
+        End Property
+
+        Public Property Masu(col As Integer, row As Integer) As Byte
+            Get
+                Debug.Assert(1 <= col AndAlso col <= 9)
+                Debug.Assert(1 <= row AndAlso row <= 9)
+                Debug.Assert(_masu.Length = 9 * 9)
+                Return _masu((row - 1) * 9 + (9 - col))
+            End Get
+            Set(value As Byte)
+                Debug.Assert(1 <= col AndAlso col <= 9)
+                Debug.Assert(1 <= row AndAlso row <= 9)
+                Debug.Assert(_masu.Length = 9 * 9)
+                _masu((row - 1) * 9 + (9 - col)) = value
+            End Set
+        End Property
+
+    End Class
+
+End Namespace
+

Added: ShogiNextMove/Board/Haichi/Hikyoochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Hikyoochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Hikyoochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,15 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Hikyoochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(1, 1, C_KYO)
+            KomaOchi(8, 2, C_HISYA)
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Hirate.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Hirate.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Hirate.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,23 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+    Public Class Hirate
+        Inherits HaichiBase
+
+        Sub New()
+            _masu = {
+                GOTE_KYO, GOTE_KEI, GOTE_GIN, GOTE_KIN, GOTE_OU, GOTE_KIN, GOTE_GIN, GOTE_KEI, GOTE_KYO,
+                0, GOTE_HISYA, 0, 0, 0, 0, 0, GOTE_KAKU, 0,
+                GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU, GOTE_FU,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,
+                0, 0, 0, 0, 0, 0, 0, 0, 0,
+                SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU, SENTE_FU,
+                0, SENTE_KAKU, 0, 0, 0, 0, 0, SENTE_HISYA, 0,
+                SENTE_KYO, SENTE_KEI, SENTE_GIN, SENTE_KIN, SENTE_GYOKU, SENTE_KIN, SENTE_GIN, SENTE_KEI, SENTE_KYO
+            }
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Hisyaochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Hisyaochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Hisyaochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,14 @@
+Imports ShogiNextMove.Board.Koma
+Namespace Board.Haichi
+
+
+    Public Class Hisyaochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+        End Sub
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Haichi/Jumaiochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Jumaiochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Jumaiochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,24 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Jumaiochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+            KomaOchi(2, 2, C_KAKU)
+            KomaOchi(1, 1, C_KYO)
+            KomaOchi(2, 1, C_KEI)
+            KomaOchi(3, 1, C_GIN)
+            KomaOchi(4, 1, C_KIN)
+            KomaOchi(6, 1, C_KIN)
+            KomaOchi(7, 1, C_GIN)
+            KomaOchi(8, 1, C_KEI)
+            KomaOchi(9, 1, C_KYO)
+
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Kakuochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Kakuochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Kakuochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,14 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Kakuochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(2, 2, C_KAKU)
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/KomaOchi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/KomaOchi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/KomaOchi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,25 @@
+
+Namespace Board.Haichi
+
+
+    Public Class KomaOchi
+        Inherits Hirate
+
+        ''' <summary>
+        ''' 平手初期配置より駒を落とす
+        ''' </summary>
+        ''' <param name="col">落とす駒の列</param>
+        ''' <param name="row">落とす駒の行</param>
+        ''' <param name="ochiKoma">落とす駒の種類</param>
+        ''' <remarks></remarks>
+        Public Sub KomaOchi(col As Integer, row As Integer, ochiKoma As Byte)
+            Debug.Assert(1 <= row AndAlso row <= 9)
+            Debug.Assert(1 <= col AndAlso col <= 9)
+            Debug.Assert(_masu.Length = 9 * 9)
+            Debug.Assert(KomaUtil.KomaKind(Masu(col, row)) = ochiKoma)
+            Masu(col, row) = 0
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Kyoochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Kyoochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Kyoochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,15 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+
+    Public Class Kyoochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(1, 1, C_KYO)
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Nimaiochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Nimaiochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Nimaiochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,15 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Nimaiochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+            KomaOchi(2, 2, C_KAKU)
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Rokumaiochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Rokumaiochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Rokumaiochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,20 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Rokumaiochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+            KomaOchi(2, 2, C_KAKU)
+            KomaOchi(1, 1, C_KYO)
+            KomaOchi(2, 1, C_KEI)
+            KomaOchi(8, 1, C_KEI)
+            KomaOchi(9, 1, C_KYO)
+
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Haichi/Tsume.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Tsume.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Tsume.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,24 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+
+    Public Class Tsume
+        Inherits HaichiBase
+
+        Sub New()
+            _masu = {
+                    0, 0, 0, 0, GOTE_OU, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0,
+                    0, 0, 0, 0, 0, 0, 0, 0, 0}
+        End Sub
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Haichi/Yonmaiochi.vb
===================================================================
--- ShogiNextMove/Board/Haichi/Yonmaiochi.vb	                        (rev 0)
+++ ShogiNextMove/Board/Haichi/Yonmaiochi.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,17 @@
+Imports ShogiNextMove.Board.Koma
+
+Namespace Board.Haichi
+
+    Public Class Yonmaiochi
+        Inherits KomaOchi
+
+        Sub New()
+            KomaOchi(8, 2, C_HISYA)
+            KomaOchi(2, 2, C_KAKU)
+            KomaOchi(1, 1, C_KYO)
+            KomaOchi(9, 1, C_KYO)
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Kifu/CSAKifuReader.vb
===================================================================
--- ShogiNextMove/Board/Kifu/CSAKifuReader.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/CSAKifuReader.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,201 @@
+Namespace Board.Kifu
+
+    Public Class CSAKifuReader
+
+        Private _kifu As Kifu
+        Dim _firstKyokumen As Kyokumen
+
+        Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance()
+
+        Public Function ReadCSAString(kifuStr As String) As Kifu
+            _kifu = New Kifu
+            _firstKyokumen = New Kyokumen
+            Dim flag As Boolean = False
+            Dim array As String() = kifuStr.Split({vbCrLf, vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
+            For i As Integer = 0 To array.Length - 1
+                Dim text As String = array(i)
+                flag = ReadCSAStringLine(text, flag)
+            Next
+            Return _kifu
+        End Function
+
+        Private Function ReadCSAStringLine(text As String, flag As Boolean) As Boolean
+
+            If text.StartsWith("N+") Then
+                Debug.Assert(_kifu.MoveList.Count = 0)
+                If _kifu.MoveList.Count > 0 Then
+                    Return flag
+                End If
+                _kifu.SenteName = text.Substring(2)
+            ElseIf text.StartsWith("N-") Then
+                Debug.Assert(_kifu.MoveList.Count = 0)
+                If _kifu.MoveList.Count > 0 Then
+                    Return flag
+                End If
+                _kifu.GoteName = text.Substring(2)
+            ElseIf text.StartsWith("PI") Then
+                Debug.Assert(_kifu.MoveList.Count = 0)
+                If _kifu.MoveList.Count > 0 Then
+                    Return flag
+                End If
+                ParseInitialKyokumenCSA(text)
+            ElseIf text.StartsWith("P") Then
+                Debug.Assert(_kifu.MoveList.Count = 0)
+                If _kifu.MoveList.Count > 0 Then
+                    Return flag
+                End If
+                If text.StartsWith("P+") OrElse _
+                    text.StartsWith("P-") Then
+                    ParseMochigomaCSA(text)
+                Else
+                    ParseRowCSA(text)
+                End If
+            ElseIf text.StartsWith("'") Then
+                Dim line As String = text.Substring(1)
+                _kifu.AppendComment(line)
+            ElseIf text = "+" AndAlso _kifu.KyokumenList.Count = 0 Then
+                _firstKyokumen.Turn = Koma.SENTE
+                _kifu.InitializeBoard(_firstKyokumen)
+                flag = True
+            ElseIf text = "-" AndAlso _kifu.KyokumenList.Count = 0 Then
+                _firstKyokumen.Turn = Koma.GOTE
+                _kifu.InitializeBoard(_firstKyokumen)
+                flag = True
+            ElseIf text.StartsWith("+") OrElse _
+                    text.StartsWith("-") Then
+                If MoveUtil.IsNullMoveLast(_kifu.MoveList) Then
+                    Return flag
+                End If
+
+                Dim te As Te = _CSAKifuUtil.MoveStringToTe(text, _kifu.LastKyokumen)
+                If te Is Nothing Then
+                    Return flag
+                End If
+                Dim thinkTime As Integer = 0
+                If text.Length > 7 Then
+                    thinkTime = _CSAKifuUtil.CSAParseThinkTime(text)
+                End If
+
+                _kifu.AddMove(te, thinkTime)
+            ElseIf text.StartsWith("%") Then
+                If MoveUtil.IsNullMoveLast(_kifu.MoveList) Then
+                    Return flag
+                End If
+
+                Dim te2 As Te = _CSAKifuUtil.StringToNullMove(text, _kifu.LastKyokumen.Turn)
+                If te2 Is Nothing Then
+                    Return flag
+                End If
+                If _kifu.KyokumenList.Count = 0 Then
+                    _kifu.InitializeBoard(_firstKyokumen)
+                End If
+                _kifu.AddMove(te2, 0)
+            ElseIf text.StartsWith("T") Then
+                Dim value As Integer
+                If Integer.TryParse(text.Substring(1), value) AndAlso _kifu.TimeList.Count > 0 Then
+                    _kifu.TimeList(_kifu.TimeList.Count - 1) = value
+                End If
+            End If
+            Return flag
+        End Function
+
+        Private Sub ParseInitialKyokumenCSA(line As String)
+            Debug.Assert(line.StartsWith("PI"))
+            Debug.Assert((line.Length - 2) Mod 4 = 0)
+            Dim h As New Haichi.KomaOchi
+            Dim num As Integer = 2
+            While num + 4 <= line.Length
+                Dim l As KomaLocation = KomaLocation.ParseLocation(line.Substring(num, 2))
+                Debug.Assert(Not l.IsMochigoma)
+                If l.IsMochigoma Then
+                    Exit While
+                End If
+                Dim komaStr As String = line.Substring(num + 2, 2)
+                Dim komaValue As Byte = _CSAKifuUtil.KomaNameToValue(komaStr)
+                h.KomaOchi(l.Col, l.Row, komaValue)
+                num += 4
+            End While
+            _firstKyokumen.Initialize(h)
+        End Sub
+
+        Private Sub ParseMochigomaAll(ByVal WhichHand As Byte)
+            Dim komaCounts As Integer() = _firstKyokumen.KomabakoCounts()
+            Debug.Assert(Koma.C_MOCHIGOMA_MAX <= komaCounts.Count)
+            For komaValue As Byte = Koma.C_MOCHIGOMA_MIN To Koma.C_MOCHIGOMA_MAX
+                _firstKyokumen.Hand(komaValue + WhichHand) = komaCounts(komaValue)
+            Next
+        End Sub
+
+
+        Private Sub ParseMochigomaCSA(line As String)
+            Debug.Assert(line.StartsWith("P+") OrElse _
+                         line.StartsWith("P-"))
+            Debug.Assert((line.Length - 2) Mod 4 = 0)
+            Dim which As Byte = WhichStartWith(line)
+            Dim num As Integer = 2
+            While num + 4 <= line.Length
+                Dim text As String = line.Substring(num, 2)
+                Dim l As KomaLocation = KomaLocation.ParseLocation(text)
+                Dim komaName As String = line.Substring(num + 2, 2)
+                If komaName = "AL" Then
+                    Debug.Assert(text = "00")
+                    If Not l.IsMochigoma Then
+                        Exit Sub
+                    End If
+                    ParseMochigomaAll(which)
+                Else
+                    Dim b As Byte = _CSAKifuUtil.KomaNameToValue(komaName)
+                    Debug.Assert(b <> 0)
+                    If b = 0 Then
+                        Exit Sub
+                    End If
+
+                    If l.IsMochigoma Then
+                        _firstKyokumen.Hand(b + which) += 1
+                    Else
+                        _firstKyokumen.SetMasu(l, New Koma(b + which))
+                    End If
+                End If
+                num += 4
+            End While
+        End Sub
+
+        Private Function WhichStartWith(ByVal text As String) As Byte
+            If text.StartsWith("P+") Then
+                Return Koma.SENTE
+            ElseIf text.StartsWith("P-") Then
+                Return Koma.GOTE
+            Else
+                Debug.Assert(False)
+                Return Nothing
+            End If
+        End Function
+
+
+        Private Sub ParseRowCSA(line As String)
+            Debug.Assert(29 <= line.Length)
+            If line.Length < 29 Then
+                Exit Sub
+            End If
+            Debug.Assert(line.StartsWith("P"))
+            Dim row As Integer
+            If Not Integer.TryParse(line.Substring(1, 1), row) Then
+                Debug.Assert(False)
+                Exit Sub
+            End If
+            Debug.Assert(1 <= row AndAlso row <= 9)
+            If Not (1 <= row AndAlso row <= 9) Then
+                Exit Sub
+            End If
+
+            For col As Integer = 9 To 1 Step -1
+                Dim komaName As String = line.Substring(3 * (9 - col) + 2, 3)
+                Dim b As Byte = _CSAKifuUtil.KomaNameWithWhichToValue(komaName)
+                _firstKyokumen.SetMasu(New KomaLocation(col, row), New Koma(b))
+            Next
+
+        End Sub
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Kifu/CSAKifuUtil.vb
===================================================================
--- ShogiNextMove/Board/Kifu/CSAKifuUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/CSAKifuUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,154 @@
+Imports ShogiNextMove.Board
+
+Namespace Board.Kifu
+
+
+    Public Class CSAKifuUtil
+        Inherits KifuUtilBase
+
+        Private Shared _instance As New CSAKifuUtil
+        Private Sub New() 
+        End Sub
+        Public Shared Function GetInstance() As CSAKifuUtil
+            Return _instance
+        End Function
+
+
+        Protected Overrides ReadOnly Property nullMoveStrArray As String()
+            Get
+                Dim arrray As String() = {
+                    "",
+                    "%CHUDAN",
+                    "%TSUMI",
+                    "%TORYO",
+                    "%SENNICHITE",
+                    "%TIME_UP",
+                    "%ILLEGAL_MOVE",
+                    "%JISHOGI",
+                    "ILLEGAL_ACTION"}
+                Return arrray
+            End Get
+        End Property
+
+        Protected Overrides ReadOnly Property komaNameArray As String()
+            Get
+                Dim array As String() = {
+                    "",
+                    "FU",
+                    "KY",
+                    "KE",
+                    "GI",
+                    "KI",
+                    "KA",
+                    "HI",
+                    "OU",
+                    "",
+                    "TO",
+                    "NY",
+                    "NK",
+                    "NG",
+                    "UM",
+                    "RY"}
+                Return array
+            End Get
+        End Property
+
+        Protected Overrides ReadOnly Property komaNameWithWhichArray As String()
+            Get
+                Dim array As String() = {
+               " * ",
+               "+FU",
+               "+KY",
+               "+KE",
+               "+GI",
+               "+KI",
+               "+KA",
+               "+HI",
+               "",
+               "+OU",
+               "+TO",
+               "+NY",
+               "+NK",
+               "+NG",
+               "+UM",
+               "+RY",
+               "",
+               "-FU",
+               "-KY",
+               "-KE",
+               "-GI",
+               "-KI",
+               "-KA",
+               "-HI",
+               "-OU",
+               "",
+               "-TO",
+               "-NY",
+               "-NK",
+               "-NG",
+               "-UM",
+               "-RY"}
+                Return array
+            End Get
+        End Property
+
+
+        Public Function MoveStringToTe(line As String, kyokumen As Board.Kyokumen) As Board.Te
+
+            Debug.Assert(Not line.Length < 7)
+            If line.Length < 7 Then
+                Return Nothing
+            End If
+
+            Dim which As Byte
+            If line.StartsWith("+") Then
+                which = Board.Koma.SENTE
+            ElseIf line.StartsWith("-") Then
+                which = Board.Koma.GOTE
+            Else
+                Debug.Assert(False)
+            End If
+
+            Dim fromLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(1, 2))
+            Dim toLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(3, 2))
+            Dim komaName As String = line.Substring(5, 2)
+            Dim komaValue As Byte = Me.KomaNameToValue(komaName) + which
+            Debug.Assert(komaValue <> 0)
+            If komaValue = 0 Then
+                Return Nothing
+            End If
+
+            If fromLocation.IsMochigoma Then
+                Return New Board.Te(fromLocation, toLocation, komaValue, False)
+            End If
+
+            Dim preValue As Koma = kyokumen.GetMasu(fromLocation)
+            Dim isPromote As Boolean = CommonKifuUtil.IsPromoteKoma(komaValue, preValue.Value)
+
+            If komaValue = KomaUtil.KomaKind(Koma.C_OU) Then
+                komaValue = preValue.Value
+            End If
+
+            Return New Board.Te(fromLocation, toLocation, komaValue, isPromote)
+
+        End Function
+
+
+
+
+        Public Function CSAParseThinkTime(ByVal line As String) As Integer
+            Debug.Assert(7 < line.Length)
+            Dim thinkTime As Integer
+            Dim array As String() = line.Split({","}, StringSplitOptions.RemoveEmptyEntries)
+            If array.Length > 1 Then
+                Dim text As String = array(1)
+                Dim idx As Integer = text.IndexOf("T")
+                If idx <> -1 Then
+                    Integer.TryParse(text.Substring(idx + 1), thinkTime)
+                End If
+            End If
+            Return thinkTime
+        End Function
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Kifu/CSAKifuWriter.vb
===================================================================
--- ShogiNextMove/Board/Kifu/CSAKifuWriter.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/CSAKifuWriter.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,195 @@
+Namespace Board.Kifu
+
+    Public Class CSAKifuWriter
+
+        Private _kifu As Kifu
+
+        Private _firstKyokumen As Kyokumen
+
+        Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance
+
+        Public Function MakeKifuCSAString(kifu As Kifu) As String
+            _kifu = kifu
+            _firstKyokumen = kifu.KyokumenList(0)
+
+            Dim text As String = "V2.2" + Environment.NewLine
+
+            text = text + "N+" + _kifu.SenteName + Environment.NewLine
+            text = text + "N-" + _kifu.GoteName + Environment.NewLine
+            Dim result As String
+            If _kifu.KyokumenList.Count = 0 Then
+                result = text
+            Else
+                Dim teaiwari As Teaiwari = GetTeaiwari(_kifu.KyokumenList(0))
+                If teaiwari <> teaiwari.Unknown Then
+                    text += GetTeaiwariCSAString(teaiwari) + Environment.NewLine
+                Else
+                    text += GetCSAString()
+                End If
+                text += (If(_firstKyokumen.IsSente, "+", "-")) + Environment.NewLine
+                For i As Integer = 0 To _kifu.KyokumenList.Count - 1
+                    If i > 0 Then
+                        Dim te As Te = _kifu.MoveList(i - 1)
+                        Dim thinkTime As Integer = _kifu.TimeList(i - 1)
+                        text = text + MoveToCSAString(te, thinkTime) + Environment.NewLine
+                    End If
+                    text += CommentToFormattedString(_kifu.KyokumenList(i).Comment)
+                Next
+                result = text
+            End If
+            Return result
+        End Function
+
+
+        Public Function GetTeaiwariCSAString(teaiwari As Teaiwari) As String
+            Dim teaiwariCSAStrArray As String() = {"PI", "PI11KY", "PI22KA", "PI82HI", "PI11KY82HI", "PI82HI22KA", "PI91KY11KY82HI22KA", "PI91KY81KE21KE11KY82HI22KA", "PI91KY81KE71GI31GI21KE11KY82HI22KA", "PI91KY81KE71GI61KI41KI31GI21KE11KY82HI22KA"}
+
+            Return teaiwariCSAStrArray(CInt(teaiwari))
+        End Function
+
+        Public Function GetTeaiwari(kyokumen As Kyokumen) As Teaiwari
+
+            If kyokumen.Equals(New Kyokumen()) Then
+                Return Teaiwari.Hirate
+            End If
+
+            If kyokumen.Equals(New Kyokumen(New Haichi.Kyoochi)) Then
+                Return Teaiwari.Kyoochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Kakuochi)) Then
+                Return Teaiwari.Kakuochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Hisyaochi)) Then
+                Return Teaiwari.Hishaochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Hikyoochi)) Then
+                Return Teaiwari.Hikyoochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Nimaiochi)) Then
+                Return Teaiwari.Nimaiochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Yonmaiochi)) Then
+                Return Teaiwari.Yonmaiochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Rokumaiochi)) Then
+                Return Teaiwari.Rokumaiochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Hachimaiochi)) Then
+                Return Teaiwari.Hachimaiochi
+            End If
+            If kyokumen.Equals(New Kyokumen(New Haichi.Jumaiochi)) Then
+                Return Teaiwari.Jumaiochi
+            End If
+
+            Return Teaiwari.Unknown
+
+        End Function
+
+        Public Function CommentToFormattedString(commentStr As String) As String
+
+            If String.IsNullOrEmpty(commentStr) Then
+                Return String.Empty
+            End If
+
+            Dim formattedStringBulder As New System.Text.StringBuilder
+            Dim array As String() = commentStr.Split({vbCrLf, vbLf, vbCr}, StringSplitOptions.None)
+            For Each str As String In array
+                formattedStringBulder.AppendFormat("'{0}{1}", str, Environment.NewLine)
+            Next
+            Return formattedStringBulder.ToString
+
+        End Function
+
+        Private Function GetCSADanString(dan As Integer) As String
+            Dim text As String = "P"
+            text += dan.ToString()
+            For i As Integer = 9 To 1 Step -1
+                text += _CSAKifuUtil.KomaToNameWithWhich(_firstKyokumen.GetMasu(i, dan).Value)
+            Next
+            Return text
+        End Function
+
+        Private Function GetCSASenteMochigomaString() As String
+            Dim textBuilder As New System.Text.StringBuilder
+            For i As Integer = Koma.C_HISYA To Koma.C_FU Step -1
+                Dim komaValue = CByte(i)
+                For j As Integer = 1 To _firstKyokumen.SenteHand(komaValue)
+                    textBuilder.AppendFormat("00{0}", _CSAKifuUtil.KomaToName(komaValue))
+                Next
+            Next
+            Return textBuilder.ToString
+        End Function
+
+        Private Function GetCSAGoteMochigomaString() As String
+            Dim textBuilder As New System.Text.StringBuilder
+            For i As Integer = Koma.C_HISYA To Koma.C_FU Step -1
+                Dim komaValue = CByte(i)
+                For j As Integer = 1 To _firstKyokumen.GoteHand(komaValue)
+                    textBuilder.AppendFormat("00{0}", _CSAKifuUtil.KomaToName(komaValue))
+                Next
+            Next
+            Return textBuilder.ToString
+        End Function
+
+        Public Function GetCSAString() As String
+            Dim text As String = ""
+            For i As Integer = 1 To 9
+                text = text + Me.GetCSADanString(i) + Environment.NewLine
+            Next
+            Dim mochigomaStr As String = Me.GetCSASenteMochigomaString()
+            If Not String.IsNullOrEmpty(mochigomaStr) Then
+                text = text + "P+" + mochigomaStr + Environment.NewLine
+            End If
+            mochigomaStr = Me.GetCSAGoteMochigomaString()
+            If Not String.IsNullOrEmpty(mochigomaStr) Then
+                text = text + "P-" + mochigomaStr + Environment.NewLine
+            End If
+            Return text
+        End Function
+
+
+
+        Public Function MoveToCSAString(te As Te, thinkTime As Integer) As String
+            Dim result As String
+            If Not te.IsNullMove Then
+                Dim str As String = CSATebanSign(te)
+                str += MoveToCSAString(te)
+                result = str + ",T" + thinkTime.ToString()
+            Else
+                Dim text As String = _CSAKifuUtil.NullMoveToString(te.NullMoveType)
+                If te.NullMoveType = NullMoveType.ILLEGAL_ACTION Then
+                    If te.IsGote Then
+                        text = "%-" + text
+                    Else
+                        text = "%+" + text
+                    End If
+                End If
+                result = text + ",T" + thinkTime.ToString()
+            End If
+            Return result
+        End Function
+
+        Public Function CSATebanSign(te As Te) As String
+            If te.IsSente Then
+                Return "+"
+            Else
+                Return "-"
+            End If
+        End Function
+
+        Public Function MoveToCSAString(te As Te) As String
+            Dim str As String = LocationToCSAString(te.FromLocation)
+            Dim str2 As String = LocationToCSAString(te.ToLocation)
+            Dim b As Byte = te.KomaKind
+            Dim str3 As String = _CSAKifuUtil.KomaToName(te.KomaKind)
+            Return str + str2 + str3
+        End Function
+
+        Public Function LocationToCSAString(ByVal location As KomaLocation) As String
+            Return String.Format("{0}{1}", location.Col, location.Row)
+        End Function
+
+    End Class
+
+End Namespace
+

Added: ShogiNextMove/Board/Kifu/CommonKifuUtil.vb
===================================================================
--- ShogiNextMove/Board/Kifu/CommonKifuUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/CommonKifuUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,16 @@
+Namespace Board.Kifu
+
+    Public Class CommonKifuUtil
+
+        Public Shared Function IsPromoteKoma(ByVal komaValue As Byte, ByVal preValue As Byte) As Boolean
+            If Board.KomaUtil.IsPromoted(komaValue) Then
+                If Not Board.KomaUtil.IsPromoted(preValue) Then
+                    Return True
+                End If
+            End If
+            Return False
+        End Function
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Kifu/KifKifuUtil.vb
===================================================================
--- ShogiNextMove/Board/Kifu/KifKifuUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/KifKifuUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,90 @@
+Imports ShogiNextMove.Board
+
+Namespace Board.Kifu
+
+    Public Class KifKifuUtil
+        Inherits KifuUtilBase
+
+        Private Shared _instance As New KifKifuUtil
+        Private Sub New()
+        End Sub
+        Public Shared Function GetInstance() As KifKifuUtil
+            Return _instance
+        End Function
+
+        Protected Overrides ReadOnly Property komaNameArray As String()
+            Get
+                Dim array As String() = {
+                    "", "歩", "香", "桂", "銀", "金", "角", "飛", "玉", "",
+                    "と", "成香", "成桂", "成銀", "馬", "龍"}
+                Return array
+            End Get
+        End Property
+
+        Protected Overrides ReadOnly Property komaNameWithWhichArray As String()
+            Get
+                Dim array As String() = {
+                    "", " 歩", " 香", " 桂", " 銀", " 金", " 角", " 飛", "", " 玉",
+                 " と", " 杏", " 圭", " 全", " 馬", " 龍",
+                    "", "v歩", "v香", "v桂", "v銀", "v金", "v角", "v飛", "v玉", "",
+                   "vと", "v杏", "v圭", "v全", "v馬", "v龍"}
+                Return array
+            End Get
+        End Property
+
+        Protected Overrides ReadOnly Property nullMoveStrArray As String()
+            Get
+                Dim array As String() = {"",
+                          "中断",
+                          "詰み",
+                          "投了",
+                          "千日手",
+                          "切れ負け",
+                          "反則負け",
+                          "持将棋",
+                          "反則勝ち"}
+                Return array
+            End Get
+
+        End Property
+
+        Private sujiStrArray() As String = {"", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
+        Private kanjiNumberStrArray() As String = {
+           "", "一", "二", "三", "四", "五", "六", "七", "八", "九",
+         "十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八"}
+
+        Public Function MoveToString(te As Te, prevTe As Te) As String
+
+            Dim text As New System.Text.StringBuilder
+
+            If te.IsNullMove Then
+                Return NullMoveToString(te.NullMoveType)
+            End If
+
+            If prevTe IsNot Nothing AndAlso prevTe.ToLocation.Equals(te.ToLocation) Then
+                text.Append("同 ")
+            Else
+                text.Append(sujiStrArray(te.ToLocation.Col))
+                text.Append(kanjiNumberStrArray(te.ToLocation.Row))
+            End If
+
+            text.Append(KomaToName(te.Piece.Value))
+
+            If te.Promote Then
+                text.Append("成")
+            End If
+
+            If te.FromLocation.IsMochigoma Then
+                text.Append("打")
+            Else 
+                text.AppendFormat("({0}{1})", te.FromLocation.Col, te.FromLocation.Row)
+            End If
+
+            Return text.ToString
+
+        End Function
+
+    End Class
+
+End Namespace
+

Added: ShogiNextMove/Board/Kifu/Kifu.vb
===================================================================
--- ShogiNextMove/Board/Kifu/Kifu.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/Kifu.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,72 @@
+Namespace Board.Kifu
+    Public Class Kifu
+        Private _kyokumenList As New List(Of Kyokumen)
+        Public ReadOnly Property KyokumenList As List(Of Kyokumen)
+            Get
+                Return _kyokumenList
+            End Get
+        End Property
+
+        Public ReadOnly Property LastKyokumen() As Kyokumen
+            Get
+                Debug.Assert(hasKyokumen)
+                Return _kyokumenList(KyokumenList.Count - 1)
+            End Get
+        End Property
+
+        Public ReadOnly Property hasKyokumen() As Boolean
+            Get
+                Return 1 <= KyokumenList.Count
+            End Get
+        End Property
+
+        Private _moveList As New List(Of Te)
+        Public ReadOnly Property MoveList As List(Of Te)
+            Get
+                Return _moveList
+            End Get
+        End Property
+
+        Private _timeList As New List(Of Integer)
+        Public ReadOnly Property TimeList As List(Of Integer)
+            Get
+                Return _timeList
+            End Get
+        End Property
+
+        Public Property SenteName As String
+        Public Property GoteName As String
+
+        Public Property Comment As String = String.Empty
+
+        Public Sub AppendComment(line As String)
+            If hasKyokumen Then
+                LastKyokumen.AppendComment(line)
+            Else
+                If String.IsNullOrEmpty(Comment) Then
+                    Comment = line
+                Else
+                    Comment += Environment.NewLine
+                    Comment += line
+                End If
+            End If
+        End Sub
+
+        Public Sub AddMove(te As Te, thinkTime As Integer)
+            Dim cKyokumen As Kyokumen = New Kyokumen(_kyokumenList(KyokumenList.Count - 1))
+            If Not te.IsNullMove Then
+                cKyokumen.Move(te)
+            End If
+            Me.KyokumenList.Add(cKyokumen)
+            Me.MoveList.Add(te)
+            Me.TimeList.Add(thinkTime)
+        End Sub
+
+        Public Sub InitializeBoard(ByVal _currentkyokumen As Kyokumen)
+            Me._kyokumenList.Clear()
+            Me._kyokumenList.Add(New Kyokumen(_currentkyokumen))
+        End Sub
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/Kifu/KifuType.vb
===================================================================
--- ShogiNextMove/Board/Kifu/KifuType.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/KifuType.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,11 @@
+
+Namespace Board.Kifu
+    Public Enum KifuType
+        Unknown
+        CSA
+        KIF
+        KI2
+        PSN
+        PSN2
+    End Enum
+End Namespace

Added: ShogiNextMove/Board/Kifu/KifuUtilBase.vb
===================================================================
--- ShogiNextMove/Board/Kifu/KifuUtilBase.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/KifuUtilBase.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,70 @@
+Imports ShogiNextMove.Board
+
+Namespace Board.Kifu
+
+    Public MustInherit Class KifuUtilBase
+
+        Protected MustOverride ReadOnly Property nullMoveStrArray As String()
+
+        Protected MustOverride ReadOnly Property komaNameArray As String()
+
+        Protected MustOverride ReadOnly Property komaNameWithWhichArray As String()
+
+        Public Function KomaToName(ByVal komaValueWithWhich As Byte) As String
+            komaValueWithWhich = Board.KomaUtil.GyokuToOu(komaValueWithWhich)
+            Dim komaKind As Byte = Board.KomaUtil.KomaKind(komaValueWithWhich)
+            Debug.Assert(komaKind < komaNameArray.Length)
+            Return komaNameArray(komaKind)
+        End Function
+
+        Public Function KomaNameToValue(ByVal komaName As String) As Byte
+            For i As Integer = 0 To komaNameArray.Length - 1
+                If komaName = komaNameArray(i) Then
+                    Return CByte(i)
+                End If
+            Next
+
+            Debug.Assert(False)
+            Return 0
+        End Function
+
+        Public Function KomaToNameWithWhich(ByVal komaValue As Byte) As String
+            Debug.Assert(komaValue < komaNameWithWhichArray.Length)
+            If komaValue = Koma.SENTE_OU Then
+                komaValue = Koma.SENTE_GYOKU
+            ElseIf komaValue = Koma.GOTE_GYOKU Then
+                komaValue = Koma.GOTE_OU
+            End If
+            Return komaNameWithWhichArray(komaValue)
+        End Function
+
+
+        Public Function KomaNameWithWhichToValue(ByVal komaName As String) As Byte
+            For i As Integer = 0 To komaNameWithWhichArray.Length - 1
+                If komaName = komaNameWithWhichArray(i) Then
+                    Return CType(i, Byte)
+                End If
+            Next
+            Debug.Assert(False)
+            Return 0
+        End Function
+
+
+
+        Public Function StringToNullMove(moveStr As String, which As Byte) As Board.Te
+            Dim array As String() = Me.nullMoveStrArray
+            For i As Integer = 1 To array.Length - 1
+                Dim value As String = array(i)
+                If moveStr.IndexOf(value) <> -1 Then
+                    Return New Board.Te(CType(i, Board.NullMoveType), which)
+                End If
+            Next
+            Return Nothing
+        End Function
+
+        Public Function NullMoveToString(ByVal nullmovetype As NullMoveType) As String
+            Return nullMoveStrArray(CInt(nullmovetype))
+        End Function
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Kifu/MoveUtil.vb
===================================================================
--- ShogiNextMove/Board/Kifu/MoveUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/MoveUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,53 @@
+Imports System
+Imports System.Collections.Generic
+
+Namespace Board
+    Friend Module MoveUtil
+
+        Public Function IsValidMove(te As Te, possibleMoveArray As Te(), possibleMoves As Integer) As Boolean
+            Dim result As Boolean
+            If te Is Nothing Then
+                result = False
+            Else
+                For i As Integer = 0 To possibleMoves - 1
+                    Dim comp As Te = possibleMoveArray(i)
+                    If te.Equals(comp) Then
+                        result = True
+                        Return result
+                    End If
+                Next
+                result = False
+            End If
+            Return result
+        End Function
+
+        Public Function GetLastMove(moveList As List(Of Te)) As Te
+            Dim result As Te = Nothing
+            If moveList.Count > 0 Then
+                result = moveList(moveList.Count - 1)
+            End If
+            Return result
+        End Function
+
+        Public Function IsNullMoveLast(moveList As List(Of Te)) As Boolean
+            Dim result As Boolean = False
+            Dim lastMove As Te = MoveUtil.GetLastMove(moveList)
+            If lastMove IsNot Nothing AndAlso lastMove.IsNullMove Then
+                result = True
+            End If
+            Return result
+        End Function
+
+        Public Function GetRealMoveCount(moveList As List(Of Te)) As Integer
+            Dim num As Integer = moveList.Count
+            If MoveUtil.IsNullMoveLast(moveList) Then
+                num -= 1
+            End If
+            Return num
+        End Function
+
+
+
+
+    End Module
+End Namespace

Added: ShogiNextMove/Board/Kifu/Teaiwari.vb
===================================================================
--- ShogiNextMove/Board/Kifu/Teaiwari.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kifu/Teaiwari.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,19 @@
+Imports System
+
+Namespace Board.Kifu
+
+    Public Enum Teaiwari
+        Hirate
+        Kyoochi
+        Kakuochi
+        Hishaochi
+        Hikyoochi
+        Nimaiochi
+        Yonmaiochi
+        Rokumaiochi
+        Hachimaiochi
+        Jumaiochi
+        Unknown
+    End Enum
+
+End Namespace

Added: ShogiNextMove/Board/Koma.vb
===================================================================
--- ShogiNextMove/Board/Koma.vb	                        (rev 0)
+++ ShogiNextMove/Board/Koma.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,134 @@
+Namespace Board
+
+    Public Class Koma
+
+        Public Const C_FU As Byte = 1
+        Public Const C_KYO As Byte = 2
+        Public Const C_KEI As Byte = 3
+        Public Const C_GIN As Byte = 4
+        Public Const C_KIN As Byte = 5
+        Public Const C_KAKU As Byte = 6
+        Public Const C_HISYA As Byte = 7
+        Public Const C_MOCHIGOMA_MIN As Byte = C_FU
+        Public Const C_MOCHIGOMA_MAX As Byte = C_HISYA
+
+        Public Const C_OU As Byte = 8
+        Public Const C_GYOKU As Byte = 9
+        Public Const C_KOMABAKO_MIN = C_FU
+        Public Const C_KOMABAKO_MAX = C_GYOKU
+
+        Public Const C_TOKIN As Byte = 10
+        Public Const C_NARI_KYO As Byte = 11
+        Public Const C_NARI_KEI As Byte = 12
+        Public Const C_NARI_GIN As Byte = 13
+        Public Const C_UMA As Byte = 14
+        Public Const C_RYU As Byte = 15
+
+        Public Const SENTE As Byte = 0
+        Public Const GOTE As Byte = 16
+
+        Public Const SENTE_FU As Byte = C_FU + SENTE
+        Public Const SENTE_KYO As Byte = C_KYO + SENTE
+        Public Const SENTE_KEI As Byte = C_KEI + SENTE
+        Public Const SENTE_GIN As Byte = C_GIN + SENTE
+        Public Const SENTE_KIN As Byte = C_KIN + SENTE
+        Public Const SENTE_KAKU As Byte = C_KAKU + SENTE
+        Public Const SENTE_HISYA As Byte = C_HISYA + SENTE
+        Public Const SENTE_OU As Byte = C_OU + SENTE
+        Public Const SENTE_GYOKU As Byte = C_GYOKU + SENTE
+        Public Const SENTE_TOKIN As Byte = C_TOKIN + SENTE
+        Public Const SENTE_NARI_KYO As Byte = C_NARI_KYO + SENTE
+        Public Const SENTE_NARI_KEI As Byte = C_NARI_KEI + SENTE
+        Public Const SENTE_NARI_GIN As Byte = C_NARI_GIN + SENTE
+        Public Const SENTE_UMA As Byte = C_UMA + SENTE
+        Public Const SENTE_RYU As Byte = C_RYU + SENTE
+
+        Public Const GOTE_FU As Byte = C_FU + GOTE
+        Public Const GOTE_KYO As Byte = C_KYO + GOTE
+        Public Const GOTE_KEI As Byte = C_KEI + GOTE
+        Public Const GOTE_GIN As Byte = C_GIN + GOTE
+        Public Const GOTE_KIN As Byte = C_KIN + GOTE
+        Public Const GOTE_KAKU As Byte = C_KAKU + GOTE
+        Public Const GOTE_HISYA As Byte = C_HISYA + GOTE
+        Public Const GOTE_OU As Byte = C_OU + GOTE
+        Public Const GOTE_GYOKU As Byte = C_GYOKU + GOTE
+        Public Const GOTE_TOKIN As Byte = C_TOKIN + GOTE
+        Public Const GOTE_NARI_KYO As Byte = C_NARI_KYO + GOTE
+        Public Const GOTE_NARI_KEI As Byte = C_NARI_KEI + GOTE
+        Public Const GOTE_NARI_GIN As Byte = C_NARI_GIN + GOTE
+        Public Const GOTE_UMA As Byte = C_UMA + GOTE
+        Public Const GOTE_RYU As Byte = C_RYU + GOTE
+
+        Public Property Value As Byte
+
+        Sub New(value As Byte)
+            Me.Value = value
+        End Sub
+
+        Public Function IsEmpty() As Boolean
+            Return (Me.Value = 0)
+        End Function
+
+        Public Shared Function Empty() As Koma
+            Return New Koma(0)
+        End Function
+
+        Public Function IsPromoted() As Boolean
+            Return KomaUtil.IsPromoted(Value)
+        End Function
+
+        Public Function CapturedKomaKind() As Byte
+            Return KomaUtil.CapturedKomaKind(Value)
+        End Function
+
+        Public Function CanPromote() As Boolean
+            Return KomaUtil.CanPromote(Value)
+        End Function
+
+        Public Sub Promote()
+            Me.Value = KomaUtil.PromoteKomaValue(Value)
+        End Sub
+
+        Public Function IsSente() As Boolean
+            Return KomaUtil.IsSente(Value)
+        End Function
+
+        Public Function IsGote() As Boolean
+            Return KomaUtil.IsGote(Value)
+        End Function
+
+        Public Function KomaKind() As Byte
+            Return KomaUtil.KomaKind(Value)
+        End Function
+
+        Public Function KomaKindGyokuToOu() As Byte
+            Return KomaUtil.KomaKindGyokuToOu(Value)
+        End Function
+
+        Public Function Which() As Byte
+            Return KomaUtil.Which(Value)
+        End Function
+
+        Public Sub OppositeKoma()
+            Me.Value = KomaUtil.OppositeKoma(Value)
+        End Sub
+
+        Public Sub GyokuToOu()
+            Me.Value = KomaUtil.GyokuToOu(Value)
+        End Sub
+
+        Public Sub Toggle()
+
+            If Not IsPromoted() AndAlso CanPromote() Then
+                Promote()
+            Else
+                Value = CapturedKomaKind() + KomaUtil.OppositeKoma(Which)
+            End If
+
+        End Sub
+
+    End Class
+
+
+End Namespace
+

Added: ShogiNextMove/Board/KomaMoveDirection.vb
===================================================================
--- ShogiNextMove/Board/KomaMoveDirection.vb	                        (rev 0)
+++ ShogiNextMove/Board/KomaMoveDirection.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,43 @@
+Namespace Board
+
+
+    Public Class KomaMoveDirection
+
+        Private _col As Integer
+        Public ReadOnly Property Col As Integer
+            Get
+                Return _col
+            End Get
+        End Property
+
+        Private _row As Integer
+        Public ReadOnly Property Row As Integer
+            Get
+                Return _row
+            End Get
+        End Property
+
+        Private _line As Boolean
+        Public ReadOnly Property Line As Boolean
+            Get
+                Return _line
+            End Get
+        End Property
+
+        Sub New(ByVal col As Integer, row As Integer)
+            _col = col
+            _row = row
+        End Sub
+
+        Sub New(ByVal col As Integer, row As Integer, isLine As Boolean)
+            _col = col
+            _row = row
+            _line = isLine
+        End Sub
+
+
+
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/KomaMoveValidater.vb
===================================================================
--- ShogiNextMove/Board/KomaMoveValidater.vb	                        (rev 0)
+++ ShogiNextMove/Board/KomaMoveValidater.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,283 @@
+Namespace Board
+
+    Public Class KomaMoveValidater
+
+        Private Shared _instance As New KomaMoveValidater
+        Public Shared Function GetInstance() As KomaMoveValidater
+            Return _instance
+        End Function
+
+        Private Sub New()
+        End Sub
+
+        Private direction()() As KomaMoveDirection = {
+            New KomaMoveDirection() {},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, -1, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -2),
+                New KomaMoveDirection(-1, -2)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1, True),
+                New KomaMoveDirection(1, 1, True),
+                New KomaMoveDirection(-1, -1, True),
+                New KomaMoveDirection(-1, 1, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1, True),
+                New KomaMoveDirection(0, -1, True),
+                New KomaMoveDirection(1, 0, True),
+                New KomaMoveDirection(-1, 0, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+             New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1, True),
+                New KomaMoveDirection(1, 1, True),
+                New KomaMoveDirection(-1, -1, True),
+                New KomaMoveDirection(-1, 1, True),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1, True),
+                New KomaMoveDirection(0, -1, True),
+                New KomaMoveDirection(1, 0, True),
+                New KomaMoveDirection(-1, 0, True),
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 2),
+                New KomaMoveDirection(-1, 2)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(-1, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1, True),
+                New KomaMoveDirection(1, 1, True),
+                New KomaMoveDirection(-1, -1, True),
+                New KomaMoveDirection(-1, 1, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1, True),
+                New KomaMoveDirection(0, -1, True),
+                New KomaMoveDirection(1, 0, True),
+                New KomaMoveDirection(-1, 0, True)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(-1, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, -1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(0, 1),
+                New KomaMoveDirection(-1, 1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, -1)},
+             New KomaMoveDirection() {
+                New KomaMoveDirection(1, -1, True),
+                New KomaMoveDirection(1, 1, True),
+                New KomaMoveDirection(-1, -1, True),
+                New KomaMoveDirection(-1, 1, True),
+                New KomaMoveDirection(0, -1),
+                New KomaMoveDirection(1, 0),
+                New KomaMoveDirection(-1, 0),
+                New KomaMoveDirection(0, 1)},
+            New KomaMoveDirection() {
+                New KomaMoveDirection(0, 1, True),
+                New KomaMoveDirection(0, -1, True),
+                New KomaMoveDirection(1, 0, True),
+                New KomaMoveDirection(-1, 0, True),
+                New KomaMoveDirection(1, -1),
+                New KomaMoveDirection(-1, -1),
+                New KomaMoveDirection(1, 1),
+                New KomaMoveDirection(-1, 1)}
+        }
+       
+
+        Public Function IsValidate(ByVal kyokumen As Kyokumen, ByVal te As Te) As Boolean
+            If te.FromLocation.IsMochigoma Then
+                Return IsValidatePut(kyokumen, te)
+            Else
+                Dim locationList As KomaLocation() = GetToLocation(kyokumen, te.FromLocation, te.Piece.Value)
+                For Each l As KomaLocation In locationList
+                    If l.Col = te.ToLocation.Col AndAlso l.Row = te.ToLocation.Row Then
+                        If Not kyokumen.GetMasu(l).IsEmpty AndAlso kyokumen.GetMasu(l).Which = te.Which Then
+                            Return False
+                        End If
+                        Return True
+                    End If
+                Next
+            End If
+            Return False
+        End Function
+
+        Private Function IsValidToLocation(ByVal tocol As Integer, torow As Integer) As Boolean
+            Return 1 <= tocol AndAlso tocol <= 9 AndAlso _
+                       1 <= torow AndAlso torow <= 9
+        End Function
+
+        Public Function GetToLocation(ByVal kyokumen As Kyokumen, fromLocation As KomaLocation, komaValue As Byte) As KomaLocation()
+            Dim drectionList As KomaMoveDirection() = direction(komaValue)
+            Dim komaLocations As New List(Of KomaLocation)
+            For Each d As KomaMoveDirection In drectionList
+                komaLocations.AddRange(
+                    GetToLocationsLine(kyokumen, fromLocation, d))
+            Next
+            Return komaLocations.ToArray
+        End Function
+
+        Public Function GetToLocationsLine(ByVal kyokumen As Kyokumen, ByVal fromLocation As KomaLocation, d As KomaMoveDirection) As KomaLocation()
+
+            Dim komaLocations As New List(Of KomaLocation)
+            Dim tocol As Integer = fromLocation.Col
+            Dim torow As Integer = fromLocation.Row
+            Dim i As Integer = 1
+            Do While i = 1 OrElse (i < 9 AndAlso d.Line)
+                tocol += d.Col
+                torow += d.Row
+                If IsValidToLocation(tocol, torow) Then
+                    komaLocations.Add(New KomaLocation(tocol, torow))
+                Else
+                    Exit Do
+                End If
+                If Not kyokumen.GetMasu(New KomaLocation(tocol, torow)).IsEmpty Then
+                    Exit Do
+                End If
+                i += 1
+            Loop
+
+            Return komaLocations.ToArray
+        End Function
+
+        Private Function IsValidatePut(ByVal kyokumen As Kyokumen, ByVal te As Te) As Boolean
+            Dim tolocation As KomaLocation = te.ToLocation
+            If Not kyokumen.GetMasu(tolocation).IsEmpty Then
+                Return False
+            End If
+            If te.MustPromote Then
+                Return False
+            End If
+            If te.Promote Then
+                Return False
+            End If
+            If te.KomaKind = Koma.C_FU Then
+                If 1 <= KyokumenUtil.CountFuInCol(kyokumen, tolocation.Col, te.Piece.Value) Then
+                    Return False
+                End If
+            End If
+            Return True
+        End Function
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Board/KomaUtil.vb
===================================================================
--- ShogiNextMove/Board/KomaUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/KomaUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,128 @@
+Imports ShogiNextMove.Board.Koma
+
+
+Namespace Board
+
+
+    Public Class KomaUtil
+
+
+        Private Shared promoteKoma As Byte() = {
+                        CByte(0),
+                        SENTE_TOKIN,
+                        SENTE_NARI_KYO,
+                        SENTE_NARI_KEI,
+                        SENTE_NARI_GIN,
+                        CByte(0),
+                        SENTE_UMA,
+                        SENTE_RYU,
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        CByte(0),
+                        GOTE_TOKIN,
+                        GOTE_NARI_KYO,
+                        GOTE_NARI_KEI,
+                        GOTE_NARI_GIN,
+                        CByte(0),
+                        GOTE_UMA,
+                        GOTE_RYU
+                    }
+        Public Shared Function IsPromoted(ByVal komaValue As Byte) As Boolean
+            If komaValue = 0 Then
+                Return False
+            End If
+            Return promoteKoma.Contains(komaValue)
+        End Function
+
+        Public Shared Function CapturedKomaKind(ByVal komaValue As Byte) As Byte
+            Dim w As Byte = Which(komaValue)
+            Dim capKoma As Byte() = {
+                CByte(0),
+                C_FU,
+                C_KYO,
+                C_KEI,
+                C_GIN,
+                C_KIN,
+                C_KAKU,
+                C_HISYA,
+                C_OU,
+                C_GYOKU,
+                C_FU,
+                C_KYO,
+                C_KEI,
+                C_GIN,
+                C_KAKU,
+                C_HISYA}
+            Return capKoma(komaValue - w)
+        End Function
+
+        Public Shared Function CanPromote(ByVal KomaValue As Byte) As Boolean
+            If SENTE_FU <= KomaValue AndAlso KomaValue <= promoteKoma.Length - 1 Then
+                Dim pvalue As Byte = promoteKoma(KomaValue)
+                Return pvalue <> 0
+            Else
+                Return False
+            End If
+        End Function
+
+        Public Shared Function PromoteKomaValue(ByVal komaValue As Byte) As Byte
+            Debug.Assert(SENTE_FU <= komaValue AndAlso komaValue <= promoteKoma.Length - 1)
+            Dim pvalue As Byte = promoteKoma(komaValue)
+            Debug.Assert(pvalue <> 0)
+            Return pvalue
+        End Function
+
+        Public Shared Function IsSente(komaValue As Byte) As Boolean
+            Return komaValue < GOTE
+        End Function
+
+        Public Shared Function IsGote(komaValue As Byte) As Boolean
+            Return komaValue >= GOTE
+        End Function
+
+        Public Shared Function KomaKind(komaValue As Byte) As Byte
+            If IsGote(komaValue) Then
+                Return komaValue - GOTE
+            End If
+            Return komaValue
+        End Function
+
+        Public Shared Function KomaKindGyokuToOu(komaValue As Byte) As Byte
+            Return KomaKind(GyokuToOu(komaValue))
+        End Function
+
+        Public Shared Function Which(komaValue As Byte) As Byte
+            If IsGote(komaValue) Then
+                Return GOTE
+            Else
+                Return SENTE
+            End If
+        End Function
+
+        Public Shared Function OppositeKoma(komaValue As Byte) As Byte
+            If komaValue >= GOTE Then
+                Return komaValue - GOTE
+            Else
+                Return komaValue + GOTE
+            End If
+        End Function
+
+        Public Shared Function GyokuToOu(ByVal komaValue As Byte) As Byte
+            If komaValue = GOTE_GYOKU Then
+                Return GOTE_OU
+            ElseIf komaValue = SENTE_GYOKU Then
+                Return SENTE_OU
+            End If
+            Return komaValue
+        End Function
+    End Class
+
+
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/Kyokumen.vb
===================================================================
--- ShogiNextMove/Board/Kyokumen.vb	                        (rev 0)
+++ ShogiNextMove/Board/Kyokumen.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,206 @@
+Namespace Board
+
+    Public Class Kyokumen
+
+        Public Turn As Byte
+        Private _masu As Koma()
+        Private _senteHand(Koma.C_MOCHIGOMA_MAX) As Integer
+        Private _goteHand(Koma.C_MOCHIGOMA_MAX) As Integer
+
+        Sub New()
+            Initialize(New Haichi.Hirate)
+        End Sub
+
+        Sub New(ByVal haichi As Haichi.HaichiBase)
+            Initialize(haichi)
+        End Sub
+
+        Sub New(ByVal org As Kyokumen)
+            Turn = org.Turn
+            _masu = CreateMasuArray(org._masu)
+            _senteHand = DirectCast(org._senteHand.Clone, Integer())
+            _goteHand = DirectCast(org._goteHand.Clone, Integer())
+        End Sub
+
+        Public Sub Initialize(h As Haichi.HaichiBase)
+            _masu = CreateMasuArray(h.MasuArray)
+        End Sub
+
+        Private Function CreateMasuArray(ByVal masu As Byte()) As Koma()
+            Dim komaMasu As New List(Of Koma)
+            For Each k As Byte In masu
+                komaMasu.Add(New Koma(k))
+            Next
+            Return komaMasu.ToArray
+        End Function
+
+        Private Function CreateMasuArray(ByVal orgKomaMasu As Koma()) As Koma()
+            Dim komaMasu As New List(Of Koma)
+            For Each k As Koma In orgKomaMasu
+                komaMasu.Add(New Koma(k.Value))
+            Next
+            Return komaMasu.ToArray
+        End Function
+
+        Public Sub ToggleTurn()
+            If Turn = Koma.SENTE Then
+                Turn = Koma.GOTE
+            Else
+                Turn = Koma.SENTE
+            End If
+        End Sub
+
+        Public Function IsSente() As Boolean
+            Return Turn = Koma.SENTE
+        End Function
+
+        Public Function IsGote() As Boolean
+            Return Turn = Koma.GOTE
+        End Function
+
+        Public Function GetMasu(ByVal col As Integer, ByVal row As Integer) As Koma
+            Return GetMasu(New KomaLocation(col, row))
+        End Function
+
+        Public Function GetMasu(ByVal l As KomaLocation) As Koma
+            Dim col As Integer = l.Col
+            Dim row As Integer = l.Row
+            Debug.Assert(1 <= row AndAlso row <= 9)
+            Debug.Assert(1 <= col AndAlso row <= 9)
+            Return _masu((row - 1) * 9 + (9 - col))
+        End Function
+
+        Friend Sub SetMasu(ByVal col As Integer, ByVal row As Integer, ByVal koma As Koma)
+            SetMasu(New KomaLocation(col, row), koma)
+        End Sub
+
+        Friend Sub SetMasu(ByVal l As KomaLocation, ByVal koma As Koma)
+            Dim col As Integer = l.Col
+            Dim row As Integer = l.Row
+            Debug.Assert(1 <= row AndAlso row <= 9)
+            Debug.Assert(1 <= col AndAlso row <= 9)
+            _masu((row - 1) * 9 + (9 - col)) = koma
+        End Sub
+
+
+        Public ReadOnly Property SenteHand(ByVal komaValue As Byte) As Integer
+            Get
+                Debug.Assert(Board.Koma.C_FU <= komaValue AndAlso komaValue <= Board.Koma.C_HISYA)
+                Return _senteHand(komaValue)
+            End Get
+        End Property
+
+        Public ReadOnly Property GoteHand(ByVal komaValue As Byte) As Integer
+            Get
+                Debug.Assert(Board.Koma.C_FU <= komaValue AndAlso komaValue <= Board.Koma.C_HISYA)
+                Return _goteHand(komaValue)
+            End Get
+        End Property
+
+        Public Property Comment() As String
+        Public Sub AppendComment(line As String)
+            If String.IsNullOrEmpty(Me.Comment) Then
+                Me.Comment = line
+            Else
+                Me.Comment += Environment.NewLine
+                Me.Comment += line
+            End If
+        End Sub
+
+        Public Property Hand(ByVal KomaValueWithWhich As Byte) As Integer
+            Get
+                Dim komaKind As Byte = KomaUtil.CapturedKomaKind(KomaValueWithWhich)
+                Debug.Assert(Koma.C_MOCHIGOMA_MIN <= komaKind AndAlso komaKind <= Koma.C_MOCHIGOMA_MAX)
+                If KomaUtil.IsSente(KomaValueWithWhich) Then
+                    Return _senteHand(komaKind)
+                Else
+                    Return _goteHand(komaKind)
+                End If
+            End Get
+            Set(value As Integer)
+                Dim komaKind As Byte = KomaUtil.CapturedKomaKind(KomaValueWithWhich)
+                Debug.Assert(Koma.C_MOCHIGOMA_MIN <= komaKind AndAlso komaKind <= Koma.C_MOCHIGOMA_MAX)
+                If KomaUtil.IsSente(KomaValueWithWhich) Then
+                    _senteHand(komaKind) = value
+                Else
+                    _goteHand(komaKind) = value
+                End If
+            End Set
+        End Property
+
+        Public Sub Edit(ByVal te As Te)
+
+            Dim toLocation As KomaLocation = te.ToLocation
+            Dim fromLocation As KomaLocation = te.FromLocation
+            Dim piece As Koma = te.Piece
+
+            If fromLocation.IsKomaBako Then
+                'なにもなし
+            ElseIf fromLocation.IsMochigoma AndAlso (Not toLocation.IsMochigoma) Then
+                Hand(piece.Value) -= 1
+            ElseIf fromLocation.IsMasu Then
+                SetMasu(fromLocation, Koma.Empty)
+            End If
+
+            If toLocation.IsKomaBako Then
+                'なにもなし
+            ElseIf toLocation.IsMochigoma Then
+                Hand(piece.Value) += 1
+            ElseIf toLocation.IsMasu Then
+                Dim capturedKomaValue As Koma = GetMasu(toLocation)
+                If Not capturedKomaValue.IsEmpty Then
+                    Hand(capturedKomaValue.CapturedKomaKind + te.Which) += 1
+                End If
+                SetMasu(toLocation, piece)
+            End If
+
+        End Sub
+
+        Public Sub Move(ByVal te As Te)
+            Edit(te)
+            ToggleTurn()
+        End Sub
+
+        Public Function KomabakoCounts() As Integer()
+            Dim komaCounts As Integer() = {0, 18, 4, 4, 4, 4, 2, 2, 1, 1}
+            For komaValue As Byte = Koma.C_MOCHIGOMA_MIN To Koma.C_MOCHIGOMA_MAX
+                komaCounts(komaValue) -= Me.Hand(komaValue + Koma.SENTE)
+                komaCounts(komaValue) -= Me.Hand(komaValue + Koma.GOTE)
+            Next
+            For Each komaWithWhich As Koma In _masu
+                If Not komaWithWhich.IsEmpty Then
+                    Dim komaValue As Byte = komaWithWhich.CapturedKomaKind
+                    komaCounts(komaValue) -= 1
+                End If
+            Next
+            Return komaCounts
+        End Function
+
+        Public Overloads Function Equals(ByVal org As Kyokumen) As Boolean
+
+            If Me._masu.Count <> org._masu.Count Then
+                Return False
+            End If
+            For i As Integer = 0 To Me._masu.Count - 1
+                If Me._masu(i).Value <> org._masu(i).Value Then
+                    Return False
+                End If
+            Next
+            For i As Integer = 0 To Me._senteHand.Count - 1
+                If Me._senteHand(i) <> org._senteHand(i) Then
+                    Return False
+                End If
+            Next
+            For i As Integer = 0 To Me._goteHand.Count - 1
+                If Me._goteHand(i) <> org._goteHand(i) Then
+                    Return False
+                End If
+            Next
+
+            Return True
+
+        End Function
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/KyokumenHaichiComp.vb
===================================================================
--- ShogiNextMove/Board/KyokumenHaichiComp.vb	                        (rev 0)
+++ ShogiNextMove/Board/KyokumenHaichiComp.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,18 @@
+Namespace Board
+
+    Public Class KyokumenHaichiComp
+
+        Public Shared Function HaichiIsEqual(ByVal kyokumen As Board.Kyokumen, ByVal haichi As Board.Haichi.HaichiBase) As Boolean
+            For i As Integer = 1 To 9
+                For j As Integer = 1 To 9
+                    If kyokumen.GetMasu(New KomaLocation(i, j)).Value <> haichi.Masu(i, j) Then
+                        Return False
+                    End If
+                Next
+            Next
+            Return True
+        End Function
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/KyokumenUtil.vb
===================================================================
--- ShogiNextMove/Board/KyokumenUtil.vb	                        (rev 0)
+++ ShogiNextMove/Board/KyokumenUtil.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,90 @@
+Namespace Board
+
+    Public Class KyokumenUtil
+
+        ''' <summary>
+        ''' 王将と玉将が同じ向きになっているか?
+        ''' </summary>
+        ''' <returns>True:不正 False:正常</returns>
+        ''' <remarks></remarks>
+        Public Shared Function IsOuGyokuInSamePlayer(ByVal kyokumen As Kyokumen) As Boolean
+            Dim senteOuCount As Integer = 0
+            Dim goteOuCount As Integer = 0
+            For i As Integer = 1 To 9
+                For j As Integer = 1 To 9
+                    Dim l As New KomaLocation(i, j)
+                    Dim koma As Koma = kyokumen.GetMasu(l)
+                    If koma.KomaKindGyokuToOu = koma.C_OU Then
+                        If koma.IsSente Then
+                            senteOuCount += 1
+                        End If
+                        If koma.IsGote Then
+                            goteOuCount += 1
+                        End If
+                    End If
+                Next
+            Next
+            If 2 <= senteOuCount Then
+                Return True
+            End If
+            If 2 <= goteOuCount Then
+                Return True
+            End If
+            Return False
+        End Function
+
+        ''' <summary>
+        ''' 二歩かどうかを判定
+        ''' </summary>
+        ''' <param name="kyokumen"></param>
+        ''' <returns>True:二歩 false:正常</returns>
+        ''' <remarks></remarks>
+        Public Shared Function IsNifu(ByVal kyokumen As Kyokumen) As Boolean
+            For col As Integer = 1 To 9
+                If IsNifuInCol(kyokumen, col, Koma.SENTE_FU) Then
+                    Return True
+                End If
+                If IsNifuInCol(kyokumen, col, Koma.GOTE_FU) Then
+                    Return True
+                End If
+            Next
+            Return False
+        End Function
+
+        ''' <summary>
+        ''' 一列で二歩かどうかを判定
+        ''' </summary>
+        ''' <param name="kyokumen"></param>
+        ''' <param name="col">列</param>
+        ''' <param name="which">歩の値 先手Koma.SENTE_FU,後手Koma.GOTE_FU</param>
+        ''' <returns>True:二歩 false:正常</returns>
+        ''' <remarks></remarks>
+        Private Shared Function IsNifuInCol(ByVal kyokumen As Kyokumen, col As Integer, which As Byte) As Boolean
+            Return 2 <= CountFuInCol(kyokumen, col, which)
+        End Function
+
+        ''' <summary>
+        ''' 一列に歩が何枚あるか?
+        ''' </summary>
+        ''' <param name="kyokumen"></param>
+        ''' <param name="col"></param>
+        ''' <param name="which"></param>
+        ''' <returns></returns>
+        ''' <remarks></remarks>
+        Public Shared Function CountFuInCol(ByVal kyokumen As Kyokumen, col As Integer, which As Byte) As Integer
+            Dim count As Integer = 0
+            For row As Integer = 1 To 9
+                Dim l As New KomaLocation(col, row)
+                Dim koma As Koma = kyokumen.GetMasu(l)
+                If koma.Value = which Then
+                    count += 1
+                End If
+            Next
+            Return count
+        End Function
+
+    End Class
+
+End Namespace
+
+

Added: ShogiNextMove/Board/Location.vb
===================================================================
--- ShogiNextMove/Board/Location.vb	                        (rev 0)
+++ ShogiNextMove/Board/Location.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,89 @@
+Namespace Board
+
+    Public Class KomaLocation
+
+        Public Overloads Function Equals(org As KomaLocation) As Boolean
+            Return Me.Row = org.Row AndAlso Me.Col = org.Col
+        End Function
+
+
+
+        Public Shared Function ParseLocation(ByVal text As String) As KomaLocation
+            Debug.Assert(text.Length = 2)
+            Dim lcol As Integer
+            If Not Integer.TryParse(text.Substring(0, 1), lcol) Then
+                Debug.Assert(False)
+                Return Nothing
+            End If
+            Debug.Assert(0 <= lcol AndAlso lcol <= 9)
+            Dim lrow As Integer
+            If Not Integer.TryParse(text.Substring(1, 1), lrow) Then
+                Debug.Assert(False)
+                Return Nothing
+            End If
+            Debug.Assert(0 <= lrow AndAlso lrow <= 9)
+            If Not ((1 <= lcol AndAlso lcol <= 9 AndAlso 1 <= lrow AndAlso lrow <= 9) OrElse _
+                    (lrow = 0 AndAlso lcol = 0)) Then
+                Debug.Assert(False)
+                Return Nothing
+            End If
+            Return New KomaLocation(lcol, lrow)
+        End Function
+
+        Private _row As Integer
+        Public ReadOnly Property Row As Integer
+            Get
+                Return _row
+            End Get
+        End Property
+
+        Private _col As Integer
+        Public ReadOnly Property Col As Integer
+            Get
+                Return _col
+            End Get
+        End Property
+
+        Public ReadOnly Property IsMochigoma As Boolean
+            Get
+                Return (_col = 0) AndAlso (_row = 0)
+            End Get
+        End Property
+
+        Public ReadOnly Property IsKomaBako As Boolean
+            Get
+                Return (_col = -1) AndAlso (_row = -1)
+            End Get
+        End Property
+
+        Public ReadOnly Property IsMasu As Boolean
+            Get
+                Return (Not IsMochigoma) AndAlso (Not IsKomaBako)
+            End Get
+        End Property
+
+        Sub New(col As Integer, row As Integer)
+            Debug.Assert(
+                 (1 <= col AndAlso col <= 9 AndAlso 1 <= row AndAlso row <= 9) OrElse _
+                 (0 = col AndAlso row = 0) OrElse _
+                 (-1 = col AndAlso row = -1))
+            _col = col
+            _row = row
+        End Sub
+
+        Public Shared Function KomaBako() As KomaLocation
+            Return New KomaLocation(-1, -1)
+        End Function
+
+        Public Shared Function Mochigoma() As KomaLocation
+            Return New KomaLocation(0, 0)
+        End Function
+
+        Sub New(original As KomaLocation)
+            _col = original.Col
+            _row = original.Row
+        End Sub
+
+    End Class
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/Board/NullMoveType.vb
===================================================================
--- ShogiNextMove/Board/NullMoveType.vb	                        (rev 0)
+++ ShogiNextMove/Board/NullMoveType.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,13 @@
+Namespace Board
+    Public Enum NullMoveType
+        NotNullMove
+        CHUDAN
+        TSUMI
+        TORYO
+        SENNICHITE
+        TIME_UP
+        ILLEGAL_MOVE
+        JISHOGI
+        ILLEGAL_ACTION
+    End Enum
+End Namespace

Added: ShogiNextMove/Board/Te.vb
===================================================================
--- ShogiNextMove/Board/Te.vb	                        (rev 0)
+++ ShogiNextMove/Board/Te.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,267 @@
+Imports System
+
+Namespace Board
+    Public Class Te
+        Public Property FromLocation As KomaLocation
+
+        Public Property ToLocation As KomaLocation
+
+        Public Property Piece() As Koma
+
+        Private _promote As Boolean = False
+        Public Property Promote() As Boolean
+            Get
+                Return _promote
+            End Get
+            Set(value As Boolean)
+                _promote = value
+                If value = True AndAlso Not Piece.IsPromoted Then
+                    Piece.Promote()
+                End If
+            End Set
+        End Property
+
+        Public Property NullMoveType() As NullMoveType
+
+        Public ReadOnly Property IsNullMove() As Boolean
+            Get
+                Return Me.NullMoveType <> NullMoveType.NotNullMove
+            End Get
+        End Property
+
+        Public ReadOnly Property IsMasu() As Boolean
+            Get
+                Return Me.FromLocation.IsMasu AndAlso Me.ToLocation.IsMasu
+            End Get
+        End Property
+
+        Public ReadOnly Property IsSente() As Boolean
+            Get
+                Return Piece.IsSente
+            End Get
+        End Property
+
+        Public ReadOnly Property IsGote() As Boolean
+            Get
+                Return Piece.IsGote
+            End Get
+        End Property
+
+        Public ReadOnly Property Which() As Byte
+            Get
+                Return Piece.Which
+            End Get
+        End Property
+
+        Public ReadOnly Property KomaKind() As Byte
+            Get
+                Return Piece.KomaKind
+            End Get
+        End Property
+
+
+
+        Public ReadOnly Property IsVertical() As Boolean
+            Get
+                Return Me.FromLocation.Col = Me.ToLocation.Col
+            End Get
+        End Property
+
+        Public ReadOnly Property IsHorizontal() As Boolean
+            Get
+                Return Me.FromLocation.Row = Me.ToLocation.Row
+            End Get
+        End Property
+
+        Public ReadOnly Property IsFromRight() As Boolean
+            Get
+                If Not IsMasu Then
+                    Return False
+                End If
+                If Me.IsSente AndAlso Me.FromLocation.Col < Me.ToLocation.Col Then
+                    Return True
+                End If
+                If Me.IsGote AndAlso Me.FromLocation.Col > Me.ToLocation.Col Then
+                    Return True
+                End If
+                Return False
+            End Get
+        End Property
+
+        Public ReadOnly Property IsFromLeft() As Boolean
+            Get
+                If Not IsMasu Then
+                    Return False
+                End If
+                If IsSente Then
+                    If FromLocation.Col > ToLocation.Col Then
+                        Return True
+                    End If
+                ElseIf IsGote Then
+                    If FromLocation.Col < ToLocation.Col Then
+                        Return True
+                    End If
+                End If
+                Return False
+            End Get
+        End Property
+
+        Public ReadOnly Property IsUp() As Boolean
+            Get
+                If Not IsMasu Then
+                    Return False
+                End If
+                If IsSente Then
+                    If FromLocation.Row > ToLocation.Row Then
+                        Return True
+                    End If
+                ElseIf IsGote Then
+                    If FromLocation.Row < ToLocation.Row Then
+                        Return True
+                    End If
+                End If
+                Return False
+            End Get
+        End Property
+
+        Public ReadOnly Property IsDown() As Boolean
+            Get
+                If Not IsMasu Then
+                    Return False
+                End If
+                If IsSente Then
+                    If FromLocation.Row < Me.ToLocation.Row Then
+                        Return True
+                    End If
+                ElseIf IsGote Then
+                    If FromLocation.Row > ToLocation.Row Then
+                        Return True
+                    End If
+                End If
+                Return False
+            End Get
+        End Property
+
+        Public Sub New()
+            FromLocation = New KomaLocation(0, 0)
+            ToLocation = New KomaLocation(0, 0)
+            Piece = New Koma(0)
+            Promote = False
+            NullMoveType = NullMoveType.NotNullMove
+        End Sub
+
+        Public Sub New(fromLocation As KomaLocation, tolocation As KomaLocation, komaValue As Byte, isPromote As Boolean)
+            Me.FromLocation = fromLocation
+            Me.ToLocation = tolocation
+            Me.Piece = New Koma(komaValue)
+            Me._promote = isPromote
+            Me.NullMoveType = NullMoveType.NotNullMove
+        End Sub
+
+        Public Sub New(type As NullMoveType, which As Byte)
+            Me.Piece = New Koma(which)
+            Me.NullMoveType = type
+        End Sub
+
+        Public Sub New(orgTe As Te)
+            If Not orgTe.IsNullMove Then
+                FromLocation = New KomaLocation(orgTe.FromLocation)
+                ToLocation = New KomaLocation(orgTe.ToLocation)
+                Piece = New Koma(orgTe.Piece.Value)
+                Promote = orgTe.Promote
+                NullMoveType = NullMoveType.NotNullMove
+            Else
+                Me.Piece = orgTe.Piece
+                Me.NullMoveType = orgTe.NullMoveType
+            End If
+        End Sub
+
+        Public Overloads Function Equals(comp As Te) As Boolean
+            Dim result As Boolean
+            If Not comp.IsNullMove AndAlso Not Me.IsNullMove Then
+                If comp.FromLocation.Col = Me.FromLocation.Col AndAlso _
+                   comp.FromLocation.Row = Me.FromLocation.Row AndAlso _
+                   comp.ToLocation.Row = Me.ToLocation.Row AndAlso _
+                   comp.ToLocation.Col = Me.ToLocation.Col AndAlso _
+                   comp.Piece.Value = Me.Piece.Value AndAlso _
+                   comp.Promote = Me.Promote Then
+                    result = True
+                    Return result
+                End If
+            Else
+                If comp.IsNullMove AndAlso Me.IsNullMove Then
+                    result = (comp.NullMoveType = Me.NullMoveType)
+                    Return result
+                End If
+            End If
+            result = False
+            Return result
+        End Function
+
+        Public Function IsFromRighter(comp As Te) As Boolean
+            Return (Me.IsSente AndAlso Me.FromLocation.Col < comp.FromLocation.Col) OrElse _
+                  (Me.IsGote AndAlso Me.FromLocation.Col > comp.FromLocation.Col)
+        End Function
+
+        Public Function CanPromote() As Boolean
+
+            If Not IsMasu Then
+                Return False
+            End If
+
+            If Not Piece.CanPromote Then
+                Return False
+            End If
+
+            If IsSente Then
+                If (1 <= ToLocation.Row AndAlso ToLocation.Row <= 3) OrElse _
+                   (1 <= FromLocation.Row AndAlso FromLocation.Row <= 3) Then
+                    Return True
+                End If
+            End If
+
+            If IsGote Then
+                If (7 <= ToLocation.Row AndAlso ToLocation.Row <= 9) OrElse _
+                   (7 <= FromLocation.Row AndAlso FromLocation.Row <= 9) Then
+                    Return True
+                End If
+            End If
+            Return False
+        End Function
+
+        Public Function MustPromote() As Boolean
+
+            If Piece.Value = Koma.SENTE_FU OrElse
+                Piece.Value = Koma.SENTE_KYO Then
+                If ToLocation.Row = 1 Then
+                    Return True
+                End If
+            End If
+
+            If Piece.Value = Koma.SENTE_KEI Then
+                If ToLocation.Row = 2 OrElse
+                   ToLocation.Row = 1 Then
+                    Return True
+                End If
+            End If
+
+            If Piece.Value = Koma.GOTE_FU OrElse
+                Piece.Value = Koma.GOTE_KYO Then
+                If ToLocation.Row = 9 Then
+                    Return True
+                End If
+            End If
+
+            If Piece.Value = Koma.GOTE_KEI Then
+                If ToLocation.Row = 8 OrElse
+                    ToLocation.Row = 9 Then
+                    Return True
+                End If
+            End If
+
+            Return False
+
+        End Function
+
+    End Class
+End Namespace

Added: ShogiNextMove/Control/Board/BoardViewer.Designer.vb
===================================================================
--- ShogiNextMove/Control/Board/BoardViewer.Designer.vb	                        (rev 0)
+++ ShogiNextMove/Control/Board/BoardViewer.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,29 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class BoardViewer
+    Inherits System.Windows.Forms.UserControl
+
+    'UserControl はコンポーネント一覧をクリーンアップするために dispose をオーバーライドします。
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Windows フォーム デザイナーで必要です。
+    Private components As System.ComponentModel.IContainer
+
+    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
+    'Windows フォーム デザイナーを使用して変更できます。  
+    'コード エディターを使って変更しないでください。
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        components = New System.ComponentModel.Container()
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+    End Sub
+
+End Class

Added: ShogiNextMove/Control/Board/BoardViewer.resx
===================================================================
--- ShogiNextMove/Control/Board/BoardViewer.resx	                        (rev 0)
+++ ShogiNextMove/Control/Board/BoardViewer.resx	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
+    <value>False</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: ShogiNextMove/Control/Board/BoardViewer.vb
===================================================================
--- ShogiNextMove/Control/Board/BoardViewer.vb	                        (rev 0)
+++ ShogiNextMove/Control/Board/BoardViewer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,623 @@
+Imports ShogiNextMove.Board
+
+Namespace Control.Board
+
+    Public Class BoardViewer
+        Inherits PictureBox
+
+        Public Event Editing(ByVal sender As System.Object, ByVal e As EditingEventArgs)
+
+        Public Event Edited(ByVal sender As System.Object, ByVal e As EditedEventArgs)
+
+        Private imageLoader As ImageLoader = imageLoader.GetInstance
+
+        Private _kyokumen As New Kyokumen
+        Public Property kyokumen As Kyokumen
+            Get
+                Return _kyokumen
+            End Get
+            Set(value As Kyokumen)
+                If value Is Nothing Then
+                    _kyokumen = New Kyokumen
+                Else
+                    _kyokumen = New Kyokumen(value)
+                End If
+            End Set
+        End Property
+
+        Private _komabakoVisible As Boolean
+        Public Property KomabakoVisible As Boolean
+            Get
+                Return _komabakoVisible
+            End Get
+            Set(value As Boolean)
+                _komabakoVisible = value
+                If _baseBitmap IsNot Nothing Then
+                    MakeBaseBitmap()
+                    DrawCurrentBitmap()
+                End If
+            End Set
+        End Property
+
+        Public Sub Initialize()
+            imageLoader.Load()
+            MakeBaseBitmap()
+        End Sub
+
+
+
+        Private _baseBitmap As Bitmap
+        Private _currentBitmap As Bitmap
+        Private _movingBackBitmap As Bitmap
+        Private _movingKomaBitmap As Bitmap
+
+        Private _isBoardViewRotated As Boolean
+        Public Property IsBoardViewRotated As Boolean
+            Get
+                Return _isBoardViewRotated
+            End Get
+            Set(value As Boolean)
+                _isBoardViewRotated = value
+                imageLoader.SetBoardBiewRotated(_isBoardViewRotated)
+            End Set
+        End Property
+
+
+        Private moveKomaInfo As New MoveKomaInfo
+
+
+
+
+        Public Sub MakeBaseBitmap()
+
+
+            Dim size As Size = New Size(komaSize.Width + 28, komaSize.Height * 7 + 11)
+
+            _movingBackBitmap = New Bitmap(Me.Width, Me.Height)
+            _baseBitmap = New Bitmap(Me.Width, Me.Height)
+
+            Dim graphics As Graphics = graphics.FromImage(_baseBitmap)
+            Dim srcRect As Rectangle = New Rectangle(0, 0, goteKomadaiRect.Width, goteKomadaiRect.Height)
+            Dim srcRect2 As Rectangle = New Rectangle(0, 0, imageLoader.BoardBitmap.Width, imageLoader.BoardBitmap.Height)
+            graphics.DrawImage(imageLoader.BoardBitmap, goteKomadaiRect, srcRect, GraphicsUnit.Pixel)
+            graphics.DrawImage(imageLoader.BoardBitmap, senteKomadaiRect, srcRect, GraphicsUnit.Pixel)
+            graphics.DrawImage(imageLoader.BoardBitmap, boardRect, srcRect2, GraphicsUnit.Pixel)
+            If KomabakoVisible Then
+                Dim srcRect3 As Rectangle = New Rectangle(0, 0, KomabakoRect.Width, KomabakoRect.Height)
+                graphics.DrawImage(imageLoader.BoardBitmap, KomabakoRect, srcRect3, GraphicsUnit.Pixel)
+            End If
+            Dim masuBitmap As Bitmap = imageLoader.MasuBitmap
+            graphics.DrawImage(masuBitmap, boardRect, srcRect2, GraphicsUnit.Pixel)
+            graphics.Dispose()
+        End Sub
+
+        Public Sub DrawCurrentBitmap()
+            _currentBitmap = New Bitmap(Me.Width, Me.Height)
+            Dim graphics As Graphics = graphics.FromImage(_currentBitmap)
+            Dim rect As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height)
+            graphics.DrawImage(_baseBitmap, rect)
+            ''highlightを表示する。
+            'Dim rectangle As Rectangle = rectangle.Empty
+            'If Me.viewPref.HighlightLastMove AndAlso Me.moveList.Count > 0 AndAlso useTesu > 0 Then
+            '    Dim te As Te = Me.moveList(useTesu - 1)
+            '    If Not AddressOf te.IsNullMove Then
+            '        rectangle = Me.GetMasuRect(AddressOf te.ToSuji, AddressOf te.ToDan)
+            '        graphics.DrawImage(Me.highlightBitmap, rectangle)
+            '    End If
+            'End If
+
+            For row As Byte = 1 To 9
+                For col As Byte = 1 To 9
+                    Dim koma As Koma = kyokumen.GetMasu(New KomaLocation(col, row))
+                    If Not koma.IsEmpty Then
+                        Dim masuRect As Rectangle = GetMasuRect(col, row)
+                        graphics.DrawImage(imageLoader.GetKomaImage(koma.Value), masuRect)
+                    End If
+                Next
+            Next
+            '持ち駒を表示する。
+            For k As Byte = Koma.C_MOCHIGOMA_MIN To Koma.C_MOCHIGOMA_MAX
+                Dim senteKomaCount As Integer = kyokumen.SenteHand(k)
+                If senteKomaCount > 0 Then
+                    DrawMochigoma(graphics, k + Koma.SENTE, senteKomaCount)
+                End If
+                Dim goteKomaCount As Integer = kyokumen.GoteHand(k)
+                If goteKomaCount > 0 Then
+                    DrawMochigoma(graphics, k + Koma.GOTE, goteKomaCount)
+                End If
+            Next
+
+            If KomabakoVisible Then
+                '駒箱を表示する
+                Dim komabakoKomaCount() As Integer = kyokumen.KomabakoCounts()
+                For k As Byte = Koma.C_KOMABAKO_MIN To Koma.C_KOMABAKO_MAX
+                    If 0 < komabakoKomaCount(k) Then
+                        DrawKomabako(graphics, k, komabakoKomaCount(k))
+                    End If
+                Next
+            End If
+
+
+            Me.Invalidate()
+        End Sub
+
+
+
+
+        Private Sub DrawMochigoma(graphics As Graphics, komaValue As Byte, komaCount As Integer)
+            Debug.Assert(0 <= komaCount)
+            Debug.Assert(Koma.SENTE_FU <= komaValue AndAlso komaValue <= Koma.SENTE_HISYA OrElse
+                        Koma.GOTE_FU <= komaValue AndAlso komaValue <= Koma.GOTE_HISYA)
+            Dim mochigomaRect As Rectangle = Me.GetMochigomaRect(komaValue)
+            Dim stringRect As Rectangle = New Rectangle(mochigomaRect.Right, mochigomaRect.Top, 28, mochigomaRect.Height)
+
+            DrawMochigomaKomabakoImage(graphics, mochigomaRect, stringRect, GetStringMochigomaFormat, komaValue, komaCount)
+        End Sub
+
+        Private Sub DrawKomabako(graphics As Graphics, komaValue As Byte, komaCount As Integer)
+            Debug.Assert(0 <= komaCount)
+            Debug.Assert(Koma.C_KOMABAKO_MIN <= Koma.C_KOMABAKO_MAX)
+            Dim komabakoRect As Rectangle = GetKomabakoRect(komaValue)
+            Dim stringRect As Rectangle = New Rectangle(komabakoRect.Left, komabakoRect.Bottom, komabakoRect.Width, 24)
+            DrawMochigomaKomabakoImage(graphics, komabakoRect, stringRect, GetStringKomabakoFormat, komaValue, komaCount)
+
+        End Sub
+
+        Private Sub DrawMochigomaKomabakoImage(graphics As Graphics,
+                                               mochigomaRect As Rectangle,
+                                               stringRect As Rectangle,
+                                                stringFormat As StringFormat,
+                                                  komaValue As Byte, KomaCount As Integer)
+            Dim font As Font = GetFont()
+            Dim allRect As Rectangle = Rectangle.Union(mochigomaRect, stringRect)
+            graphics.DrawImage(_baseBitmap, allRect, allRect, GraphicsUnit.Pixel)
+            Dim image As Bitmap = imageLoader.GetKomaImage(komaValue)
+            graphics.DrawImage(image, mochigomaRect)
+            graphics.DrawString(KomaCount.ToString(), font, Brushes.Black, stringRect, stringFormat)
+        End Sub
+
+        Private Function GetFont() As Font
+            Return New Font("Arial", 14.0F)
+        End Function
+
+        Private Function GetStringMochigomaFormat() As StringFormat
+            Dim sf As New StringFormat()
+            sf.Alignment = StringAlignment.Far
+            sf.LineAlignment = StringAlignment.Center
+            Return sf
+        End Function
+
+        Private Function GetStringKomabakoFormat() As StringFormat
+            Dim sf As New StringFormat()
+            sf.Alignment = StringAlignment.Center
+            sf.LineAlignment = StringAlignment.Center
+            Return sf
+        End Function
+
+        Private ReadOnly Property boardRect() As Rectangle
+            Get
+                Return New Rectangle(goteKomadaiRect.Right + 10, 3, imageLoader.BoardBitmap.Width, imageLoader.BoardBitmap.Height)
+            End Get
+        End Property
+
+        Private ReadOnly Property goteKomadaiRect() As Rectangle
+            Get
+                Return New Rectangle(3, 3, KomadaiSize.Width, KomadaiSize.Height)
+            End Get
+        End Property
+
+        Private ReadOnly Property senteKomadaiRect() As Rectangle
+            Get
+                Return New Rectangle(boardRect.Right + 10, boardRect.Bottom - KomadaiSize.Height, KomadaiSize.Width, KomadaiSize.Height)
+            End Get
+        End Property
+
+        Private ReadOnly Property KomadaiSize As Size
+            Get
+                Return New Size(komaSize.Width + 28, komaSize.Height * 7 + 11)
+            End Get
+        End Property
+
+        Public ReadOnly Property komaSize() As Size
+            Get
+                Return New Size(imageLoader.HighLightBitmap.Width, imageLoader.HighLightBitmap.Height)
+            End Get
+        End Property
+
+        Private ReadOnly Property KomabakoRect() As Rectangle
+            Get
+                Return New Rectangle(3, boardRect.Bottom + 5, komaSize.Width * 9 + 11, komaSize.Height + 24)
+            End Get
+        End Property
+
+
+        Private Function GetMochigomaRect(komaValueWithWhich As Byte) As Rectangle
+            Dim isGote As Boolean = KomaUtil.IsGote(komaValueWithWhich)
+            Dim komaValue As Byte = KomaUtil.KomaKind(komaValueWithWhich)
+            Dim rect As Rectangle = Rectangle.Empty
+            If (isGote AndAlso Not IsBoardViewRotated) OrElse
+             (Not isGote AndAlso IsBoardViewRotated) Then
+                rect = New Rectangle(goteKomadaiRect.Left, goteKomadaiRect.Top + 11 + komaSize.Height * (komaValue - 1), komaSize.Width, komaSize.Height)
+            Else
+                rect = New Rectangle(senteKomadaiRect.Left, senteKomadaiRect.Top + komaSize.Height * (komaValue - 1), komaSize.Width, komaSize.Height)
+            End If
+
+            Return rect
+        End Function
+
+        Private Function GetKomabakoRect(komaValue As Byte) As Rectangle
+            Return New Rectangle(
+                KomabakoRect.Left + komaSize.Width * (komaValue - 1),
+                KomabakoRect.Top + 3,
+                komaSize.Width,
+                komaSize.Height)
+        End Function
+
+        Public Function GetMasuRect(l As KomaLocation) As Rectangle
+            Return GetMasuRect(l.Col, l.Row)
+        End Function
+
+        Private Function GetMasuRect(col As Integer, row As Integer) As Rectangle
+            Debug.Assert(1 <= row AndAlso row <= 9)
+            Debug.Assert(1 <= col AndAlso col <= 9)
+            Dim masuRect As Rectangle = Rectangle.Empty
+
+            If IsBoardViewRotated Then
+                row = 9 - (row - 1)
+                col = 9 - (col - 1)
+            End If
+            Return New Rectangle(boardRect.Left + 11 + komaSize.Width * (9 - col), boardRect.Top + 11 + komaSize.Height * (row - 1), komaSize.Width, komaSize.Height)
+
+            Return masuRect
+        End Function
+
+        Private Function GetToLocationAndMovingKoma(p As Point) As KomaLocation
+            Dim movingKomaValue As Byte = moveKomaInfo.MovingKoma
+            If Not Me.moveKomaInfo.IsValidPosition Then
+                Return Nothing
+            End If
+            Dim tolocation As KomaLocation
+
+            If boardRect.Contains(p) Then
+                tolocation = Me.GetKomaPosition(p)
+                If tolocation.Equals(moveKomaInfo.From) Then
+                    Return Nothing
+                End If
+            ElseIf goteKomadaiRect.Contains(p) Then
+                tolocation = KomaLocation.Mochigoma
+                movingKomaValue = KomaUtil.CapturedKomaKind(moveKomaInfo.MovingKoma) + Koma.GOTE
+                If goteKomadaiRect.Contains(moveKomaInfo.MouseDownPt) Then
+                    Return Nothing
+                End If
+            ElseIf senteKomadaiRect.Contains(p) Then
+                tolocation = KomaLocation.Mochigoma
+                movingKomaValue = KomaUtil.CapturedKomaKind(moveKomaInfo.MovingKoma) + Koma.SENTE
+                If senteKomadaiRect.Contains(moveKomaInfo.MouseDownPt) Then
+                    Return Nothing
+                End If
+            ElseIf KomabakoVisible AndAlso KomabakoRect.Contains(p) Then
+                tolocation = KomaLocation.KomaBako
+                If KomabakoRect.Contains(moveKomaInfo.MouseDownPt) Then
+                    Return Nothing
+                End If
+            Else
+                Return Nothing
+            End If
+            If tolocation.IsMochigoma Then
+                If KomaUtil.KomaKindGyokuToOu(movingKomaValue) = Koma.C_OU Then
+                    Return Nothing
+                End If
+            End If
+            If tolocation.IsMasu Then
+                Dim capturedKoma As Koma = kyokumen.GetMasu(tolocation)
+                If capturedKoma.KomaKindGyokuToOu = Koma.C_OU Then
+                    Return Nothing
+                End If
+            End If
+            moveKomaInfo.MovingKoma = movingKomaValue
+            Return tolocation
+        End Function
+
+
+
+        Public Function GetTeWithMouseUp(mousePt As Point) As Te
+
+            Dim tolocation As KomaLocation = GetToLocationAndMovingKoma(mousePt)
+            Dim movingKomaValue As Byte = moveKomaInfo.MovingKoma
+
+
+            If Not tolocation Is Nothing Then
+
+                Dim te As New Te(moveKomaInfo.From, tolocation, movingKomaValue, False)
+
+
+                Return te
+            End If
+
+            Return Nothing
+
+        End Function
+
+
+
+
+
+
+        Private Function MakeMovingBackBitmap(l As KomaLocation, komaValue As Byte) As Rectangle
+            Dim graphics As Graphics = graphics.FromImage(Me._movingBackBitmap)
+            Dim rect As Rectangle = New Rectangle(0, 0, Me._movingBackBitmap.Width, Me._movingBackBitmap.Height)
+            graphics.DrawImage(_currentBitmap, rect)
+            Dim rectangle As Rectangle
+            If l.IsMasu Then
+                rectangle = Me.GetMasuRect(l)
+                graphics.DrawImage(_baseBitmap, rectangle, rectangle, GraphicsUnit.Pixel)
+            ElseIf l.IsMochigoma Then
+                Dim num As Integer = Me.kyokumen.Hand(komaValue)
+                Me.DrawMochigoma(graphics, komaValue, num - 1)
+
+                Dim mochigomaRect As Rectangle = Me.GetMochigomaRect(komaValue)
+
+                Dim r As Rectangle = New Rectangle(mochigomaRect.Right, mochigomaRect.Top, 28, mochigomaRect.Height)
+                Dim rectangle2 As Rectangle = Drawing.Rectangle.Union(mochigomaRect, r)
+
+                rectangle = rectangle2
+            ElseIf l.IsKomaBako Then
+                Dim num As Integer = Me.kyokumen.KomabakoCounts(komaValue)
+                Me.DrawKomabako(graphics, komaValue, num - 1)
+                Dim komabakoRect As Rectangle = GetKomabakoRect(komaValue)
+                Dim stringRect As Rectangle = New Rectangle(komabakoRect.Left, komabakoRect.Bottom, komabakoRect.Width, 24)
+                Dim rectangle2 As Rectangle = Drawing.Rectangle.Union(komabakoRect, stringRect)
+                rectangle = rectangle2
+            End If
+            graphics.Dispose()
+            Return rectangle
+        End Function
+
+
+        Private Function GetKomaPosition(mousePt As Point) As KomaLocation
+            Dim col As Integer = 0
+            Dim row As Integer = 0
+            Dim num As Integer = Me.boardRect.Right - 13 - mousePt.X
+            Dim num2 As Integer = mousePt.Y - (Me.boardRect.Top + 11)
+            If num >= 0 AndAlso num2 >= 0 Then
+                col = num \ Me.komaSize.Width + 1
+                row = num2 \ Me.komaSize.Height + 1
+                If Me.IsBoardViewRotated Then
+                    col = 10 - col
+                    row = 10 - row
+                End If
+            End If
+            If 9 < col Then
+                col = 9
+            End If
+            If 9 < row Then
+                row = 9
+            End If
+            If col < 1 Then
+                col = 1
+            End If
+            If row < 1 Then
+                row = 1
+            End If
+            Return New KomaLocation(col, row)
+        End Function
+
+        Private Sub InitializeComponent()
+            CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
+            Me.SuspendLayout()
+            '
+            'BoardViewer
+            '
+            CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
+            Me.ResumeLayout(False)
+
+        End Sub
+
+        Private Sub BoardViewer_MouseMove(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
+            Dim rectangle As Rectangle = New Rectangle(Me.moveKomaInfo.MouseDownPt.X - SystemInformation.DragSize.Width \ 2, Me.moveKomaInfo.MouseDownPt.Y - SystemInformation.DragSize.Height \ 2, SystemInformation.DragSize.Width, SystemInformation.DragSize.Height)
+            If Me.moveKomaInfo.IsMouseDown AndAlso Me.moveKomaInfo.IsValidPosition AndAlso Not Me.moveKomaInfo.IsNowMove AndAlso Not Me.moveKomaInfo.IsNowDrag AndAlso Not rectangle.Contains(e.Location) Then
+                Me.moveKomaInfo.IsNowDrag = True
+            End If
+            If Me.moveKomaInfo.IsNowMove OrElse Me.moveKomaInfo.IsNowDrag Then
+                If Not Me.moveKomaInfo.IsMovingInvalidate Then
+                    Me.moveKomaInfo.MovingKomaRect = New Rectangle(e.X - Me.komaSize.Width \ 2, e.Y - Me.komaSize.Height \ 2, Me.komaSize.Width, Me.komaSize.Height)
+                    Me.moveKomaInfo.InvalidRect = rectangle.Union(Me.moveKomaInfo.MovingKomaPrevRect, Me.moveKomaInfo.MovingKomaRect)
+                    Me.moveKomaInfo.MovingKomaPrevRect = Me.moveKomaInfo.MovingKomaRect
+                    Dim rectangle2 As Rectangle = rectangle.Intersect(Me.moveKomaInfo.InvalidRect, Me.ClientRectangle)
+                    If rectangle2.Width > 0 AndAlso rectangle2.Height > 0 Then
+                        Me.moveKomaInfo.IsMovingInvalidate = True
+                        Me.Invalidate(Me.moveKomaInfo.InvalidRect)
+                    End If
+                End If
+            End If
+        End Sub
+
+
+
+
+        Private Sub BoardViewer_MouseUp(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
+            Dim te As Te = GetTeWithMouseUp(e.Location)
+            Me.moveKomaInfo = New MoveKomaInfo
+            If te Is Nothing Then
+                DrawCurrentBitmap()
+                Exit Sub
+            End If
+            Dim editingeventArgs As New EditingEventArgs
+            editingeventArgs.MovingValue = te
+            If te.MustPromote Then
+                te.Promote = True
+            End If
+            RaiseEvent Editing(sender, editingeventArgs)
+
+            If editingeventArgs.Cancel Then
+                DrawCurrentBitmap()
+                Exit Sub
+            End If
+
+            kyokumen = New Kyokumen(Me.kyokumen)
+            If editingeventArgs.IsMove Then
+                kyokumen.Move(te)
+            Else
+                kyokumen.Edit(te)
+            End If
+
+            DrawCurrentBitmap()
+
+            Dim editedEventArgs As New EditedEventArgs
+            editedEventArgs.MovingValue = te
+            RaiseEvent Edited(sender, editedEventArgs)
+
+        End Sub
+
+        Private Sub BoardViewer_MouseDown(sender As System.Object, e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
+            If e.Button = MouseButtons.Left Then
+                MakeMovingKomaInfo(e.Location)
+            ElseIf e.Button = Windows.Forms.MouseButtons.Right Then
+                MouseRightClick(sender, e)
+            End If
+ 
+        End Sub
+
+        Private Sub MouseRightClick(sender As System.Object, e As System.Windows.Forms.MouseEventArgs)
+            If boardRect.Contains(e.Location) Then
+                Dim l As KomaLocation = GetKomaPosition(e.Location)
+                Dim koma As Koma = kyokumen.GetMasu(l)
+                Dim toggleKoma As Koma = New Koma(koma.Value)
+                toggleKoma.Toggle()
+
+                Dim te As Te = New Te(l, l, toggleKoma.Value, toggleKoma.IsPromoted)
+                If te.MustPromote Then
+                    te.Piece.Toggle()
+                    te.Promote = te.Piece.IsPromoted
+                End If
+
+                Dim eventArgs As New EditingEventArgs
+                eventArgs.MovingValue = te
+                If te.MustPromote Then
+                    te.Promote = True
+                End If
+                eventArgs.MouseRightClicked = True
+                RaiseEvent Editing(sender, eventArgs)
+
+                If eventArgs.Cancel Then
+                    Exit Sub
+                End If
+
+                kyokumen = New Kyokumen(Me.kyokumen)
+                kyokumen.Edit(te)
+                DrawCurrentBitmap()
+
+            End If
+        End Sub
+
+        Private Sub MakeMovingKomaInfo(p As Point)
+            Dim koma As Koma = koma.Empty
+            Dim l As KomaLocation = Nothing
+
+            If Me.boardRect.Contains(p) Then
+                l = Me.GetKomaPosition(p)
+                koma = kyokumen.GetMasu(l)
+                Dim graphics As Graphics = graphics.FromImage(_currentBitmap)
+                Dim masuRect As Rectangle = Me.GetMasuRect(l.Col, l.Row)
+                graphics.DrawImage(_baseBitmap, masuRect, masuRect, GraphicsUnit.Pixel)
+                If Not koma.IsEmpty Then
+                    Dim image As Bitmap = imageLoader.GetKomaImage(koma.Value)
+                    graphics.DrawImage(image, masuRect)
+                    graphics.Dispose()
+                    Me.Invalidate(masuRect)
+                End If
+            ElseIf Me.senteKomadaiRect.Contains(p) Then
+                l = ShogiNextMove.Board.KomaLocation.Mochigoma
+                koma = New Koma(GetSenteKomadaiKomaValue(p))
+                If koma.IsEmpty Then
+                    Exit Sub
+                End If
+                If _kyokumen.SenteHand(koma.CapturedKomaKind) <= 0 Then
+                    Exit Sub
+                End If
+            ElseIf Me.goteKomadaiRect.Contains(p) Then
+                l = ShogiNextMove.Board.KomaLocation.Mochigoma
+                koma = New Koma(GetGoteKomadaiKomaValue(p))
+                If koma.IsEmpty Then
+                    Exit Sub
+                End If
+                If _kyokumen.GoteHand(koma.CapturedKomaKind) <= 0 Then
+                    Exit Sub
+                End If
+
+            ElseIf Me.KomabakoVisible AndAlso KomabakoRect.Contains(p) Then
+                l = KomaLocation.KomaBako
+                koma = New Koma(GetKomabakoKomaValue(p))
+                If koma.IsEmpty Then
+                    Exit Sub
+                End If
+                If kyokumen.KomabakoCounts(koma.Value) <= 0 Then
+                    Exit Sub
+                End If
+
+            End If
+
+            If l IsNot Nothing AndAlso Not koma.IsEmpty Then
+                Me.moveKomaInfo.MovingKoma = koma.Value
+                If l.IsKomaBako AndAlso koma.Value = koma.C_OU Then
+                    moveKomaInfo.MovingKoma = koma.GOTE_OU
+                End If
+                Me.moveKomaInfo.IsValidPosition = True
+                Me.moveKomaInfo.MovingKomaPrevRect = Me.MakeMovingBackBitmap(l, koma.Value)
+                Me.moveKomaInfo.From = l
+                Me.moveKomaInfo.MouseDownPt = p
+                Me.moveKomaInfo.IsMouseDown = True
+                Me._movingKomaBitmap = imageLoader.GetKomaImage(Me.moveKomaInfo.MovingKoma)
+            End If
+
+        End Sub
+
+        Public Function GetSenteKomadaiKomaValue(mousePt As Point) As Byte
+            Dim dan As Byte = 0
+            If Me.senteKomadaiRect.Left < mousePt.X AndAlso mousePt.X < Me.senteKomadaiRect.Left + Me.goteKomadaiRect.Width Then
+                If mousePt.Y > Me.senteKomadaiRect.Top Then
+                    dan = CByte(((mousePt.Y - senteKomadaiRect.Top) \ Me.komaSize.Height) + 1)
+                    Debug.Assert(1 <= dan AndAlso dan <= 7)
+                End If
+            End If
+            Return dan + Koma.SENTE
+        End Function
+
+        Public Function GetGoteKomadaiKomaValue(mousePt As Point) As Byte
+            Dim dan As Byte = 0
+            If Me.goteKomadaiRect.Left < mousePt.X AndAlso mousePt.X < Me.goteKomadaiRect.Left + Me.goteKomadaiRect.Width AndAlso mousePt.Y < Me.goteKomadaiRect.Bottom Then
+                dan = CByte((mousePt.Y - (Me.goteKomadaiRect.Top + 11)) \ Me.komaSize.Height + 1)
+                Debug.Assert(1 <= dan AndAlso dan <= 7)
+            End If
+            Return dan + Koma.GOTE
+        End Function
+
+        Public Function GetKomabakoKomaValue(mousePt As Point) As Byte
+            Dim col As Byte = 0
+            Debug.Assert(KomabakoRect.Contains(mousePt))
+            col = CByte((mousePt.X - KomabakoRect.Left) \ komaSize.Width + 1)
+            Debug.Assert(0 <= col AndAlso col <= 9)
+            Return col
+        End Function
+
+        Private Sub BoardViewer_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
+            If Me.moveKomaInfo.IsMovingInvalidate Then
+                e.Graphics.DrawImage(Me._movingBackBitmap, Me.moveKomaInfo.InvalidRect, Me.moveKomaInfo.InvalidRect, GraphicsUnit.Pixel)
+                e.Graphics.DrawImage(Me._movingKomaBitmap, Me.moveKomaInfo.MovingKomaRect)
+                Me.moveKomaInfo.IsMovingInvalidate = False
+            Else
+                If _currentBitmap Is Nothing Then
+                    Initialize()
+                    kyokumen = New Kyokumen
+                    DrawCurrentBitmap()
+                    e.Graphics.DrawImage(_currentBitmap, 0, 0)
+                Else
+                    e.Graphics.DrawImage(_currentBitmap, 0, 0)
+                End If
+            End If
+        End Sub
+
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Control/Board/EditedEventArgs.vb
===================================================================
--- ShogiNextMove/Control/Board/EditedEventArgs.vb	                        (rev 0)
+++ ShogiNextMove/Control/Board/EditedEventArgs.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,9 @@
+Namespace Control.Board
+
+    Public Class EditedEventArgs
+
+        Public Property MovingValue As ShogiNextMove.Board.Te
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Control/Board/EditingEventArgs.vb
===================================================================
--- ShogiNextMove/Control/Board/EditingEventArgs.vb	                        (rev 0)
+++ ShogiNextMove/Control/Board/EditingEventArgs.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,14 @@
+Namespace Control.Board
+
+    Public Class EditingEventArgs
+        Inherits System.ComponentModel.CancelEventArgs
+
+        Public Property MovingValue As ShogiNextMove.Board.Te
+
+        Public Property MouseRightClicked As Boolean = False
+
+        Public Property IsMove As Boolean = False
+
+    End Class
+
+End Namespace

Added: ShogiNextMove/Control/Board/ImageLoader.vb
===================================================================
--- ShogiNextMove/Control/Board/ImageLoader.vb	                        (rev 0)
+++ ShogiNextMove/Control/Board/ImageLoader.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,107 @@
+Imports System.Reflection
+Imports ShogiNextMove.Board
+
+Public Class ImageLoader
+
+    Public Shared _instance As New ImageLoader
+    Public Shared Function GetInstance() As ImageLoader
+        Return _instance
+    End Function
+
+    Private Sub New()
+    End Sub
+
+    Private _komaBitmap(40) As Bitmap
+
+    Private _boardBitmap As Bitmap
+    Public ReadOnly Property BoardBitmap() As Bitmap
+        Get
+            Return _boardBitmap
+        End Get
+    End Property
+
+    Private _masuBitmap As Bitmap
+    Public ReadOnly Property MasuBitmap() As Bitmap
+        Get
+            If _isBoardViewRotated Then
+                Return _rotatedMasuBitmap
+            End If
+            Return _masuBitmap
+        End Get
+    End Property
+
+    Private _rotatedMasuBitmap As Bitmap
+
+    Private _isBoardViewRotated As Boolean
+
+
+    Private _highLightBitmap As Bitmap
+    Public ReadOnly Property HighLightBitmap As Bitmap
+        Get
+            Return _highLightBitmap
+        End Get
+    End Property
+
+    Private Sub GetResourcesFromExecutingAssembly()
+        Dim executingAssembly As Assembly = Assembly.GetExecutingAssembly()
+
+        _boardBitmap = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.ban.png"))
+        _masuBitmap = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.masu.png"))
+        _rotatedMasuBitmap = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.rotatedMasu.png"))
+
+        _highLightBitmap = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.highlightRed.png"))
+
+        _komaBitmap(Koma.SENTE_FU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteFu.png"))
+        _komaBitmap(Koma.SENTE_KYO) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteKyo.png"))
+        _komaBitmap(Koma.SENTE_KEI) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteKei.png"))
+        _komaBitmap(Koma.SENTE_GIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteGin.png"))
+        _komaBitmap(Koma.SENTE_KIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteKin.png"))
+        _komaBitmap(Koma.SENTE_KAKU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteKaku.png"))
+        _komaBitmap(Koma.SENTE_HISYA) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteHisha.png"))
+        _komaBitmap(Koma.SENTE_TOKIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteTo.png"))
+        _komaBitmap(Koma.SENTE_NARI_KYO) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteNKyo.png"))
+        _komaBitmap(Koma.SENTE_NARI_KEI) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteNKei.png"))
+        _komaBitmap(Koma.SENTE_NARI_GIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteNGin.png"))
+        _komaBitmap(Koma.SENTE_OU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteOu.png"))
+        _komaBitmap(Koma.SENTE_UMA) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteUma.png"))
+        _komaBitmap(Koma.SENTE_RYU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteRyu.png"))
+        _komaBitmap(Koma.SENTE_GYOKU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.senteGyoku.png"))
+        _komaBitmap(Koma.GOTE_FU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteFu.png"))
+        _komaBitmap(Koma.GOTE_KYO) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteKyo.png"))
+        _komaBitmap(Koma.GOTE_KEI) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteKei.png"))
+        _komaBitmap(Koma.GOTE_GIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteGin.png"))
+        _komaBitmap(Koma.GOTE_KIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteKin.png"))
+        _komaBitmap(Koma.GOTE_KAKU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteKaku.png"))
+        _komaBitmap(Koma.GOTE_HISYA) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteHisha.png"))
+        _komaBitmap(Koma.GOTE_TOKIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteTo.png"))
+        _komaBitmap(Koma.GOTE_NARI_KYO) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteNKyo.png"))
+        _komaBitmap(Koma.GOTE_NARI_KEI) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteNKei.png"))
+        _komaBitmap(Koma.GOTE_NARI_GIN) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteNGin.png"))
+        _komaBitmap(Koma.GOTE_GYOKU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteGyoku.png"))
+        _komaBitmap(Koma.GOTE_UMA) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteUma.png"))
+        _komaBitmap(Koma.GOTE_RYU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteRyu.png"))
+        _komaBitmap(Koma.GOTE_OU) = New Bitmap(executingAssembly.GetManifestResourceStream("ShogiNextMove.images.goteOu.png"))
+
+
+    End Sub
+
+    Public Sub Load()
+        GetResourcesFromExecutingAssembly()
+    End Sub
+
+    Public Sub SetBoardBiewRotated(ByVal isBoardViewRotated As Boolean)
+        Me._isBoardViewRotated = isBoardViewRotated
+    End Sub
+
+    Public Function GetKomaImage(koma As Byte) As Bitmap
+        Dim image As Bitmap = _komaBitmap(koma)
+        If Me._isBoardViewRotated Then
+            koma = Board.KomaUtil.OppositeKoma(koma)
+            image = _komaBitmap(koma)
+        End If
+        Return image
+    End Function
+
+
+
+End Class

Added: ShogiNextMove/Image/Default/images.ban.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.ban.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteFu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteFu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteGin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteGin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteGyoku.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteGyoku.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteHisha.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteHisha.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteKaku.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteKaku.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteKei.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteKei.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteKin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteKin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteKyo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteKyo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteNGin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteNGin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteNKei.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteNKei.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteNKyo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteNKyo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteOu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteOu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteRyu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteRyu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteTo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteTo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.goteUma.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.goteUma.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.highlightRed.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.highlightRed.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.masu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.masu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.rotatedMasu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.rotatedMasu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteFu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteFu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteGin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteGin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteGyoku.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteGyoku.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteHisha.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteHisha.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteKaku.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteKaku.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteKei.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteKei.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteKin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteKin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteKyo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteKyo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteNGin.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteNGin.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteNKei.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteNKei.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteNKyo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteNKyo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteOu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteOu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteRyu.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteRyu.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteTo.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteTo.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/Image/Default/images.senteUma.png
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/Image/Default/images.senteUma.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/KifuData/20140819.csa
===================================================================
--- ShogiNextMove/KifuData/20140819.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/20140819.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,18 @@
+' ----  Kifu for Windows V6.62 CSA\x8C`\x8E\xAE\x8A\xFB\x95\x88\x83t\x83@\x83C\x83\x8B  ----
+V2.2
+$START_TIME:2014/08/19 20:33:10
+$END_TIME:2014/08/19 20:33:18
+P1 *  *  *  *  *  * -GI-KE-KY
+P2 *  *  *  *  *  * -KI-KA * 
+P3 *  *  *  *  *  * -FU * -FU
+P4 *  *  *  *  *  *  *  *  * 
+P5 *  *  *  *  *  *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7 *  *  *  *  *  *  *  *  * 
+P8 *  *  *  *  *  *  * +HI * 
+P9 *  *  *  *  *  *  *  *  * 
+P+00FU
+P-00HI00KA00KI00KI00KI00GI00GI00GI00KE00KE00KE00KY00KY00KY00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU
++
++0024FU,T2
+%TORYO,T6

Added: ShogiNextMove/KifuData/20140826.csa
===================================================================
--- ShogiNextMove/KifuData/20140826.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/20140826.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,19 @@
+' ----  Kifu for Windows V6.62 CSA\x8C`\x8E\xAE\x8A\xFB\x95\x88\x83t\x83@\x83C\x83\x8B  ----
+V2.2
+$START_TIME:2014/08/26 14:10:08
+$END_TIME:2014/08/26 14:10:34
+P1 *  *  *  *  *  *  * -KE-KY
+P2 *  *  *  *  * -GI-KI-KA * 
+P3 *  *  *  *  *  * -FU * -FU
+P4 *  *  *  *  *  *  *  *  * 
+P5 *  *  *  *  *  *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7 *  *  *  *  *  * +FU * +FU
+P8 *  *  *  *  *  *  * +HI * 
+P9 *  *  *  *  *  *  * +KE+KY
+P+00FU
++
++0024FU,T4
+-2231KA,T16
++2423TO,T2
+%TORYO,T4

Added: ShogiNextMove/KifuData/20140905.csa
===================================================================
--- ShogiNextMove/KifuData/20140905.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/20140905.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,19 @@
+' ----  Kifu for Windows V6.62 CSA\x8C`\x8E\xAE\x8A\xFB\x95\x88\x83t\x83@\x83C\x83\x8B  ----
+V2.2
+$START_TIME:2014/09/05 13:17:57
+$END_TIME:2014/09/05 13:18:07
+P1 *  *  *  *  *  *  * -KE-KY
+P2 *  *  *  *  * -KA-KI-OU * 
+P3 *  *  *  *  * -KI-GI-FU-FU
+P4 *  *  *  *  * -FU *  *  * 
+P5 *  *  *  *  *  *  * +FU * 
+P6 *  *  *  *  * +FU+GI *  * 
+P7 *  *  *  *  *  *  *  * +FU
+P8 *  *  *  *  *  *  * +HI * 
+P9 *  *  *  *  *  *  * +KE+KY
+P+00FU00FU
++
++0034FU,T2
+-3334GI,T2
++0035FU,T1
+%TORYO,T5

Added: ShogiNextMove/KifuData/3.csa
===================================================================
--- ShogiNextMove/KifuData/3.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/3.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,23 @@
+' ----  Kifu for Windows V6.62 CSA\x8C`\x8E\xAE\x8A\xFB\x95\x88\x83t\x83@\x83C\x83\x8B  ----
+V2.2
+$START_TIME:2014/08/26 14:10:08
+$END_TIME:2014/08/26 17:01:28
+P1 *  *  *  *  *  *  * -KE-KY
+P2 *  *  *  *  * -GI-OU-KA * 
+P3 *  *  *  *  * -FU-FU-FU-FU
+P4 *  *  *  *  *  *  *  *  * 
+P5 *  *  *  *  *  *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7 *  *  *  *  *  * +FU * +FU
+P8 *  *  *  *  *  *  * +HI * 
+P9 *  *  *  *  *  *  * +KE+KY
+P+00FU00FU00FU
++
++0024FU,T1
+-2324FU,T2
++0025FU,T1
+-2425FU,T1
++0024FU,T1
+-3334FU,T13
++2825HI,T1
+%TORYO,T1

Added: ShogiNextMove/KifuData/Debug.csa
===================================================================
--- ShogiNextMove/KifuData/Debug.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/Debug.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,15 @@
+V2.2
+N+
+N-
+P1 *  *  *  *  *  *  *  *  * 
+P2 *  *  *  * -HI *  *  *  * 
+P3 *  *  *  *  *  *  *  *  * 
+P4 *  *  *  *  *  *  *  *  * 
+P5 *  *  *  * -KA *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7 *  *  *  *  *  *  *  *  * 
+P8 *  *  *  *  *  *  *  *  * 
+P9 *  *  *  *  *  *  *  *  * 
+P+00KY
++
++0059KY,T0

Added: ShogiNextMove/KifuData/kei11.csa
===================================================================
--- ShogiNextMove/KifuData/kei11.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/kei11.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,15 @@
+V2.2
+N+
+N-
+P1 *  *  *  *  *  * -OU-KE-KY
+P2 *  *  *  *  *  * -KI *  * 
+P3 *  *  *  *  * +TO * -FU-FU
+P4 *  *  *  *  * -FU-FU *  * 
+P5 *  *  *  *  *  *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7 *  *  *  *  *  *  *  *  * 
+P8 *  *  *  *  *  *  * +HI * 
+P9 *  *  *  *  *  *  *  *  * 
+P+00KI00GI00KE
++
++0024KE,T0

Added: ShogiNextMove/KifuData/yoshi55_wata-Superboy2-20140827_114157.csa
===================================================================
--- ShogiNextMove/KifuData/yoshi55_wata-Superboy2-20140827_114157.csa	                        (rev 0)
+++ ShogiNextMove/KifuData/yoshi55_wata-Superboy2-20140827_114157.csa	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,266 @@
+' ------ CSA \x8C`\x8E\xAE\x8A\xFB\x95\x88\x83t\x83@\x83C\x83\x8B
+' ----------- created by \x8C\x83\x8Ew
+N+yoshi55_wata
+N-Superboy2
+' ---------------------- \x94Ֆ\xCA
+' -9--8--7--6--5--4--3--2--1-
+P1-KY-KE-GI-KI-OU-KI-GI-KE-KY
+P2 * -HI *  *  *  *  * -KA * 
+P3-FU-FU-FU-FU-FU-FU-FU-FU-FU
+P4 *  *  *  *  *  *  *  *  * 
+P5 *  *  *  *  *  *  *  *  * 
+P6 *  *  *  *  *  *  *  *  * 
+P7+FU+FU+FU+FU+FU+FU+FU+FU+FU
+P8 * +KA *  *  *  *  * +HI * 
+P9+KY+KE+GI+KI+OU+KI+GI+KE+KY
+' -------------------- \x8E\x9D\x82\xBF\x8B\xEE
+' ---------------------- \x8E\xE8\x94\xD4
++
+' ---------- \x8Ew\x82\xB5\x8E\xE8\x82ƍl\x97\xB6\x8E\x9E\x8A\xD4
+'<analyze>0</analyze>
++7776FU
+T0
+-3334FU
+T1
++2868HI
+T2
+-6152KI
+T2
++5948OU
+T1
+-7162GI
+T1
++4838OU
+T2
+-4142KI
+T2
++3828OU
+T1
+-5141OU
+T1
++8822UM
+T4
+-3122GI
+T2
++7988GI
+T2
+-3435FU
+T7
++8877GI
+T1
+-2233GI
+T5
++1918KY
+T2
+-1314FU
+T2
++2819OU
+T1
+-1415FU
+T1
++3928GI
+T1
+-3536FU
+T2
++3736FU
+T4
+-4131OU
+T9
++4939KI
+T5
+-5354FU
+T16
++6958KI
+T2
+-6253GI
+T1
++5848KI
+T1
+-9394FU
+T22
++9796FU
+T2
+-9495FU
+T3
++9695FU
+T1
+-9195KY
+T2
++9995KY
+T5
+-0093FU
+T6
++6888HI
+T8
+-5455FU
+T19
++8786FU
+T3
+-5556FU
+T2
++7766GI
+T25
+-5657TO
+T3
++6657GI
+T2
+-0099KA
+T11
++8898HI
+T3
+-9955UM
+T8
++9593NY
+T3
+-8193KE
+T2
++9893RY
+T2
+-7374FU
+T4
++0056KY
+T4
+-5573UM
+T10
++0065KE
+T3
+-7364UM
+T2
++6553NK
+T7
+-5253KI
+T4
++5653NY
+T18
+-4253KI
+T1
++0071KA
+T4
+-8252HI
+T5
++8977KE
+T33
+-1516FU
+T16
++1716FU
+T4
+-0017FU
+T7
++1817KY
+T2
+-0025KE
+T4
++0026GI
+T3
+-1116KY
+T8
++1716KY
+T7
+-0018FU
+T5
++1918OU
+T3
+-0017KY
+T3
++2617GI
+T6
+-2517NK
+T2
++1817OU
+T6
+-0013KY
+T10
++0015FU
+T5
+-3324GI
+T4
++0026KY
+T5
+-1315KY
+T11
++1615KY
+T3
+-0016FU
+T1
++1716OU
+T10
+-2415GI
+T4
++1615OU
+T4
+-0014KY
+T9
++1514OU
+T8
+-5212HI
+T3
++1425OU
+T8
+-2133KE
+T6
++2534OU
+T9
+-5344KI
+T14
++3433OU
+T4
+-6442UM
+T1
++3323OU
+T3
+-1222HI
+T10
++2314OU
+T36
+-2212HI
+T4
++0013FU
+T19
+-4232UM
+T1
++0023KE
+T4
+-3122OU
+T3
++1312TO
+T18
+-2233OU
+T5
++0024KI
+T14
+-3342OU
+T3
++0033GI
+T6
+-3233UM
+T0
++9382RY
+T0
+-0052GI
+T0
++2433KI
+T0
+-4233OU
+T0
++0024KA
+T0
+-3334OU
+T0
++0046KE
+T0
+-3445OU
+T0
++0035HI
+T0
+-4435KI
+T0
++7135UM
+T0
+-4555OU
+T0
++0056KI
+T0
+-5564OU
+T0
++5665KI
+T0

Added: ShogiNextMove/KifuDataDirectoryReader.vb
===================================================================
--- ShogiNextMove/KifuDataDirectoryReader.vb	                        (rev 0)
+++ ShogiNextMove/KifuDataDirectoryReader.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,89 @@
+Public Class KifuDataDirectoryReader
+
+    Private kifu As New Board.Kifu.Kifu
+
+    Public ReadOnly Property CurrentKyokumen As Board.Kyokumen
+        Get
+            Return kifu.KyokumenList(_kifuIndex)
+        End Get
+    End Property
+
+    Public ReadOnly Property Moving As Board.Te
+        Get
+            Return kifu.MoveList(_kifuIndex)
+        End Get
+    End Property
+
+    Public ReadOnly Property hasMove As Boolean
+        Get
+            Return _kifuIndex < kifu.MoveList.Count
+        End Get
+    End Property
+
+    Private _dirname As String
+    Public ReadOnly Property dirName As String
+        Get
+            Return _dirname & "\KifuData\"
+        End Get
+    End Property
+
+    Public ReadOnly Property Count As Integer
+        Get
+            Return _file.Count
+        End Get
+    End Property
+
+
+    Public Sub New()
+
+        Dim exeName As String = System.Reflection.Assembly.GetEntryAssembly().Location
+        _dirname = System.IO.Path.GetDirectoryName(exeName)
+        _file = System.IO.Directory.GetFiles(dirName, "*.csa", System.IO.SearchOption.TopDirectoryOnly)
+        _fileIndex = 0
+
+    End Sub
+
+    Public Sub Write(ByVal kifu As Board.Kifu.Kifu, filename As String)
+        Dim writer As New Board.Kifu.CSAKifuWriter
+        Dim kifStr As String = writer.MakeKifuCSAString(kifu)
+        Using sw As New System.IO.StreamWriter(filename, False, System.Text.Encoding.GetEncoding("shift_jis"))
+            sw.Write(kifStr)
+        End Using
+    End Sub
+
+    Dim _file As String()
+    Dim _fileIndex As Integer
+    Dim _kifuIndex As Integer
+
+    Public Sub readNextFile()
+        Debug.Assert(_fileIndex < _file.Length)
+        Using sr As New System.IO.StreamReader(_file(_fileIndex), _
+            System.Text.Encoding.GetEncoding("shift_jis"))
+            Dim kifuStr As String = sr.ReadToEnd()
+            kifu = (New Board.Kifu.CSAKifuReader).ReadCSAString(kifuStr)
+        End Using
+        _fileIndex += 1
+        _kifuIndex = 0
+    End Sub
+
+    Public Function hasNextFile() As Boolean
+        If _fileIndex < _file.Length Then
+            Return True
+        End If
+        Return False
+    End Function
+
+    Public Function hasNextKyokumen() As Boolean
+        If _kifuIndex < kifu.KyokumenList.Count - 1 Then
+            Return True
+        End If
+        Return False
+    End Function
+
+    Public Function NextKyokumen() As Board.Kyokumen
+        _kifuIndex += 1
+        Return CurrentKyokumen
+    End Function
+
+
+End Class

Added: ShogiNextMove/MoveKomaInfo.vb
===================================================================
--- ShogiNextMove/MoveKomaInfo.vb	                        (rev 0)
+++ ShogiNextMove/MoveKomaInfo.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,40 @@
+Imports System
+Imports System.Drawing
+Imports ShogiNextMove.Board
+
+Namespace Control.Board
+
+    Public Class MoveKomaInfo
+        Public Property IsNowMove() As Boolean
+
+        Public Property IsNowDrag() As Boolean
+
+        Public Property IsMouseDown() As Boolean
+
+        Public Property IsValidPosition() As Boolean
+
+        Public Property IsMovingInvalidate() As Boolean
+
+        Public Property MouseDownPt() As Point
+
+        Public Property From As KomaLocation
+
+        Public Property MovingKoma() As Byte
+
+        Public Property MovingKomaPrevRect() As Rectangle
+
+        Public Property MovingKomaRect() As Rectangle
+
+        Public Property InvalidRect() As Rectangle
+
+        Public Sub New()
+            Me.IsNowMove = False
+            Me.IsNowDrag = False
+            Me.IsMouseDown = False
+            Me.IsValidPosition = False
+            Me.IsMovingInvalidate = False
+        End Sub
+    End Class
+
+
+End Namespace
\ No newline at end of file

Added: ShogiNextMove/My Project/Application.Designer.vb
===================================================================
--- ShogiNextMove/My Project/Application.Designer.vb	                        (rev 0)
+++ ShogiNextMove/My Project/Application.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,38 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.18444
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+    
+    'NOTE: This file is auto-generated; do not modify it directly.  To make changes,
+    ' or if you encounter build errors in this file, go to the Project Designer
+    ' (go to Project Properties or double-click the My Project node in
+    ' Solution Explorer), and make changes on the Application tab.
+    '
+    Partial Friend Class MyApplication
+        
+        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _
+        Public Sub New()
+            MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows)
+            Me.IsSingleInstance = false
+            Me.EnableVisualStyles = true
+            Me.SaveMySettingsOnExit = true
+            Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses
+        End Sub
+        
+        <Global.System.Diagnostics.DebuggerStepThroughAttribute()>  _
+        Protected Overrides Sub OnCreateMainForm()
+            Me.MainForm = Global.ShogiNextMove.frmMain
+        End Sub
+    End Class
+End Namespace

Added: ShogiNextMove/My Project/Application.myapp
===================================================================
--- ShogiNextMove/My Project/Application.myapp	                        (rev 0)
+++ ShogiNextMove/My Project/Application.myapp	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-16"?>
+<MyApplicationData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+  <MySubMain>true</MySubMain>
+  <MainForm>frmMain</MainForm>
+  <SingleInstance>false</SingleInstance>
+  <ShutdownMode>0</ShutdownMode>
+  <EnableVisualStyles>true</EnableVisualStyles>
+  <AuthenticationMode>0</AuthenticationMode>
+  <SaveMySettingsOnExit>true</SaveMySettingsOnExit>
+</MyApplicationData>
\ No newline at end of file

Added: ShogiNextMove/My Project/AssemblyInfo.vb
===================================================================
--- ShogiNextMove/My Project/AssemblyInfo.vb	                        (rev 0)
+++ ShogiNextMove/My Project/AssemblyInfo.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,35 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 
+' アセンブリに関連付けられている情報を変更するには、
+' これらの属性値を変更してください。
+
+' アセンブリ属性の値を確認します。
+
+<Assembly: AssemblyTitle("ShogiNextMove")> 
+<Assembly: AssemblyDescription("")> 
+<Assembly: AssemblyCompany("")> 
+<Assembly: AssemblyProduct("ShogiNextMove")> 
+<Assembly: AssemblyCopyright("Copyright ©  2014")> 
+<Assembly: AssemblyTrademark("")> 
+
+<Assembly: ComVisible(False)>
+
+'このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります。
+<Assembly: Guid("546ee489-2552-4e7c-be4f-587e8bb27da7")> 
+
+' アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
+'
+'      Major Version
+'      Minor Version 
+'      Build Number
+'      Revision
+'
+' すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
+' 既定値にすることができます:
+' <Assembly: AssemblyVersion("1.0.*")> 
+
+<Assembly: AssemblyVersion("1.0.0.0")> 
+<Assembly: AssemblyFileVersion("1.0.0.0")> 

Added: ShogiNextMove/My Project/Resources.Designer.vb
===================================================================
--- ShogiNextMove/My Project/Resources.Designer.vb	                        (rev 0)
+++ ShogiNextMove/My Project/Resources.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,62 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.18444
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My.Resources
+    
+    'This class was auto-generated by the StronglyTypedResourceBuilder
+    'class via a tool like ResGen or Visual Studio.
+    'To add or remove a member, edit your .ResX file then rerun ResGen
+    'with the /str option, or rebuild your VS project.
+    '''<summary>
+    '''  A strongly-typed resource class, for looking up localized strings, etc.
+    '''</summary>
+    <Global.System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0"), _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
+     Global.Microsoft.VisualBasic.HideModuleNameAttribute()> _
+    Friend Module Resources
+
+        Private resourceMan As Global.System.Resources.ResourceManager
+
+        Private resourceCulture As Global.System.Globalization.CultureInfo
+
+        '''<summary>
+        '''  Returns the cached ResourceManager instance used by this class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+            Get
+                If Object.ReferenceEquals(resourceMan, Nothing) Then
+                    Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ShogiNextMove.Resources", GetType(Resources).Assembly)
+                    resourceMan = temp
+                End If
+                Return resourceMan
+            End Get
+        End Property
+
+        '''<summary>
+        '''  Overrides the current thread's CurrentUICulture property for all
+        '''  resource lookups using this strongly typed resource class.
+        '''</summary>
+        <Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Friend Property Culture() As Global.System.Globalization.CultureInfo
+            Get
+                Return resourceCulture
+            End Get
+            Set(ByVal value As Global.System.Globalization.CultureInfo)
+                resourceCulture = value
+            End Set
+        End Property
+    End Module
+End Namespace

Added: ShogiNextMove/My Project/Resources.resx
===================================================================
--- ShogiNextMove/My Project/Resources.resx	                        (rev 0)
+++ ShogiNextMove/My Project/Resources.resx	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: ShogiNextMove/My Project/Settings.Designer.vb
===================================================================
--- ShogiNextMove/My Project/Settings.Designer.vb	                        (rev 0)
+++ ShogiNextMove/My Project/Settings.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+' <auto-generated>
+'     This code was generated by a tool.
+'     Runtime Version:4.0.30319.18444
+'
+'     Changes to this file may cause incorrect behavior and will be lost if
+'     the code is regenerated.
+' </auto-generated>
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+    <Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute(), _
+     Global.System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0"), _
+     Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+    Partial Friend NotInheritable Class MySettings
+        Inherits Global.System.Configuration.ApplicationSettingsBase
+
+        Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+        Private Shared addedHandler As Boolean
+
+        Private Shared addedHandlerLockObject As New Object
+
+        <Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), Global.System.ComponentModel.EditorBrowsableAttribute(Global.System.ComponentModel.EditorBrowsableState.Advanced)> _
+        Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+            If My.Application.SaveMySettingsOnExit Then
+                My.Settings.Save()
+            End If
+        End Sub
+#End If
+#End Region
+
+        Public Shared ReadOnly Property [Default]() As MySettings
+            Get
+
+#If _MyType = "WindowsForms" Then
+                   If Not addedHandler Then
+                        SyncLock addedHandlerLockObject
+                            If Not addedHandler Then
+                                AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+                                addedHandler = True
+                            End If
+                        End SyncLock
+                    End If
+#End If
+                Return defaultInstance
+            End Get
+        End Property
+    End Class
+End Namespace
+
+Namespace My
+    
+    <Global.Microsoft.VisualBasic.HideModuleNameAttribute(),  _
+     Global.System.Diagnostics.DebuggerNonUserCodeAttribute(),  _
+     Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()>  _
+    Friend Module MySettingsProperty
+        
+        <Global.System.ComponentModel.Design.HelpKeywordAttribute("My.Settings")>  _
+        Friend ReadOnly Property Settings() As Global.ShogiNextMove.My.MySettings
+            Get
+                Return Global.ShogiNextMove.My.MySettings.Default
+            End Get
+        End Property
+    End Module
+End Namespace

Added: ShogiNextMove/My Project/Settings.settings
===================================================================
--- ShogiNextMove/My Project/Settings.settings	                        (rev 0)
+++ ShogiNextMove/My Project/Settings.settings	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" UseMySettingsClassName="true">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

Added: ShogiNextMove/ShogiNextMove.vbproj
===================================================================
--- ShogiNextMove/ShogiNextMove.vbproj	                        (rev 0)
+++ ShogiNextMove/ShogiNextMove.vbproj	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,349 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{96DB0781-3A38-48B7-92D3-E8743D6A9162}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <StartupObject>ShogiNextMove.My.MyApplication</StartupObject>
+    <RootNamespace>ShogiNextMove</RootNamespace>
+    <AssemblyName>ShogiNextMove</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <MyType>WindowsForms</MyType>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+    <PublishUrl>publish\</PublishUrl>
+    <Install>true</Install>
+    <InstallFrom>Disk</InstallFrom>
+    <UpdateEnabled>false</UpdateEnabled>
+    <UpdateMode>Foreground</UpdateMode>
+    <UpdateInterval>7</UpdateInterval>
+    <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+    <UpdatePeriodically>false</UpdatePeriodically>
+    <UpdateRequired>false</UpdateRequired>
+    <MapFileExtensions>true</MapFileExtensions>
+    <ApplicationRevision>0</ApplicationRevision>
+    <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+    <IsWebBootstrapper>false</IsWebBootstrapper>
+    <UseApplicationTrust>false</UseApplicationTrust>
+    <BootstrapperEnabled>true</BootstrapperEnabled>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <DefineDebug>true</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DocumentationFile>ShogiNextMove.xml</DocumentationFile>
+    <NoWarn>
+    </NoWarn>
+    <WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+    <PlatformTarget>x86</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <DefineDebug>false</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DocumentationFile>ShogiNextMove.xml</DocumentationFile>
+    <NoWarn>
+    </NoWarn>
+    <WarningsAsErrors>41999,42016,42017,42018,42019,42020,42021,42022,42032,42036</WarningsAsErrors>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionExplicit>On</OptionExplicit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionCompare>Binary</OptionCompare>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionStrict>On</OptionStrict>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionInfer>On</OptionInfer>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+  </ItemGroup>
+  <ItemGroup>
+    <Import Include="Microsoft.VisualBasic" />
+    <Import Include="System" />
+    <Import Include="System.Collections" />
+    <Import Include="System.Collections.Generic" />
+    <Import Include="System.Data" />
+    <Import Include="System.Drawing" />
+    <Import Include="System.Diagnostics" />
+    <Import Include="System.Windows.Forms" />
+    <Import Include="System.Linq" />
+    <Import Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Board\Haichi\Kakuochi.vb" />
+    <Compile Include="Board\Kifu\CommonKifuUtil.vb" />
+    <Compile Include="Board\Kifu\CSAKifuWriter.vb" />
+    <Compile Include="Board\Kifu\KifKifuUtil.vb" />
+    <Compile Include="Board\Kifu\KifuUtilBase.vb" />
+    <Compile Include="Board\Kifu\Teaiwari.vb" />
+    <Compile Include="Board\Koma.vb" />
+    <Compile Include="Board\KomaMoveDirection.vb" />
+    <Compile Include="Board\KomaMoveValidater.vb" />
+    <Compile Include="Board\KyokumenUtil.vb" />
+    <Compile Include="Control\Board\BoardViewer.Designer.vb">
+      <DependentUpon>BoardViewer.vb</DependentUpon>
+    </Compile>
+    <Compile Include="Control\Board\BoardViewer.vb">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="Board\Haichi\Hirate.vb" />
+    <Compile Include="Board\Haichi\Hisyaochi.vb" />
+    <Compile Include="Board\Haichi\KomaOchi.vb" />
+    <Compile Include="Board\Haichi\Kyoochi.vb" />
+    <Compile Include="Board\Haichi\Nimaiochi.vb" />
+    <Compile Include="Board\Haichi\Hikyoochi.vb" />
+    <Compile Include="Board\Haichi\Tsume.vb" />
+    <Compile Include="Board\Haichi\Yonmaiochi.vb" />
+    <Compile Include="Board\Haichi\Rokumaiochi.vb" />
+    <Compile Include="Board\Haichi\Hachimaiochi.vb" />
+    <Compile Include="Board\Haichi\Jumaiochi.vb" />
+    <Compile Include="Board\Kifu\CSAKifuReader.vb" />
+    <Compile Include="Board\Kifu\Kifu.vb" />
+    <Compile Include="Board\Kifu\KifuType.vb" />
+    <Compile Include="Board\Kifu\CSAKifuUtil.vb" />
+    <Compile Include="Board\Location.vb" />
+    <Compile Include="Board\Kifu\MoveUtil.vb" />
+    <Compile Include="Board\KomaUtil.vb" />
+    <Compile Include="Board\Haichi\Haichi.vb" />
+    <Compile Include="Board\Kyokumen.vb" />
+    <Compile Include="Board\KyokumenHaichiComp.vb" />
+    <Compile Include="Board\NullMoveType.vb" />
+    <Compile Include="Board\Te.vb" />
+    <Compile Include="Control\Board\EditedEventArgs.vb" />
+    <Compile Include="Control\Board\EditingEventArgs.vb" />
+    <Compile Include="frmMain.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmMain.Designer.vb">
+      <DependentUpon>frmMain.vb</DependentUpon>
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="frmPromote.Designer.vb">
+      <DependentUpon>frmPromote.vb</DependentUpon>
+    </Compile>
+    <Compile Include="frmPromote.vb">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Control\Board\ImageLoader.vb" />
+    <Compile Include="KifuDataDirectoryReader.vb" />
+    <Compile Include="MoveKomaInfo.vb" />
+    <Compile Include="My Project\AssemblyInfo.vb" />
+    <Compile Include="My Project\Application.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Application.myapp</DependentUpon>
+    </Compile>
+    <Compile Include="My Project\Resources.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <Compile Include="My Project\Settings.Designer.vb">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Control\Board\BoardViewer.resx">
+      <DependentUpon>BoardViewer.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmMain.resx">
+      <DependentUpon>frmMain.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="frmPromote.resx">
+      <DependentUpon>frmPromote.vb</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="My Project\Resources.resx">
+      <Generator>VbMyResourcesResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.vb</LastGenOutput>
+      <CustomToolNamespace>My.Resources</CustomToolNamespace>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="KifuData\20140819.csa">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\20140826.csa">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\20140905.csa">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\3.csa">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\Debug.csa">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\kei11.csa">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="KifuData\yoshi55_wata-Superboy2-20140827_114157.csa">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="My Project\Application.myapp">
+      <Generator>MyApplicationCodeGenerator</Generator>
+      <LastGenOutput>Application.Designer.vb</LastGenOutput>
+    </None>
+    <None Include="My Project\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <CustomToolNamespace>My</CustomToolNamespace>
+      <LastGenOutput>Settings.Designer.vb</LastGenOutput>
+    </None>
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.ban.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteFu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteGin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteGyoku.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteHisha.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteKaku.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteKei.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteKin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteKyo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteNGin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteNKei.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteNKyo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteOu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteRyu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteTo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.goteUma.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.highlightRed.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.masu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.rotatedMasu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteFu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteGin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteGyoku.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteHisha.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteKaku.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteKei.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteKin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteKyo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteNGin.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteNKei.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteNKyo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteOu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteRyu.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteTo.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Image\Default\images.senteUma.png" />
+  </ItemGroup>
+  <ItemGroup />
+  <ItemGroup>
+    <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
+      <Visible>False</Visible>
+      <ProductName>Microsoft .NET Framework 4 Client Profile %28x86 および x64%29</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+      <Visible>False</Visible>
+      <ProductName>.NET Framework 3.5 SP1</ProductName>
+      <Install>false</Install>
+    </BootstrapperPackage>
+    <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+      <Visible>False</Visible>
+      <ProductName>Windows インストーラー 3.1</ProductName>
+      <Install>true</Install>
+    </BootstrapperPackage>
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: ShogiNextMove/ShogiNextMove.vbproj.user
===================================================================
--- ShogiNextMove/ShogiNextMove.vbproj.user	                        (rev 0)
+++ ShogiNextMove/ShogiNextMove.vbproj.user	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ShowAllFiles</ProjectView>
+    <PublishUrlHistory />
+    <InstallUrlHistory />
+    <SupportUrlHistory />
+    <UpdateUrlHistory />
+    <BootstrapperUrlHistory />
+    <ErrorReportUrlHistory />
+    <FallbackCulture>ja-JP</FallbackCulture>
+    <VerifyUploadedFiles>false</VerifyUploadedFiles>
+  </PropertyGroup>
+</Project>
\ No newline at end of file

Added: ShogiNextMove/frmMain.Designer.vb
===================================================================
--- ShogiNextMove/frmMain.Designer.vb	                        (rev 0)
+++ ShogiNextMove/frmMain.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,242 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class frmMain
+    Inherits System.Windows.Forms.Form
+
+    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Windows フォーム デザイナーで必要です。
+    Private components As System.ComponentModel.IContainer
+
+    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
+    'Windows フォーム デザイナーを使用して変更できます。  
+    'コード エディターを使って変更しないでください。
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Dim Kyokumen1 As ShogiNextMove.Board.Kyokumen = New ShogiNextMove.Board.Kyokumen()
+        Me.btnAnswer = New System.Windows.Forms.Button()
+        Me.btnNextQuestion = New System.Windows.Forms.Button()
+        Me.gbMode = New System.Windows.Forms.GroupBox()
+        Me.rbPlay = New System.Windows.Forms.RadioButton()
+        Me.rbEdit = New System.Windows.Forms.RadioButton()
+        Me.lblDecision = New System.Windows.Forms.Label()
+        Me.Label1 = New System.Windows.Forms.Label()
+        Me.gbEditMode = New System.Windows.Forms.GroupBox()
+        Me.rbNextMove = New System.Windows.Forms.RadioButton()
+        Me.rbFirstKyokumen = New System.Windows.Forms.RadioButton()
+        Me.KifuSavefileDaialog = New System.Windows.Forms.SaveFileDialog()
+        Me.MenuStrip1 = New System.Windows.Forms.MenuStrip()
+        Me.FirstKyokumenToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.HirateToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.TsumeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
+        Me.lblPoint = New System.Windows.Forms.Label()
+        Me.Viewer = New ShogiNextMove.Control.Board.BoardViewer()
+        Me.gbMode.SuspendLayout()
+        Me.gbEditMode.SuspendLayout()
+        Me.MenuStrip1.SuspendLayout()
+        CType(Me.Viewer, System.ComponentModel.ISupportInitialize).BeginInit()
+        Me.SuspendLayout()
+        '
+        'btnAnswer
+        '
+        Me.btnAnswer.Location = New System.Drawing.Point(642, 62)
+        Me.btnAnswer.Name = "btnAnswer"
+        Me.btnAnswer.Size = New System.Drawing.Size(75, 23)
+        Me.btnAnswer.TabIndex = 1
+        Me.btnAnswer.Text = "解答"
+        Me.btnAnswer.UseVisualStyleBackColor = True
+        '
+        'btnNextQuestion
+        '
+        Me.btnNextQuestion.Location = New System.Drawing.Point(642, 33)
+        Me.btnNextQuestion.Name = "btnNextQuestion"
+        Me.btnNextQuestion.Size = New System.Drawing.Size(75, 23)
+        Me.btnNextQuestion.TabIndex = 2
+        Me.btnNextQuestion.Text = "次の問題"
+        Me.btnNextQuestion.UseVisualStyleBackColor = True
+        '
+        'gbMode
+        '
+        Me.gbMode.Controls.Add(Me.rbPlay)
+        Me.gbMode.Controls.Add(Me.rbEdit)
+        Me.gbMode.Location = New System.Drawing.Point(620, 237)
+        Me.gbMode.Name = "gbMode"
+        Me.gbMode.Size = New System.Drawing.Size(73, 71)
+        Me.gbMode.TabIndex = 4
+        Me.gbMode.TabStop = False
+        Me.gbMode.Text = "解答モード"
+        '
+        'rbPlay
+        '
+        Me.rbPlay.AutoSize = True
+        Me.rbPlay.Checked = True
+        Me.rbPlay.Location = New System.Drawing.Point(6, 40)
+        Me.rbPlay.Name = "rbPlay"
+        Me.rbPlay.Size = New System.Drawing.Size(50, 16)
+        Me.rbPlay.TabIndex = 0
+        Me.rbPlay.TabStop = True
+        Me.rbPlay.Text = "プレイ"
+        Me.rbPlay.UseVisualStyleBackColor = True
+        '
+        'rbEdit
+        '
+        Me.rbEdit.AutoSize = True
+        Me.rbEdit.Location = New System.Drawing.Point(6, 18)
+        Me.rbEdit.Name = "rbEdit"
+        Me.rbEdit.Size = New System.Drawing.Size(47, 16)
+        Me.rbEdit.TabIndex = 0
+        Me.rbEdit.Text = "編集"
+        Me.rbEdit.UseVisualStyleBackColor = True
+        '
+        'lblDecision
+        '
+        Me.lblDecision.Location = New System.Drawing.Point(630, 130)
+        Me.lblDecision.Name = "lblDecision"
+        Me.lblDecision.Size = New System.Drawing.Size(100, 23)
+        Me.lblDecision.TabIndex = 5
+        '
+        'Label1
+        '
+        Me.Label1.Location = New System.Drawing.Point(630, 107)
+        Me.Label1.Name = "Label1"
+        Me.Label1.Size = New System.Drawing.Size(45, 23)
+        Me.Label1.TabIndex = 5
+        Me.Label1.Text = "判定"
+        '
+        'gbEditMode
+        '
+        Me.gbEditMode.Controls.Add(Me.rbNextMove)
+        Me.gbEditMode.Controls.Add(Me.rbFirstKyokumen)
+        Me.gbEditMode.Location = New System.Drawing.Point(620, 324)
+        Me.gbEditMode.Name = "gbEditMode"
+        Me.gbEditMode.Size = New System.Drawing.Size(111, 71)
+        Me.gbEditMode.TabIndex = 4
+        Me.gbEditMode.TabStop = False
+        Me.gbEditMode.Text = "編集モード"
+        '
+        'rbNextMove
+        '
+        Me.rbNextMove.AutoSize = True
+        Me.rbNextMove.Checked = True
+        Me.rbNextMove.Location = New System.Drawing.Point(6, 40)
+        Me.rbNextMove.Name = "rbNextMove"
+        Me.rbNextMove.Size = New System.Drawing.Size(93, 16)
+        Me.rbNextMove.TabIndex = 0
+        Me.rbNextMove.TabStop = True
+        Me.rbNextMove.Text = "次の一手入力"
+        Me.rbNextMove.UseVisualStyleBackColor = True
+        '
+        'rbFirstKyokumen
+        '
+        Me.rbFirstKyokumen.AutoSize = True
+        Me.rbFirstKyokumen.Location = New System.Drawing.Point(6, 18)
+        Me.rbFirstKyokumen.Name = "rbFirstKyokumen"
+        Me.rbFirstKyokumen.Size = New System.Drawing.Size(95, 16)
+        Me.rbFirstKyokumen.TabIndex = 0
+        Me.rbFirstKyokumen.Text = "初期画面編集"
+        Me.rbFirstKyokumen.UseVisualStyleBackColor = True
+        '
+        'MenuStrip1
+        '
+        Me.MenuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.FirstKyokumenToolStripMenuItem})
+        Me.MenuStrip1.Location = New System.Drawing.Point(0, 0)
+        Me.MenuStrip1.Name = "MenuStrip1"
+        Me.MenuStrip1.Size = New System.Drawing.Size(755, 26)
+        Me.MenuStrip1.TabIndex = 6
+        Me.MenuStrip1.Text = "MenuStrip1"
+        '
+        'FirstKyokumenToolStripMenuItem
+        '
+        Me.FirstKyokumenToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.HirateToolStripMenuItem, Me.TsumeToolStripMenuItem})
+        Me.FirstKyokumenToolStripMenuItem.Name = "FirstKyokumenToolStripMenuItem"
+        Me.FirstKyokumenToolStripMenuItem.Size = New System.Drawing.Size(68, 22)
+        Me.FirstKyokumenToolStripMenuItem.Text = "初期画面"
+        '
+        'HirateToolStripMenuItem
+        '
+        Me.HirateToolStripMenuItem.Name = "HirateToolStripMenuItem"
+        Me.HirateToolStripMenuItem.Size = New System.Drawing.Size(124, 22)
+        Me.HirateToolStripMenuItem.Text = "平手"
+        '
+        'TsumeToolStripMenuItem
+        '
+        Me.TsumeToolStripMenuItem.Name = "TsumeToolStripMenuItem"
+        Me.TsumeToolStripMenuItem.Size = New System.Drawing.Size(124, 22)
+        Me.TsumeToolStripMenuItem.Text = "詰め将棋"
+        '
+        'lblPoint
+        '
+        Me.lblPoint.Location = New System.Drawing.Point(624, 171)
+        Me.lblPoint.Name = "lblPoint"
+        Me.lblPoint.Size = New System.Drawing.Size(100, 23)
+        Me.lblPoint.TabIndex = 7
+        Me.lblPoint.Text = "得点:"
+        '
+        'Viewer
+        '
+        Me.Viewer.IsBoardViewRotated = False
+        Me.Viewer.KomabakoVisible = False
+        Kyokumen1.Comment = Nothing
+        Me.Viewer.kyokumen = Kyokumen1
+        Me.Viewer.Location = New System.Drawing.Point(0, 33)
+        Me.Viewer.Name = "Viewer"
+        Me.Viewer.Size = New System.Drawing.Size(585, 546)
+        Me.Viewer.TabIndex = 3
+        Me.Viewer.TabStop = False
+        '
+        'frmMain
+        '
+        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+        Me.ClientSize = New System.Drawing.Size(755, 589)
+        Me.Controls.Add(Me.lblPoint)
+        Me.Controls.Add(Me.Label1)
+        Me.Controls.Add(Me.lblDecision)
+        Me.Controls.Add(Me.gbEditMode)
+        Me.Controls.Add(Me.gbMode)
+        Me.Controls.Add(Me.Viewer)
+        Me.Controls.Add(Me.btnNextQuestion)
+        Me.Controls.Add(Me.btnAnswer)
+        Me.Controls.Add(Me.MenuStrip1)
+        Me.MainMenuStrip = Me.MenuStrip1
+        Me.Name = "frmMain"
+        Me.Text = "Form1"
+        Me.gbMode.ResumeLayout(False)
+        Me.gbMode.PerformLayout()
+        Me.gbEditMode.ResumeLayout(False)
+        Me.gbEditMode.PerformLayout()
+        Me.MenuStrip1.ResumeLayout(False)
+        Me.MenuStrip1.PerformLayout()
+        CType(Me.Viewer, System.ComponentModel.ISupportInitialize).EndInit()
+        Me.ResumeLayout(False)
+        Me.PerformLayout()
+
+    End Sub
+    Friend WithEvents btnAnswer As System.Windows.Forms.Button
+    Friend WithEvents btnNextQuestion As System.Windows.Forms.Button
+    Friend WithEvents Viewer As ShogiNextMove.Control.Board.BoardViewer
+    Friend WithEvents gbMode As System.Windows.Forms.GroupBox
+    Friend WithEvents rbPlay As System.Windows.Forms.RadioButton
+    Friend WithEvents rbEdit As System.Windows.Forms.RadioButton
+    Friend WithEvents lblDecision As System.Windows.Forms.Label
+    Friend WithEvents Label1 As System.Windows.Forms.Label
+    Friend WithEvents gbEditMode As System.Windows.Forms.GroupBox
+    Friend WithEvents rbNextMove As System.Windows.Forms.RadioButton
+    Friend WithEvents rbFirstKyokumen As System.Windows.Forms.RadioButton
+    Friend WithEvents KifuSavefileDaialog As System.Windows.Forms.SaveFileDialog
+    Friend WithEvents MenuStrip1 As System.Windows.Forms.MenuStrip
+    Friend WithEvents FirstKyokumenToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents HirateToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents TsumeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem
+    Friend WithEvents lblPoint As System.Windows.Forms.Label
+
+End Class

Added: ShogiNextMove/frmMain.resx
===================================================================
--- ShogiNextMove/frmMain.resx	                        (rev 0)
+++ ShogiNextMove/frmMain.resx	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="KifuSavefileDaialog.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="MenuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>183, 17</value>
+  </metadata>
+</root>
\ No newline at end of file

Added: ShogiNextMove/frmMain.vb
===================================================================
--- ShogiNextMove/frmMain.vb	                        (rev 0)
+++ ShogiNextMove/frmMain.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,205 @@
+
+
+Public Class frmMain
+
+    Private _kifuDataDirectoryReader As KifuDataDirectoryReader
+
+    Private _editKifu As Board.Kifu.Kifu
+
+    Dim closePoint As Integer = 0
+
+    Private _isLoaded As Boolean = False
+
+    Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
+        Viewer.IsBoardViewRotated = False
+        Viewer.Initialize()
+        Initialize()
+       
+        EnabledControl()
+        VisibleControl()
+        _isLoaded = True
+    End Sub
+
+    Private Sub btnAnswer_Click(sender As System.Object, e As System.EventArgs) Handles btnAnswer.Click
+        If _kifuDataDirectoryReader.hasNextKyokumen Then
+            viewer.kyokumen = _kifuDataDirectoryReader.NextKyokumen()
+            viewer.DrawCurrentBitmap()
+        End If
+    End Sub
+
+    Private Sub btnNextQuestion_Click(sender As System.Object, e As System.EventArgs) Handles btnNextQuestion.Click
+        lblDecision.Text = ""
+        If _kifuDataDirectoryReader.hasNextFile() Then
+            _kifuDataDirectoryReader.readNextFile()
+            Viewer.kyokumen = _kifuDataDirectoryReader.CurrentKyokumen
+            Viewer.DrawCurrentBitmap()
+        End If
+    End Sub
+
+   
+
+    Private Sub Viewer_Editing(sender As System.Object, e As ShogiNextMove.Control.Board.EditingEventArgs) Handles Viewer.Editing
+
+        If InPlay() Then
+            e.IsMove = True
+            If Not Board.KomaMoveValidater.GetInstance.IsValidate(Viewer.kyokumen, e.MovingValue) Then
+                e.Cancel = True
+                Exit Sub
+            End If
+            If e.MovingValue.CanPromote Then
+                PromoteMoveValue(e.MovingValue)
+            End If
+            If Not e.MovingValue.ToLocation.IsMasu Then
+                e.Cancel = True
+            End If
+
+
+            If e.MouseRightClicked Then
+                e.Cancel = True
+            End If
+
+
+        End If
+
+
+
+    End Sub
+
+    Private Sub PromoteMoveValue(movingValue As Board.Te)
+
+        Dim masuRect As Rectangle = Me.Viewer.GetMasuRect(movingValue.ToLocation)
+
+        Dim x As Integer = Location.X + SystemInformation.HorizontalResizeBorderThickness + masuRect.Left - Viewer.komaSize.Width \ 2 - 1
+        Dim y As Integer
+        If (Not Viewer.IsBoardViewRotated AndAlso movingValue.ToLocation.Row < 5) OrElse (Viewer.IsBoardViewRotated AndAlso movingValue.ToLocation.Row > 5) Then
+            y = Location.Y + SystemInformation.VerticalResizeBorderThickness + SystemInformation.CaptionHeight + Me.Location.Y + masuRect.Bottom + 1
+        Else
+            y = Location.Y + SystemInformation.VerticalResizeBorderThickness + Me.Location.Y + masuRect.Top - (Viewer.komaSize.Height + SystemInformation.FixedFrameBorderSize.Height * 2) + 1
+        End If
+
+        Dim frm As New frmPromote(movingValue.Piece.Value, x, y)
+        frm.ShowDialog()
+        If frm.isPromoted Then
+            movingValue.Promote = True
+        End If
+
+    End Sub
+
+    Private Sub rbEdit_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbEdit.CheckedChanged
+        VisibleControl()
+        EnabledControl()
+        If rbEdit.Checked Then
+            rbFirstKyokumen.Checked = True
+        End If
+    End Sub
+
+    Private Sub rbPlay_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbPlay.CheckedChanged
+        VisibleControl()
+        If rbPlay.Checked AndAlso _isLoaded Then
+            Initialize()
+        End If
+    End Sub
+
+    Private Sub Initialize()
+        _kifuDataDirectoryReader = New KifuDataDirectoryReader
+        If _kifuDataDirectoryReader.hasNextFile Then
+            _kifuDataDirectoryReader.readNextFile()
+            Viewer.kyokumen = _kifuDataDirectoryReader.CurrentKyokumen
+            Viewer.DrawCurrentBitmap()
+        Else
+            Viewer.kyokumen = New Board.Kyokumen
+            Viewer.DrawCurrentBitmap()
+        End If
+    End Sub
+    Private Sub rbFirstKyokumen_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbFirstKyokumen.CheckedChanged
+        VisibleControl()
+        EnabledControl()
+    End Sub
+
+    Private Sub rbNextMove_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles rbNextMove.CheckedChanged
+        If rbNextMove.Checked Then
+            If Board.KyokumenUtil.IsOuGyokuInSamePlayer(Viewer.kyokumen) Then
+                MessageBox.Show("王将と玉将が同じ向きです。確認して正しく編集してください。", "王将の向き違反", MessageBoxButtons.OK, MessageBoxIcon.Error)
+                rbFirstKyokumen.Checked = True
+                Exit Sub
+            End If
+            If Board.KyokumenUtil.IsNifu(Viewer.kyokumen) Then
+                MessageBox.Show("ニ歩です。確認して正しく編集してください。", "二歩", MessageBoxButtons.OK, MessageBoxIcon.Error)
+                rbFirstKyokumen.Checked = True
+                Exit Sub
+            End If
+            _editKifu = New Board.Kifu.Kifu
+            _editKifu.InitializeBoard(Viewer.kyokumen)
+        End If
+    End Sub
+
+    Private Sub VisibleControl()
+        Viewer.KomabakoVisible = Not InPlay()
+        gbEditMode.Visible = rbEdit.Checked
+    End Sub
+
+    Private Sub EnabledControl()
+        If rbFirstKyokumen.Checked AndAlso rbEdit.Checked Then
+            FirstKyokumenToolStripMenuItem.Enabled = True
+        Else
+            FirstKyokumenToolStripMenuItem.Enabled = False
+        End If
+    End Sub
+
+    Private Function InPlay() As Boolean
+        Return rbPlay.Checked OrElse (rbEdit.Checked AndAlso rbNextMove.Checked)
+    End Function
+
+    Private Sub Viewer_Edited(sender As System.Object, e As ShogiNextMove.Control.Board.EditedEventArgs) Handles Viewer.Edited
+        If rbPlay.Checked Then
+            If Not _kifuDataDirectoryReader.hasMove Then
+                Exit Sub
+            End If
+
+            If e.MovingValue.Equals(_kifuDataDirectoryReader.Moving) Then
+                lblDecision.Text = "正解"
+                closePoint += 1
+                lblPoint.Text = String.Format("得点:{0}/{1}", closePoint, _kifuDataDirectoryReader.Count)
+                _kifuDataDirectoryReader.NextKyokumen()
+            Else
+                lblDecision.Text = "不正解"
+            End If
+        End If
+
+        If rbEdit.Checked AndAlso rbNextMove.Checked Then
+            NextMoveAddAndSave(e.MovingValue)
+        End If
+
+    End Sub
+
+    Private Sub NextMoveAddAndSave(NextMoveValue As Board.Te)
+        Dim msg As String = String.Format("次の一手は""{0}""でよいですか?",
+                                              Board.Kifu.KifKifuUtil.GetInstance.MoveToString(NextMoveValue, Nothing))
+        Dim ret As DialogResult = MessageBox.Show(msg, "確認", MessageBoxButtons.OKCancel)
+        If ret = Windows.Forms.DialogResult.Cancel Then
+            Viewer.kyokumen = _editKifu.KyokumenList(0)
+            Viewer.DrawCurrentBitmap()
+            Exit Sub
+        End If
+
+        _editKifu.AddMove(NextMoveValue, 0)
+        KifuSavefileDaialog.InitialDirectory = _kifuDataDirectoryReader.dirName
+        KifuSavefileDaialog.Filter = "csa棋譜ファイル(*.csa)|*.csa"
+        If KifuSavefileDaialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
+            _kifuDataDirectoryReader.Write(_editKifu, KifuSavefileDaialog.FileName)
+        End If
+        rbFirstKyokumen.Checked = True
+    End Sub
+
+    Private Sub HirateToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles HirateToolStripMenuItem.Click
+        Viewer.kyokumen = New Board.Kyokumen(New Board.Haichi.Hirate)
+        Viewer.DrawCurrentBitmap()
+    End Sub
+
+    Private Sub TsumeToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles TsumeToolStripMenuItem.Click
+        Viewer.kyokumen = New Board.Kyokumen(New Board.Haichi.Tsume)
+        Viewer.DrawCurrentBitmap()
+    End Sub
+
+ 
+End Class

Added: ShogiNextMove/frmPromote.Designer.vb
===================================================================
--- ShogiNextMove/frmPromote.Designer.vb	                        (rev 0)
+++ ShogiNextMove/frmPromote.Designer.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,57 @@
+<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
+Partial Class frmPromote
+    Inherits System.Windows.Forms.Form
+
+    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
+    <System.Diagnostics.DebuggerNonUserCode()> _
+    Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+        Try
+            If disposing AndAlso components IsNot Nothing Then
+                components.Dispose()
+            End If
+        Finally
+            MyBase.Dispose(disposing)
+        End Try
+    End Sub
+
+    'Windows フォーム デザイナーで必要です。
+    Private components As System.ComponentModel.IContainer
+
+    'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。
+    'Windows フォーム デザイナーを使用して変更できます。  
+    'コード エディターを使って変更しないでください。
+    <System.Diagnostics.DebuggerStepThrough()> _
+    Private Sub InitializeComponent()
+        Me.komaPictureBox = New System.Windows.Forms.PictureBox()
+        CType(Me.komaPictureBox, System.ComponentModel.ISupportInitialize).BeginInit()
+        Me.SuspendLayout()
+        '
+        'komaPictureBox
+        '
+        Me.komaPictureBox.Location = New System.Drawing.Point(0, 0)
+        Me.komaPictureBox.Name = "komaPictureBox"
+        Me.komaPictureBox.Size = New System.Drawing.Size(86, 48)
+        Me.komaPictureBox.TabIndex = 0
+        Me.komaPictureBox.TabStop = False
+        '
+        'frmPromote
+        '
+        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None
+        Me.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink
+        Me.ClientSize = New System.Drawing.Size(89, 51)
+        Me.ControlBox = False
+        Me.Controls.Add(Me.komaPictureBox)
+        Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow
+        Me.MaximizeBox = False
+        Me.MinimizeBox = False
+        Me.Name = "frmPromote"
+        Me.ShowIcon = False
+        Me.ShowInTaskbar = False
+        Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual
+        Me.Text = "成る"
+        CType(Me.komaPictureBox, System.ComponentModel.ISupportInitialize).EndInit()
+        Me.ResumeLayout(False)
+
+    End Sub
+    Friend WithEvents komaPictureBox As System.Windows.Forms.PictureBox
+End Class

Added: ShogiNextMove/frmPromote.resx
===================================================================
--- ShogiNextMove/frmPromote.resx	                        (rev 0)
+++ ShogiNextMove/frmPromote.resx	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file

Added: ShogiNextMove/frmPromote.vb
===================================================================
--- ShogiNextMove/frmPromote.vb	                        (rev 0)
+++ ShogiNextMove/frmPromote.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,56 @@
+Public Class frmPromote
+
+    Private _imageLoader As ImageLoader = ImageLoader.GetInstance
+
+    Public Property isPromoted As Boolean = True
+
+    Private boardBitmap As Bitmap
+
+    Private promoteKomaBitmap As Bitmap
+
+    Private normalKomaBitmap As Bitmap
+
+    Private highlightBitmap As Bitmap
+
+    Public Sub New(normalKomaValue As Byte, x As Integer, y As Integer)
+        Me.InitializeComponent()
+        Dim promoteKomaValue As Byte = Board.KomaUtil.PromoteKomaValue(normalKomaValue)
+
+        Me.boardBitmap = _imageLoader.BoardBitmap
+        Me.promoteKomaBitmap = _imageLoader.GetKomaImage(promoteKomaValue)
+        Me.normalKomaBitmap = _imageLoader.GetKomaImage(normalKomaValue)
+        Me.highlightBitmap = _imageLoader.HighLightBitmap
+
+        Me.Location = New Point(x, y)
+    End Sub
+
+    Private Sub PromoteForm_Load(sender As Object, e As EventArgs) Handles Me.Load
+        komaPictureBox.Size = New Size(highlightBitmap.Size.Width * 2, highlightBitmap.Height)
+        Dim width As Integer = Me.komaPictureBox.Width + SystemInformation.FixedFrameBorderSize.Width * 2
+        Dim height As Integer = Me.komaPictureBox.Height + SystemInformation.CaptionHeight + SystemInformation.FixedFrameBorderSize.Height * 2
+        Me.Size = New Size(width, height)
+        Dim p As Point = New Point(Me.komaPictureBox.Left + Me.komaPictureBox.Width \ 4, Me.komaPictureBox.Top + Me.komaPictureBox.Height \ 2)
+        Cursor.Position = Me.komaPictureBox.PointToScreen(p)
+    End Sub
+
+    Private Sub komaPictureBox_Paint(sender As Object, e As PaintEventArgs) Handles komaPictureBox.Paint
+        Dim rectangle As Rectangle = New Rectangle(New Point(0, 0), Me.komaPictureBox.Size)
+        Dim rectangle2 As Rectangle = New Rectangle(New Point(-1, -1), Me.promoteKomaBitmap.Size)
+        Dim rectangle3 As Rectangle = New Rectangle(New Point(rectangle2.Right - 2, -1), Me.normalKomaBitmap.Size)
+        e.Graphics.DrawImage(Me.boardBitmap, rectangle, rectangle, GraphicsUnit.Pixel)
+        e.Graphics.DrawImage(Me.highlightBitmap, If(Me.isPromoted, rectangle2, rectangle3))
+        e.Graphics.DrawImage(Me.promoteKomaBitmap, rectangle2)
+        e.Graphics.DrawImage(Me.normalKomaBitmap, rectangle3)
+    End Sub
+
+    Private Sub komaPictureBox_Click(sender As Object, e As EventArgs) Handles komaPictureBox.Click
+        If (CType(e, MouseEventArgs)).Button = MouseButtons.Left Then
+            If (CType(e, MouseEventArgs)).X < Me.promoteKomaBitmap.Width - 2 Then
+                Me.isPromoted = True
+            Else
+                Me.isPromoted = False
+            End If
+            Me.Close()
+        End If
+    End Sub
+End Class
\ No newline at end of file

Added: ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferences.cache
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/DesignTimeResolveAssemblyReferencesInput.cache
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.Control.Board.BoardViewer.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.Control.Board.BoardViewer.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.Resources.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.Resources.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.exe
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.exe
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmMain.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmMain.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmPromote.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.frmPromote.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.pdb
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.pdb
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.FileListAbsolute.txt
===================================================================
--- ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.FileListAbsolute.txt	                        (rev 0)
+++ ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.FileListAbsolute.txt	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,72 @@
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.xml
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmMain.resources
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Resources.resources
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.vbproj.GenerateResource.Cache
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.xml
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.vbprojResolveAssemblyReference.cache
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140819.csa
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140826.csa
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\3.csa
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\yoshi55_wata-Superboy2-20140827_114157.csa
+C:\Users\yoshi\Documents\Visual Studio 2010\Projects\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmPromote.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.xml
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\3.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\yoshi55_wata-Superboy2-20140827_114157.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140819.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140826.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.xml
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmMain.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmPromote.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Resources.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.vbproj.GenerateResource.Cache
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Control.Board.BoardViewer.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140905.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\Debug.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\kei11.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.xml
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Control.Board.BoardViewer.resources
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmMain.resources
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmPromote.resources
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Resources.resources
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.vbproj.GenerateResource.Cache
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140905.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\3.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\Debug.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\kei11.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\yoshi55_wata-Superboy2-20140827_114157.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140819.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140826.csa
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.pdb
+C:\Users\yoshi\Desktop\SourceForege\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.xml
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.exe
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.xml
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.pdb
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140905.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\3.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\Debug.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\kei11.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\yoshi55_wata-Superboy2-20140827_114157.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140819.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\KifuData\20140826.csa
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.exe
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.pdb
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\bin\Debug\ShogiNextMove.xml
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Control.Board.BoardViewer.resources
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmMain.resources
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.frmPromote.resources
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.Resources.resources
+C:\Users\watanabe\Desktop\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.vbproj.GenerateResource.Cache
+C:\Users\bellm\Documents\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.exe
+C:\Users\bellm\Documents\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.xml
+C:\Users\bellm\Documents\souce\ShogiNextMove\ShogiNextMove\obj\x86\Debug\ShogiNextMove.pdb

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.GenerateResource.Cache
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/ShogiNextMove.vbproj.GenerateResource.Cache
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Debug/ShogiNextMove.xml
===================================================================
--- ShogiNextMove/obj/x86/Debug/ShogiNextMove.xml	                        (rev 0)
+++ ShogiNextMove/obj/x86/Debug/ShogiNextMove.xml	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<doc>
+<assembly>
+<name>
+ShogiNextMove
+</name>
+</assembly>
+<members>
+<member name="M:ShogiNextMove.Board.KyokumenUtil.IsOuGyokuInSamePlayer(ShogiNextMove.Board.Kyokumen)">
+	<summary>
+ 王将と玉将が同じ向きになっているか?
+ </summary>
+	<returns>True:不正 False:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.IsNifu(ShogiNextMove.Board.Kyokumen)">
+	<summary>
+ 二歩かどうかを判定
+ </summary>
+	<param name="kyokumen"></param>
+	<returns>True:二歩 false:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.IsNifuInCol(ShogiNextMove.Board.Kyokumen,System.Int32,System.Byte)">
+	<summary>
+ 一列で二歩かどうかを判定
+ </summary>
+	<param name="kyokumen"></param>
+	<param name="col">列</param>
+	<param name="which">歩の値 先手Koma.SENTE_FU,後手Koma.GOTE_FU</param>
+	<returns>True:二歩 false:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.CountFuInCol(ShogiNextMove.Board.Kyokumen,System.Int32,System.Byte)">
+	<summary>
+ 一列に歩が何枚あるか?
+ </summary>
+	<param name="kyokumen"></param>
+	<param name="col"></param>
+	<param name="which"></param>
+	<returns></returns>
+	<remarks></remarks>
+</member><member name="P:ShogiNextMove.My.Resources.Resources.ResourceManager">
+	<summary>
+  Returns the cached ResourceManager instance used by this class.
+</summary>
+</member><member name="P:ShogiNextMove.My.Resources.Resources.Culture">
+	<summary>
+  Overrides the current thread's CurrentUICulture property for all
+  resource lookups using this strongly typed resource class.
+</summary>
+</member><member name="T:ShogiNextMove.My.Resources.Resources">
+	<summary>
+  A strongly-typed resource class, for looking up localized strings, etc.
+</summary>
+</member><member name="M:ShogiNextMove.Board.Haichi.KomaOchi.KomaOchi(System.Int32,System.Int32,System.Byte)">
+	<summary>
+ 平手初期配置より駒を落とす
+ </summary>
+	<param name="col">落とす駒の列</param>
+	<param name="row">落とす駒の行</param>
+	<param name="ochiKoma">落とす駒の種類</param>
+	<remarks></remarks>
+</member>
+</members>
+</doc>
\ No newline at end of file

Added: ShogiNextMove/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Debug/TempPE/My Project.Resources.Designer.vb.dll
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/DesignTimeResolveAssemblyReferencesInput.cache
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.Control.Board.BoardViewer.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.Control.Board.BoardViewer.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.Resources.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.Resources.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.exe
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.exe
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.frmMain.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.frmMain.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.frmPromote.resources
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.frmPromote.resources
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.pdb
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.pdb
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.FileListAbsolute.txt
===================================================================
--- ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.FileListAbsolute.txt	                        (rev 0)
+++ ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.FileListAbsolute.txt	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,18 @@
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\20140905.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\3.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\Debug.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\kei11.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\yoshi55_wata-Superboy2-20140827_114157.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\20140819.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\KifuData\20140826.csa
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\ShogiNextMove.pdb
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\bin\Release\ShogiNextMove.xml
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.Control.Board.BoardViewer.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.frmMain.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.frmPromote.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.Resources.resources
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.vbproj.GenerateResource.Cache
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.exe
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.xml
+C:\Users\yoshi\Desktop\ShogiNextMove\ShogiNextMove\obj\x86\Release\ShogiNextMove.pdb

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.GenerateResource.Cache
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/ShogiNextMove.vbproj.GenerateResource.Cache
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: ShogiNextMove/obj/x86/Release/ShogiNextMove.xml
===================================================================
--- ShogiNextMove/obj/x86/Release/ShogiNextMove.xml	                        (rev 0)
+++ ShogiNextMove/obj/x86/Release/ShogiNextMove.xml	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,54 @@
+<?xml version="1.0"?>
+<doc>
+<assembly>
+<name>
+ShogiNextMove
+</name>
+</assembly>
+<members>
+<member name="P:ShogiNextMove.My.Resources.Resources.ResourceManager">
+	<summary>
+  Returns the cached ResourceManager instance used by this class.
+</summary>
+</member><member name="P:ShogiNextMove.My.Resources.Resources.Culture">
+	<summary>
+  Overrides the current thread's CurrentUICulture property for all
+  resource lookups using this strongly typed resource class.
+</summary>
+</member><member name="T:ShogiNextMove.My.Resources.Resources">
+	<summary>
+  A strongly-typed resource class, for looking up localized strings, etc.
+</summary>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.IsOuGyokuInSamePlayer(ShogiNextMove.Board.Kyokumen)">
+	<summary>
+ 王将と玉将が同じ向きになっているか?
+ </summary>
+	<returns>True:不正 False:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.IsNifu(ShogiNextMove.Board.Kyokumen)">
+	<summary>
+ 二歩かどうかを判定
+ </summary>
+	<param name="kyokumen"></param>
+	<returns>True:二歩 false:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.KyokumenUtil.IsNifuInCol(ShogiNextMove.Board.Kyokumen,System.Int32,System.Byte)">
+	<summary>
+ 一列で二歩かどうかを判定
+ </summary>
+	<param name="kyokumen"></param>
+	<param name="col">列</param>
+	<param name="which">歩の値 先手Koma.SENTE_FU,後手Koma.GOTE_FU</param>
+	<returns>True:二歩 false:正常</returns>
+	<remarks></remarks>
+</member><member name="M:ShogiNextMove.Board.Haichi.KomaOchi.KomaOchi(System.Int32,System.Int32,System.Byte)">
+	<summary>
+ 平手初期配置より駒を落とす
+ </summary>
+	<param name="col">落とす駒の列</param>
+	<param name="row">落とす駒の行</param>
+	<param name="ochiKoma">落とす駒の種類</param>
+	<remarks></remarks>
+</member>
+</members>
+</doc>
\ No newline at end of file

Added: ShogiNextMove/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll
===================================================================
(Binary files differ)


Property changes on: ShogiNextMove/obj/x86/Release/TempPE/My Project.Resources.Designer.vb.dll
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream


Property changes on: ShogiNextMove.Test
___________________________________________________________________
Added: svn:ignore
   + bin
obj


Added: ShogiNextMove.Test/CSAKifuUtilTest.vb
===================================================================
--- ShogiNextMove.Test/CSAKifuUtilTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/CSAKifuUtilTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,159 @@
+Imports ShogiNextMove.Board
+
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board.Kifu
+
+
+
+'''<summary>
+'''CSAKifuUtilTest のテスト クラスです。すべての
+'''CSAKifuUtilTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class CSAKifuUtilTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()> _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+
+    'End Sub
+    ''
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+
+ 
+
+    '''<summary>
+    '''KomaToCSAName のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomaToCSANameTest()
+        Assert.AreEqual("KY", _CSAKifuUtil.KomaToName(Koma.C_KYO))
+        Assert.AreEqual("FU", _CSAKifuUtil.KomaToName(Koma.C_FU))
+        Assert.AreEqual("HI", _CSAKifuUtil.KomaToName(Koma.C_HISYA))
+        Assert.AreEqual("OU", _CSAKifuUtil.KomaToName(Koma.C_GYOKU))
+        Assert.AreEqual("OU", _CSAKifuUtil.KomaToName(Koma.C_OU))
+    End Sub
+
+    '''<summary>
+    '''KomaToCSANameWithWhich のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomaToCSANameWithWhichTest()
+        Assert.AreEqual("+FU", _CSAKifuUtil.KomaToNameWithWhich(Koma.SENTE_FU))
+        Assert.AreEqual("-FU", _CSAKifuUtil.KomaToNameWithWhich(Koma.GOTE_FU))
+        Assert.AreEqual("+HI", _CSAKifuUtil.KomaToNameWithWhich(Koma.SENTE_HISYA))
+        Assert.AreEqual("+OU", _CSAKifuUtil.KomaToNameWithWhich(Koma.SENTE_OU))
+        Assert.AreEqual("+OU", _CSAKifuUtil.KomaToNameWithWhich(Koma.SENTE_GYOKU))
+    End Sub
+
+    '''<summary>
+    '''IsPromoteKoma のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsPromoteKomaTest()
+        Assert.AreEqual(True, CommonKifuUtil.IsPromoteKoma(Koma.SENTE_TOKIN, Koma.SENTE_FU))
+        Assert.AreEqual(False, CommonKifuUtil.IsPromoteKoma(Koma.SENTE_TOKIN, Koma.SENTE_TOKIN))
+        Assert.AreEqual(False, CommonKifuUtil.IsPromoteKoma(Koma.SENTE_FU, Koma.SENTE_FU))
+    End Sub
+
+    '''<summary>
+    '''CSAStringToNullMove のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CSAStringToNullMoveTest()
+        Dim actual As Te
+        actual = _CSAKifuUtil.StringToNullMove("%TORYO", Koma.GOTE)
+        Assert.AreEqual(True, actual.IsNullMove)
+        Assert.AreEqual(NullMoveType.TORYO, actual.NullMoveType)
+    End Sub
+
+    '''<summary>
+    '''CSAParseThinkTime のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CSAParseThinkTimeTest()
+        Assert.AreEqual(6, _CSAKifuUtil.CSAParseThinkTime("-3334FU,T6"))
+    End Sub
+
+    '''<summary>
+    '''CSAMoveStringToTe のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CSAMoveStringToTeTest()
+        Dim line As String = "-3334FU"
+        Dim kyokumen As New Kyokumen
+        Dim actual As Te = _CSAKifuUtil.MoveStringToTe(line, kyokumen)
+        Assert.AreEqual(4, actual.ToLocation.Row)
+        Assert.AreEqual(3, actual.ToLocation.Col)
+        Assert.AreEqual(3, actual.FromLocation.Row)
+        Assert.AreEqual(3, actual.FromLocation.Col)
+        Assert.AreEqual(Koma.GOTE, actual.Which)
+        Assert.AreEqual(False, actual.Promote)
+        Assert.AreEqual(Koma.GOTE_FU, actual.Piece.Value)
+    End Sub
+
+    '''<summary>
+    '''CSAKomaNameWithWhichToValue のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CSAKomaNameWithWhichToValueTest()
+        Assert.AreEqual(Koma.SENTE_FU, _CSAKifuUtil.KomaNameWithWhichToValue("+FU"))
+        Assert.AreEqual(Koma.SENTE_GYOKU, _CSAKifuUtil.KomaNameWithWhichToValue("+OU"))
+        Assert.AreEqual(Koma.GOTE_FU, _CSAKifuUtil.KomaNameWithWhichToValue("-FU"))
+        Assert.AreEqual(Koma.GOTE_RYU, _CSAKifuUtil.KomaNameWithWhichToValue("-RY"))
+        Assert.AreEqual(Koma.GOTE_OU, _CSAKifuUtil.KomaNameWithWhichToValue("-OU"))
+        Assert.AreEqual(CByte(0), _CSAKifuUtil.KomaNameWithWhichToValue(" * "))
+        Assert.AreEqual(Koma.SENTE_HISYA, _CSAKifuUtil.KomaNameWithWhichToValue("+HI"))
+        Assert.AreEqual(Koma.GOTE_KAKU, _CSAKifuUtil.KomaNameWithWhichToValue("-KA"))
+    End Sub
+
+    '''<summary>
+    '''CSAKomaNameToValue のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CSAKomaNameToValueTest()
+
+        Assert.AreEqual(Koma.C_FU, _CSAKifuUtil.KomaNameToValue("FU"))
+        Assert.AreEqual(Koma.C_OU, _CSAKifuUtil.KomaNameToValue("OU"))
+
+    End Sub
+End Class

Added: ShogiNextMove.Test/CSAKifuWriterTest.vb
===================================================================
--- ShogiNextMove.Test/CSAKifuWriterTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/CSAKifuWriterTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,112 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board.Kifu
+Imports ShogiNextMove.Board
+
+
+'''<summary>
+'''CSAKifuWriterTest のテスト クラスです。すべての
+'''CSAKifuWriterTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class CSAKifuWriterTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''MakeKifuCSAString のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub MakeKifuCSAStringTest()
+        Dim target As CSAKifuWriter = New CSAKifuWriter()
+        Dim kifu As New Kifu
+        kifu.InitializeBoard(New Kyokumen)
+        kifu.SenteName = "hoge"
+        kifu.GoteName = "foo"
+        Dim te1 As New Te(New KomaLocation(7, 7), New KomaLocation(7, 6), Koma.SENTE_FU, False)
+        kifu.AddMove(te1, 1)
+        Dim expected As String =
+            "V2.2" & vbCrLf &
+            "N+hoge" & vbCrLf &
+            "N-foo" & vbCrLf &
+            "PI" & vbCrLf &
+            "+" & vbCrLf &
+            "+7776FU,T1" & vbCrLf
+
+        Dim actual As String = target.MakeKifuCSAString(kifu)
+        Assert.AreEqual(expected, actual) 
+    End Sub
+
+    <TestMethod()> _
+    Public Sub MakeKifuCSAStringTest2()
+        Dim target As CSAKifuWriter = New CSAKifuWriter()
+        Dim kifu As New Kifu
+        Dim firstkyokumen As New Kyokumen
+        Dim te1 As New Te(New KomaLocation(7, 7), New KomaLocation(7, 6), Koma.SENTE_FU, False)
+        firstkyokumen.Move(te1)
+        kifu.InitializeBoard(firstkyokumen)
+        kifu.SenteName = "hoge"
+        kifu.GoteName = "foo"
+        Dim te2 As New Te(New KomaLocation(3, 3), New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        kifu.AddMove(te2, 1)
+        Dim expected As String =
+            "V2.2" & vbCrLf &
+            "N+hoge" & vbCrLf &
+            "N-foo" & vbCrLf &
+            "P1-KY-KE-GI-KI-OU-KI-GI-KE-KY" + vbCrLf +
+            "P2 * -HI *  *  *  *  * -KA * " + vbCrLf +
+            "P3-FU-FU-FU-FU-FU-FU-FU-FU-FU" + vbCrLf +
+            "P4 *  *  *  *  *  *  *  *  * " + vbCrLf +
+            "P5 *  *  *  *  *  *  *  *  * " + vbCrLf +
+            "P6 *  * +FU *  *  *  *  *  * " + vbCrLf +
+            "P7+FU+FU * +FU+FU+FU+FU+FU+FU" + vbCrLf +
+            "P8 * +KA *  *  *  *  * +HI * " + vbCrLf +
+            "P9+KY+KE+GI+KI+OU+KI+GI+KE+KY" + vbCrLf +
+            "-" + vbCrLf +
+            "-3334FU,T1" & vbCrLf
+        Dim actual As String = target.MakeKifuCSAString(kifu)
+        Assert.AreEqual(expected, actual)
+    End Sub
+
+End Class

Added: ShogiNextMove.Test/KifKifuUtilTest.vb
===================================================================
--- ShogiNextMove.Test/KifKifuUtilTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KifKifuUtilTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,73 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board.Kifu
+Imports ShogiNextMove.Board
+
+
+'''<summary>
+'''KifKifuUtilTest のテスト クラスです。すべての
+'''KifKifuUtilTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KifKifuUtilTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+    Private _KifKifuUtil As KifKifuUtil = KifKifuUtil.GetInstance
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+ 
+    <TestMethod()> _
+    Public Sub KomaNameToValueTest()
+        Assert.AreEqual(Koma.C_OU, _KifKifuUtil.KomaNameToValue("玉"))
+        Assert.AreEqual(Koma.C_FU, _KifKifuUtil.KomaNameToValue("歩"))
+        Assert.AreEqual(Koma.C_NARI_KEI, _KifKifuUtil.KomaNameToValue("成桂"))
+    End Sub
+
+    <TestMethod()> _
+    Public Sub KomaNameWithWhichToValueTest()
+        Assert.AreEqual(Koma.SENTE_GIN, _KifKifuUtil.KomaNameWithWhichToValue(" 銀"))
+        Assert.AreEqual(Koma.GOTE_KYO, _KifKifuUtil.KomaNameWithWhichToValue("v香"))
+    End Sub
+
+End Class

Added: ShogiNextMove.Test/KifuTest.vb
===================================================================
--- ShogiNextMove.Test/KifuTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KifuTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,343 @@
+Imports System.Text
+Imports ShogiNextMove.Board.Kifu
+Imports ShogiNextMove.Board.Koma
+Imports ShogiNextMove.Board
+
+<TestClass()>
+Public Class KifuTest
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest0()
+        Dim kifuStr As String = "' ----  Kifu for Windows V6.62 CSA形式棋譜ファイル  ----" +
+                "V2.2" + vbCr +
+                "$START_TIME:2014/08/26 14:10:08" + vbCr +
+                "$END_TIME:2014/08/26 17:01:28" + vbCr +
+                "P1 *  *  *  *  *  *  * -KE-KY" + vbCr +
+                "P2 *  *  *  *  * -GI-OU-KA * " + vbCr +
+                "P3 *  *  *  *  * -FU-FU-FU-FU" + vbCr +
+                "P4 *  *  *  *  *  *  *  *  * " + vbCr +
+                "P5 *  *  *  *  *  *  *  *  * " + vbCr +
+                "P6 *  *  *  *  *  *  *  *  * " + vbCr +
+                "P7 *  *  *  *  *  * +FU * +FU" + vbCr +
+                "P8 *  *  *  *  *  *  * +HI * " + vbCr +
+                "P9 *  *  *  *  *  *  * +KE+KY" + vbCr +
+                "P+00FU00FU00FU" + vbCr +
+                "+" + vbCr +
+                "+0024FU,T1" + vbCr +
+                "-2324FU,T2" + vbCr +
+                "+0025FU,T1" + vbCr +
+                "-2425FU,T1" + vbCr +
+                "+0024FU,T1" + vbCr +
+                "-3334FU,T13" + vbCr +
+                "+2825HI,T1" + vbCr +
+                "%TORYO,T1"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual(Nothing, Kifu.SenteName)
+        Assert.AreEqual(9, kifu.KyokumenList.Count)
+
+
+    End Sub
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest()
+        Dim kifuStr As String = "' ----  Kifu for Windows V6.62 CSA形式棋譜ファイル  ----" +
+        "V2(0.2)" +
+        "$START_TIME:2014/08/19 20:33:10" + vbCr +
+        "$END_TIME:2014/08/19 20:33:18" + vbCr +
+        "P1 *  *  *  *  *  * -GI-KE-KY" + vbCr +
+        "P2 *  *  *  *  *  * -KI-KA * " + vbCr +
+        "P3 *  *  *  *  *  * -FU * -FU" + vbCr +
+        "P4 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P5 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P6 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P7 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P8 *  *  *  *  *  *  * +HI * " + vbCr +
+        "P9 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P+00FU" + vbCr +
+        "P-00HI00KA00KI00KI00KI00GI00GI00GI00KE00KE00KE00KY00KY00KY00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU00FU" + vbCr +
+        "+" + vbCr +
+        "+0024FU,T2" + vbCr +
+        "%TORYO,T6"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual(Nothing, kifu.SenteName)
+        Assert.AreEqual(3, kifu.KyokumenList.Count)
+        Dim initKyokumen As Kyokumen = kifu.KyokumenList(0)
+        Assert.AreEqual(GOTE_FU, initKyokumen.GetMasu(3, 3).Value)
+        Assert.AreEqual(SENTE_HISYA, initKyokumen.GetMasu(2, 8).Value)
+        Assert.AreEqual(GOTE_KAKU, initKyokumen.GetMasu(2, 2).Value)
+        Assert.AreEqual(GOTE_KYO, initKyokumen.GetMasu(1, 1).Value)
+        Assert.AreEqual(CByte(0), initKyokumen.GetMasu(8, 8).Value)
+        Assert.AreEqual(CByte(0), initKyokumen.GetMasu(5, 1).Value)
+
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_HISYA))
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_KAKU))
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_KIN))
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_GIN))
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_KEI))
+        Assert.AreEqual(1, initKyokumen.Hand(Koma.SENTE_FU))
+
+        Assert.AreEqual(0, initKyokumen.Hand(Koma.SENTE_KYO))
+        Assert.AreEqual(1, initKyokumen.Hand(Koma.GOTE_HISYA))
+        Assert.AreEqual(1, initKyokumen.Hand(Koma.GOTE_KAKU))
+        Assert.AreEqual(3, initKyokumen.Hand(Koma.GOTE_KIN))
+        Assert.AreEqual(3, initKyokumen.Hand(Koma.GOTE_GIN))
+        Assert.AreEqual(3, initKyokumen.Hand(Koma.GOTE_KEI))
+        Assert.AreEqual(3, initKyokumen.Hand(Koma.GOTE_KYO))
+        Assert.AreEqual(15, initKyokumen.Hand(Koma.GOTE_FU))
+
+    End Sub
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest2()
+        Dim kifuStr = "V2(0.2)" + vbCr +
+                     "PI" + vbCr +
+                     "+"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual(1, kifu.KyokumenList.Count)
+        Assert.AreEqual(True, KyokumenHaichiComp.HaichiIsEqual(kifu.KyokumenList(0), New Haichi.Hirate))
+    End Sub
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest3()
+        Dim kifuStr = "V2(0.2)" + vbCr +
+                     "PI82HI22KA" + vbCr +
+                     "+"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual(1, kifu.KyokumenList.Count)
+        Assert.AreEqual(True, KyokumenHaichiComp.HaichiIsEqual(kifu.KyokumenList(0), New Haichi.Nimaiochi))
+    End Sub
+
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest4()
+        Dim kifuStr As String = "' ----  Kifu for Windows V6.62 CSA形式棋譜ファイル  ----" +
+        "V2(0.2)" +
+        "$START_TIME:2014/08/19 20:33:10" + vbCr +
+        "$END_TIME:2014/08/19 20:33:18" + vbCr +
+        "P1 *  *  *  *  *  * -GI-KE-KY" + vbCr +
+        "P2 *  *  *  *  *  * -KI-KA * " + vbCr +
+        "P3 *  *  *  *  *  * -FU * -FU" + vbCr +
+        "P4 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P5 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P6 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P7 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P8 *  *  *  *  *  *  * +HI * " + vbCr +
+        "P9 *  *  *  *  *  *  *  *  * " + vbCr +
+        "P+00FU" + vbCr +
+        "P-00AL" + vbCr +
+        "+" + vbCr +
+        "+0024FU,T2" + vbCr +
+        "%TORYO,T6"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual(Nothing, kifu.SenteName)
+        Assert.AreEqual(3, kifu.KyokumenList.Count)
+        Dim initKyokumen As Kyokumen = kifu.KyokumenList(0)
+        Assert.AreEqual(Koma.GOTE_FU, initKyokumen.GetMasu(3, 3).Value)
+        Assert.AreEqual(Koma.SENTE_HISYA, initKyokumen.GetMasu(2, 8).Value)
+        Assert.AreEqual(CByte(0), initKyokumen.GetMasu(2, 4).Value)
+        Assert.AreEqual(Koma.GOTE_KAKU, initKyokumen.GetMasu(2, 2).Value)
+        Assert.AreEqual(Koma.GOTE_KYO, initKyokumen.GetMasu(1, 1).Value)
+        Assert.AreEqual(CByte(0), initKyokumen.GetMasu(8, 8).Value)
+        Assert.AreEqual(CByte(0), initKyokumen.GetMasu(5, 1).Value)
+
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_HISYA))
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_KAKU))
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_KIN))
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_GIN))
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_KEI))
+        Assert.AreEqual(0, initKyokumen.SenteHand(Koma.C_KYO))
+        Assert.AreEqual(1, initKyokumen.SenteHand(Koma.C_FU))
+
+        Assert.AreEqual(1, initKyokumen.GoteHand(Koma.C_HISYA))
+        Assert.AreEqual(1, initKyokumen.GoteHand(Koma.C_KAKU))
+        Assert.AreEqual(3, initKyokumen.GoteHand(Koma.C_KIN))
+        Assert.AreEqual(3, initKyokumen.GoteHand(Koma.C_GIN))
+        Assert.AreEqual(3, initKyokumen.GoteHand(Koma.C_KEI))
+        Assert.AreEqual(3, initKyokumen.GoteHand(Koma.C_KYO))
+        Assert.AreEqual(15, initKyokumen.GoteHand(Koma.C_FU))
+
+        Dim nextKyokumen As Kyokumen = kifu.KyokumenList(1)
+        Assert.AreEqual(Koma.GOTE_FU, nextKyokumen.GetMasu(3, 3).Value)
+        Assert.AreEqual(Koma.SENTE_HISYA, nextKyokumen.GetMasu(2, 8).Value)
+        Assert.AreEqual(Koma.SENTE_FU, nextKyokumen.GetMasu(2, 4).Value)
+        Assert.AreEqual(Koma.GOTE_KAKU, nextKyokumen.GetMasu(2, 2).Value)
+        Assert.AreEqual(Koma.GOTE_KYO, nextKyokumen.GetMasu(1, 1).Value)
+        Assert.AreEqual(CByte(0), nextKyokumen.GetMasu(8, 8).Value)
+        Assert.AreEqual(CByte(0), nextKyokumen.GetMasu(5, 1).Value)
+
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_HISYA))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_KAKU))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_KIN))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_GIN))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_KEI))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_KYO))
+        Assert.AreEqual(0, nextKyokumen.SenteHand(Koma.C_FU))
+
+        Assert.AreEqual(1, nextKyokumen.GoteHand(Koma.C_HISYA))
+        Assert.AreEqual(1, nextKyokumen.GoteHand(Koma.C_KAKU))
+        Assert.AreEqual(3, nextKyokumen.GoteHand(Koma.C_KIN))
+        Assert.AreEqual(3, nextKyokumen.GoteHand(Koma.C_GIN))
+        Assert.AreEqual(3, nextKyokumen.GoteHand(Koma.C_KEI))
+        Assert.AreEqual(3, nextKyokumen.GoteHand(Koma.C_KYO))
+        Assert.AreEqual(15, nextKyokumen.GoteHand(Koma.C_FU))
+
+    End Sub
+
+
+    <TestMethod()>
+    Public Sub ReadCSAStringTest5()
+        Dim kifuStr As String = "' ------ CSA 形式棋譜ファイル" + vbCr +
+            "' ----------- created by 激指" + vbCr +
+            "N+yoshi55_wata" + vbCr +
+            "N-Superboy2" + vbCr +
+            "' ---------------------- 盤面" + vbCr +
+            "' -9--8--7--6--5--4--3--2--1-" + vbCr +
+            "P1-KY-KE-GI-KI-OU-KI-GI-KE-KY" + vbCr +
+            "P2 * -HI *  *  *  *  * -KA * " + vbCr +
+            "P3-FU-FU-FU-FU-FU-FU-FU-FU-FU" + vbCr +
+            "P4 *  *  *  *  *  *  *  *  * " + vbCr +
+            "P5 *  *  *  *  *  *  *  *  * " + vbCr +
+            "P6 *  *  *  *  *  *  *  *  * " + vbCr +
+            "P7+FU+FU+FU+FU+FU+FU+FU+FU+FU" + vbCr +
+            "P8 * +KA *  *  *  *  * +HI * " + vbCr +
+            "P9+KY+KE+GI+KI+OU+KI+GI+KE+KY" + vbCr +
+            "' -------------------- 持ち駒" + vbCr +
+            "' ---------------------- 手番" + vbCr +
+            "+" + vbCr +
+            "' ---------- 指し手と考慮時間" + vbCr +
+            "'<analyze>0</analyze>" + vbCr +
+            "+7776FU" + vbCr + "T0" + vbCr +
+            "-3334FU" + vbCr + "T1" + vbCr +
+            "+2868HI" + vbCr + "T2" + vbCr +
+            "-6152KI" + vbCr + "T2" + vbCr +
+            "+5948OU" + vbCr + "T1" + vbCr +
+            "-7162GI" + vbCr + "T1" + vbCr +
+            "+4838OU" + vbCr + "T2" + vbCr +
+            "-4142KI" + vbCr + "T2" + vbCr +
+            "+3828OU" + vbCr + "T1" + vbCr +
+            "-5141OU" + vbCr + "T1" + vbCr +
+            "+8822UM" + vbCr + "T4" + vbCr +
+            "-3122GI" + vbCr + "T2" + vbCr +
+            "+7988GI" + vbCr + "T2" + vbCr +
+            "-3435FU" + vbCr + "T7" + vbCr +
+            "+8877GI" + vbCr + "T1" + vbCr +
+            "-2233GI" + vbCr + "T5" + vbCr +
+            "+1918KY" + vbCr + "T2" + vbCr +
+            "-1314FU" + vbCr + "T2" + vbCr +
+            "+2819OU" + vbCr + "T1" + vbCr +
+            "-1415FU" + vbCr + "T1" + vbCr +
+            "+3928GI" + vbCr + "T1" + vbCr +
+            "-3536FU" + vbCr + "T2" + vbCr +
+            "+3736FU" + vbCr + "T4" + vbCr +
+            "-4131OU" + vbCr + "T9" + vbCr +
+            "+4939KI" + vbCr + "T5" + vbCr +
+            "-5354FU" + vbCr + "T16" + vbCr +
+            "+6958KI" + vbCr + "T2" + vbCr +
+            "-6253GI" + vbCr + "T1" + vbCr +
+            "+5848KI" + vbCr + "T1" + vbCr +
+            "-9394FU" + vbCr + "T22" + vbCr +
+            "+9796FU" + vbCr + "T2" + vbCr +
+            "-9495FU" + vbCr + "T3" + vbCr +
+            "+9695FU" + vbCr + "T1" + vbCr +
+            "-9195KY" + vbCr + "T2" + vbCr +
+            "+9995KY" + vbCr + "T5" + vbCr +
+            "-0093FU" + vbCr + "T6" + vbCr +
+            "+6888HI" + vbCr + "T8" + vbCr +
+            "-5455FU" + vbCr + "T19" + vbCr +
+            "+8786FU" + vbCr + "T3" + vbCr +
+            "-5556FU" + vbCr + "T2" + vbCr +
+            "+7766GI" + vbCr + "T25" + vbCr +
+            "-5657TO" + vbCr + "T3" + vbCr +
+            "+6657GI" + vbCr + "T2" + vbCr +
+            "-0099KA" + vbCr + "T11" + vbCr +
+            "+8898HI" + vbCr + "T3" + vbCr +
+            "-9955UM" + vbCr + "T8" + vbCr +
+            "+9593NY" + vbCr + "T3" + vbCr +
+            "-8193KE" + vbCr + "T2" + vbCr +
+            "+9893RY" + vbCr + "T2" + vbCr +
+            "-7374FU" + vbCr + "T4" + vbCr +
+            "+0056KY" + vbCr + "T4" + vbCr +
+            "-5573UM" + vbCr + "T10" + vbCr +
+            "+0065KE" + vbCr + "T3" + vbCr +
+            "-7364UM" + vbCr + "T2" + vbCr +
+            "+6553NK" + vbCr + "T7" + vbCr +
+            "-5253KI" + vbCr + "T4" + vbCr +
+            "+5653NY" + vbCr + "T18" + vbCr +
+            "-4253KI" + vbCr + "T1" + vbCr +
+            "+0071KA" + vbCr + "T4" + vbCr +
+            "-8252HI" + vbCr + "T5" + vbCr +
+            "+8977KE" + vbCr + "T33" + vbCr +
+            "-1516FU" + vbCr + "T16" + vbCr +
+            "+1716FU" + vbCr + "T4" + vbCr +
+            "-0017FU" + vbCr + "T7" + vbCr +
+            "+1817KY" + vbCr + "T2" + vbCr +
+            "-0025KE" + vbCr + "T4" + vbCr +
+            "+0026GI" + vbCr + "T3" + vbCr +
+            "-1116KY" + vbCr + "T8" + vbCr +
+            "+1716KY" + vbCr + "T7" + vbCr +
+            "-0018FU" + vbCr + "T5" + vbCr +
+            "+1918OU" + vbCr + "T3" + vbCr +
+            "-0017KY" + vbCr + "T3" + vbCr +
+            "+2617GI" + vbCr + "T6" + vbCr +
+            "-2517NK" + vbCr + "T2" + vbCr +
+            "+1817OU" + vbCr + "T6" + vbCr +
+            "-0013KY" + vbCr + "T10" + vbCr +
+            "+0015FU" + vbCr + "T5" + vbCr +
+            "-3324GI" + vbCr + "T4" + vbCr +
+            "+0026KY" + vbCr + "T5" + vbCr +
+            "-1315KY" + vbCr + "T11" + vbCr +
+            "+1615KY" + vbCr + "T3" + vbCr +
+            "-0016FU" + vbCr + "T1" + vbCr +
+            "+1716OU" + vbCr + "T10" + vbCr +
+            "-2415GI" + vbCr + "T4" + vbCr +
+            "+1615OU" + vbCr + "T4" + vbCr +
+            "-0014KY" + vbCr + "T9" + vbCr +
+            "+1514OU" + vbCr + "T8" + vbCr +
+            "-5212HI" + vbCr + "T3" + vbCr +
+            "+1425OU" + vbCr + "T8" + vbCr +
+            "-2133KE" + vbCr + "T6" + vbCr +
+            "+2534OU" + vbCr + "T9" + vbCr +
+            "-5344KI" + vbCr + "T14" + vbCr +
+            "+3433OU" + vbCr + "T4" + vbCr +
+            "-6442UM" + vbCr + "T1" + vbCr +
+            "+3323OU" + vbCr + "T3" + vbCr +
+            "-1222HI" + vbCr + "T10" + vbCr +
+            "+2314OU" + vbCr + "T36" + vbCr +
+            "-2212HI" + vbCr + "T4" + vbCr +
+            "+0013FU" + vbCr + "T19" + vbCr +
+            "-4232UM" + vbCr + "T1" + vbCr +
+            "+0023KE" + vbCr + "T4" + vbCr +
+            "-3122OU" + vbCr + "T3" + vbCr +
+            "+1312TO" + vbCr + "T18" + vbCr +
+            "-2233OU" + vbCr + "T5" + vbCr +
+            "+0024KI" + vbCr + "T14" + vbCr +
+            "-3342OU" + vbCr + "T3" + vbCr +
+            "+0033GI" + vbCr + "T6" + vbCr +
+            "-3233UM" + vbCr + "T0" + vbCr +
+            "+9382RY" + vbCr + "T0" + vbCr +
+            "-0052GI" + vbCr + "T0" + vbCr +
+            "+2433KI" + vbCr + "T0" + vbCr +
+            "-4233OU" + vbCr + "T0" + vbCr +
+            "+0024KA" + vbCr + "T0" + vbCr +
+            "-3334OU" + vbCr + "T0" + vbCr +
+            "+0046KE" + vbCr + "T0" + vbCr +
+            "-3445OU" + vbCr + "T0" + vbCr +
+            "+0035HI" + vbCr + "T0" + vbCr +
+            "-4435KI" + vbCr + "T0" + vbCr +
+            "+7135UM" + vbCr + "T0" + vbCr +
+            "-4555OU" + vbCr + "T0" + vbCr +
+            "+0056KI" + vbCr + "T0" + vbCr +
+            "-5564OU" + vbCr + "T0" + vbCr +
+            "+5665KI" + vbCr + "T0"
+        Dim kifu As Kifu = (New CSAKifuReader).ReadCSAString(kifuStr)
+        Assert.AreEqual("yoshi55_wata", kifu.SenteName)
+        Assert.AreEqual("Superboy2", kifu.GoteName)
+        Assert.AreEqual(124, kifu.KyokumenList.Count)
+        Dim Kyokumen107 As Kyokumen = kifu.KyokumenList(107)
+        Assert.AreEqual(Koma.SENTE_GYOKU, Kyokumen107.GetMasu(1, 4).Value)
+        Assert.AreEqual(Koma.GOTE_OU, Kyokumen107.GetMasu(4, 2).Value)
+        Assert.AreEqual(Koma.GOTE_UMA, Kyokumen107.GetMasu(3, 2).Value)
+        Assert.AreEqual(Koma.SENTE_RYU, Kyokumen107.GetMasu(9, 3).Value)
+    End Sub
+
+End Class

Added: ShogiNextMove.Test/KomaLocationTest.vb
===================================================================
--- ShogiNextMove.Test/KomaLocationTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KomaLocationTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,98 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''KomaLocationTest のテスト クラスです。すべての
+'''KomaLocationTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KomaLocationTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+    Private komabakoLocation As KomaLocation
+    Private masuLocation As KomaLocation
+    Private mochigomaLocation As KomaLocation
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    ' 各テストを実行する前にコードを実行するには、TestInitialize を使用
+    <TestInitialize()> _
+    Public Sub MyTestInitialize()
+        komabakoLocation = KomaLocation.KomaBako
+        masuLocation = New KomaLocation(1, 1)
+        mochigomaLocation = KomaLocation.Mochigoma
+    End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''IsKomaBako のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsKomaBakoTest()
+
+        Assert.AreEqual(True, komabakoLocation.IsKomaBako)
+        Assert.AreEqual(False, mochigomaLocation.IsKomaBako)
+        Assert.AreEqual(False, masuLocation.IsKomaBako)
+
+
+    End Sub
+
+    '''<summary>
+    '''IsMasu のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsMasuTest()
+        Assert.AreEqual(False, komabakoLocation.IsMasu)
+        Assert.AreEqual(False, mochigomaLocation.IsMasu)
+        Assert.AreEqual(True, masuLocation.IsMasu)
+
+    End Sub
+
+    '''<summary>
+    '''IsMochigoma のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsMochigomaTest()
+        Assert.AreEqual(False, komabakoLocation.IsMochigoma)
+        Assert.AreEqual(True, mochigomaLocation.IsMochigoma)
+        Assert.AreEqual(False, masuLocation.IsMochigoma)
+
+    End Sub
+End Class

Added: ShogiNextMove.Test/KomaMoveDirectionTest.vb
===================================================================
--- ShogiNextMove.Test/KomaMoveDirectionTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KomaMoveDirectionTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,78 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''KomaMoveDirectionTest のテスト クラスです。すべての
+'''KomaMoveDirectionTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KomaMoveDirectionTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    ' '''<summary>
+    ' '''GetToLocations のテスト
+    ' '''</summary>
+    '<TestMethod()> _
+    'Public Sub GetToLocationsTest()
+    '    Dim komaDirection1 As New KomaMoveDirection(1, -1)
+    '    Dim komaDiretion2 As New KomaMoveDirection(1, 1, True)
+
+    '    Dim from As New KomaLocation(2, 2)
+    '    Dim actual() As KomaLocation
+    '    actual = komaDirection1.GetToLocations(from)
+    '    Assert.AreEqual(1, actual.Count)
+    '    Assert.AreEqual(3, actual(0).Col)
+    '    Assert.AreEqual(1, actual(0).Row)
+    '    actual = komaDiretion2.GetToLocations(from)
+    '    Assert.AreEqual(7, actual.Count)
+    '    Assert.AreEqual(3, actual(0).Col)
+    '    Assert.AreEqual(3, actual(0).Row)
+    '    Assert.AreEqual(9, actual(6).Col)
+    '    Assert.AreEqual(9, actual(6).Row)
+    'End Sub
+End Class

Added: ShogiNextMove.Test/KomaTest.vb
===================================================================
--- ShogiNextMove.Test/KomaTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KomaTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,88 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''KomaTest のテスト クラスです。すべての
+'''KomaTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KomaTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''Toggle のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub ToggleTest()
+
+        Dim target As Koma = New Koma(Koma.SENTE_FU)
+        target.Toggle()
+        Assert.AreEqual(Koma.SENTE_TOKIN, target.Value)
+        target.Toggle()
+        Assert.AreEqual(Koma.GOTE_FU, target.Value)
+        target.Toggle()
+        Assert.AreEqual(Koma.GOTE_TOKIN, target.Value)
+        target.Toggle()
+        Assert.AreEqual(Koma.SENTE_FU, target.Value)
+
+
+
+    End Sub
+
+    <TestMethod()> _
+    Public Sub ToggleTest1()
+        Dim target As Koma = New Koma(Koma.GOTE_OU)
+        target.Toggle()
+        Assert.AreEqual(Koma.SENTE_OU, target.Value)
+        target.Toggle()
+        Assert.AreEqual(Koma.GOTE_OU, target.Value)
+
+
+    End Sub
+
+End Class

Added: ShogiNextMove.Test/KomaUtilTest.vb
===================================================================
--- ShogiNextMove.Test/KomaUtilTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KomaUtilTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,138 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+Imports ShogiNextMove.Board.Koma
+
+
+'''<summary>
+'''KomaTest のテスト クラスです。すべての
+'''KomaTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KomaUtilTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''PromateKomaValue のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub PromateKomaValueTest()
+        Assert.AreEqual(SENTE_TOKIN, KomaUtil.PromoteKomaValue(SENTE_FU))
+        Assert.AreEqual(SENTE_NARI_KYO, KomaUtil.PromoteKomaValue(SENTE_KYO))
+        Assert.AreEqual(GOTE_NARI_GIN, KomaUtil.PromoteKomaValue(GOTE_GIN))
+        Assert.AreEqual(GOTE_UMA, KomaUtil.PromoteKomaValue(GOTE_KAKU))
+        Assert.AreEqual(GOTE_RYU, KomaUtil.PromoteKomaValue(GOTE_HISYA))
+
+    End Sub
+
+    '''<summary>
+    '''IsPromoted のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsPromotedTest()
+        Assert.AreEqual(True, KomaUtil.IsPromoted(SENTE_TOKIN))
+        Assert.AreEqual(False, KomaUtil.IsPromoted(SENTE_FU))
+    End Sub
+
+    <TestMethod()> _
+    Public Sub CapturedKomaKindTest()
+        Assert.AreEqual(C_FU, KomaUtil.CapturedKomaKind(SENTE_TOKIN))
+        Assert.AreEqual(C_FU, KomaUtil.CapturedKomaKind(GOTE_TOKIN))
+        Assert.AreEqual(C_KYO, KomaUtil.CapturedKomaKind(SENTE_NARI_KYO))
+        Assert.AreEqual(C_KEI, KomaUtil.CapturedKomaKind(GOTE_NARI_KEI))
+        Assert.AreEqual(C_GIN, KomaUtil.CapturedKomaKind(SENTE_NARI_GIN))
+        Assert.AreEqual(C_KAKU, KomaUtil.CapturedKomaKind(GOTE_UMA))
+        Assert.AreEqual(C_HISYA, KomaUtil.CapturedKomaKind(SENTE_RYU))
+    End Sub
+
+
+    '''<summary>
+    '''CanPromote のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub CanPromoteTest()
+        Assert.AreEqual(True, KomaUtil.CanPromote(Koma.GOTE_FU))
+        Assert.AreEqual(True, KomaUtil.CanPromote(Koma.SENTE_FU))
+        Assert.AreEqual(False, KomaUtil.CanPromote(CByte(0)))
+        Assert.AreEqual(False, KomaUtil.CanPromote(Koma.GOTE_KIN))
+        Assert.AreEqual(True, KomaUtil.CanPromote(Koma.SENTE_HISYA))
+        Assert.AreEqual(False, KomaUtil.CanPromote(Koma.SENTE_UMA))
+        Assert.AreEqual(False, KomaUtil.CanPromote(Koma.GOTE_RYU))
+    End Sub
+
+
+
+    '''<summary>
+    '''GyokuToOu のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub GyokuToOuTest()
+        Assert.AreEqual(Koma.SENTE_OU, KomaUtil.GyokuToOu(Koma.SENTE_GYOKU))
+        Assert.AreEqual(Koma.GOTE_OU, KomaUtil.GyokuToOu(Koma.GOTE_GYOKU))
+        Assert.AreEqual(Koma.SENTE_FU, KomaUtil.GyokuToOu(Koma.SENTE_FU))
+        Assert.AreEqual(Koma.GOTE_OU, KomaUtil.GyokuToOu(Koma.GOTE_OU))
+    End Sub
+
+    '''<summary>
+    '''OppositeKoma のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub OppositeKomaTest()
+        Assert.AreEqual(Koma.GOTE_FU, KomaUtil.OppositeKoma(Koma.SENTE_FU))
+        Assert.AreEqual(Koma.SENTE_KYO, KomaUtil.OppositeKoma(Koma.GOTE_KYO))
+        Assert.AreEqual(Koma.GOTE_HISYA, KomaUtil.OppositeKoma(Koma.SENTE_HISYA))
+        Assert.AreEqual(Koma.SENTE_UMA, KomaUtil.OppositeKoma(Koma.GOTE_UMA))
+    End Sub
+
+    '''<summary>
+    '''Which のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub WhichTest()
+        Assert.AreEqual(Koma.SENTE, KomaUtil.Which(Koma.SENTE_HISYA))
+        Assert.AreEqual(Koma.GOTE, KomaUtil.Which(Koma.GOTE_KYO))
+    End Sub
+
+End Class

Added: ShogiNextMove.Test/KyokumenHaichiCompTest.vb
===================================================================
--- ShogiNextMove.Test/KyokumenHaichiCompTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KyokumenHaichiCompTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,48 @@
+Imports ShogiNextMove.Board.Haichi
+
+Imports ShogiNextMove.Board
+
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove
+
+
+
+'''<summary>
+'''KyokumenHaichiCompTest のテスト クラスです。すべての
+'''KyokumenHaichiCompTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KyokumenHaichiCompTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+
+
+
+    '''<summary>
+    '''HaichiIsEqual のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub HaichiIsEqualTest()
+        Dim kyokumen As Kyokumen = New Kyokumen
+        Dim haichi As HaichiBase = New Haichi.Hirate
+        Dim nimai As New Haichi.Nimaiochi
+        Assert.AreEqual(True, KyokumenHaichiComp.HaichiIsEqual(kyokumen, haichi))
+        Assert.AreEqual(False, KyokumenHaichiComp.HaichiIsEqual(kyokumen, nimai))
+    End Sub
+End Class

Added: ShogiNextMove.Test/KyokumenTest.vb
===================================================================
--- ShogiNextMove.Test/KyokumenTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KyokumenTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,216 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''KyokumenTest のテスト クラスです。すべての
+'''KyokumenTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KyokumenTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''ToggleTurn のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub ToggleTurnTest()
+        Dim target As Kyokumen = New Kyokumen() ' TODO: 適切な値に初期化してください
+        Assert.AreEqual(Koma.SENTE, target.Turn)
+        target.ToggleTurn()
+        Assert.AreEqual(Koma.GOTE, target.Turn)
+        target.ToggleTurn()
+        Assert.AreEqual(Koma.SENTE, target.Turn)
+
+    End Sub
+
+    '''<summary>
+    '''Kyokumen コンストラクター のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KyokumenConstructorTest()
+        Dim target As Kyokumen = New Kyokumen()
+        Assert.AreEqual(True, KyokumenHaichiComp.HaichiIsEqual(target, New Haichi.Hirate))
+        For KomaValueWithWhich As Byte = Koma.SENTE_FU To Koma.SENTE_HISYA
+            Assert.AreEqual(0, target.Hand(KomaValueWithWhich))
+        Next
+        For komaValueWithWhich As Byte = Koma.GOTE_FU To Koma.GOTE_HISYA
+            Assert.AreEqual(0, target.Hand(komaValueWithWhich))
+        Next
+    End Sub
+
+
+
+    '''<summary>
+    '''GetMasu のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub GetMasuTest()
+        Dim target As Kyokumen = New Kyokumen()
+        Assert.AreEqual(Koma.GOTE_OU, target.GetMasu(5, 1).Value)
+        Assert.AreEqual(Koma.GOTE_KAKU, target.GetMasu(2, 2).Value)
+        Assert.AreEqual(Koma.GOTE_HISYA, target.GetMasu(8, 2).Value)
+
+        Assert.AreEqual(Koma.SENTE_GYOKU, target.GetMasu(5, 9).Value)
+        Assert.AreEqual(Koma.SENTE_KAKU, target.GetMasu(8, 8).Value)
+        Assert.AreEqual(Koma.SENTE_HISYA, target.GetMasu(2, 8).Value)
+
+    End Sub
+
+    '''<summary>
+    '''Edit のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub EditTest()
+        Dim target As Kyokumen = New Kyokumen() ' TODO: 適切な値に初期化してください
+        Dim fromLocation As KomaLocation = New KomaLocation(3, 3)
+        Dim toLocation As KomaLocation = New KomaLocation(3, 4)
+        Dim te As Te = New Te(fromLocation, toLocation, Koma.GOTE_FU, False)
+        Assert.AreEqual(CByte(0), target.GetMasu(toLocation).Value )
+        Assert.AreEqual(Koma.GOTE_FU, target.GetMasu(fromLocation).Value)
+        target.Edit(te)
+        Assert.AreEqual(Koma.GOTE_FU, target.GetMasu(toLocation).Value)
+        Assert.AreEqual(CByte(0), target.GetMasu(fromLocation).Value)
+
+    End Sub
+
+    '''<summary>
+    '''KomabakoCounts のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomabakoCountsTest1()
+        Dim target As Kyokumen = New Kyokumen()
+        Dim te1 As Te = New Te(New KomaLocation(7, 7), New KomaLocation(7, 6), Koma.SENTE_FU, False)
+        Dim te2 As Te = New Te(New KomaLocation(3, 3), New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        Dim te3 As Te = New Te(New KomaLocation(8, 8), New KomaLocation(2, 2), Koma.SENTE_UMA, True)
+        target.Edit(te1)
+        target.Edit(te2)
+        target.Edit(te3)
+        Dim actual() As Integer = target.KomabakoCounts
+        Assert.AreEqual(Koma.C_KOMABAKO_MAX + 1, actual.Length)
+        Assert.AreEqual(0, actual(Koma.C_HISYA))
+        Assert.AreEqual(0, actual(Koma.C_KAKU))
+        Assert.AreEqual(0, actual(Koma.C_KIN))
+        Assert.AreEqual(0, actual(Koma.C_GIN))
+        Assert.AreEqual(0, actual(Koma.C_KEI))
+        Assert.AreEqual(0, actual(Koma.C_KYO))
+        Assert.AreEqual(0, actual(Koma.C_FU))
+        Assert.AreEqual(0, actual(Koma.C_GYOKU))
+        Assert.AreEqual(0, actual(Koma.C_OU))
+    End Sub
+
+    '''<summary>
+    '''KomabakoCounts のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomabakoCountsTest3()
+        Dim target As Kyokumen = New Kyokumen()
+        Dim te1 As Te = New Te(New KomaLocation(7, 7), New KomaLocation(7, 6), Koma.SENTE_FU, False)
+        Dim te2 As Te = New Te(New KomaLocation(3, 3), New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        Dim te3 As Te = New Te(New KomaLocation(8, 8), New KomaLocation(2, 2), Koma.SENTE_UMA, True)
+        Dim te4 As Te = New Te(New KomaLocation(3, 1), New KomaLocation(2, 2), Koma.GOTE_GIN, False)
+        target.Edit(te1)
+        target.Edit(te2)
+        target.Edit(te3)
+        target.Edit(te4)
+        Dim actual() As Integer = target.KomabakoCounts
+        Assert.AreEqual(Koma.C_KOMABAKO_MAX + 1, actual.Length)
+        Assert.AreEqual(0, actual(Koma.C_HISYA))
+        Assert.AreEqual(0, actual(Koma.C_KAKU))
+        Assert.AreEqual(0, actual(Koma.C_KIN))
+        Assert.AreEqual(0, actual(Koma.C_GIN))
+        Assert.AreEqual(0, actual(Koma.C_KEI))
+        Assert.AreEqual(0, actual(Koma.C_KYO))
+        Assert.AreEqual(0, actual(Koma.C_FU))
+        Assert.AreEqual(0, actual(Koma.C_GYOKU))
+        Assert.AreEqual(0, actual(Koma.C_OU))
+    End Sub
+
+    '''<summary>
+    '''KomabakoCounts のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomabakoCountsTest2()
+        Dim target As Kyokumen = New Kyokumen()
+        Dim te1 As Te = New Te(New KomaLocation(7, 7), KomaLocation.KomaBako, Koma.SENTE_FU, False)
+        Dim te2 As Te = New Te(New KomaLocation(3, 3), KomaLocation.KomaBako, Koma.GOTE_FU, False)
+        Dim te3 As Te = New Te(New KomaLocation(8, 8), KomaLocation.KomaBako, Koma.SENTE_KAKU, True)
+        target.Edit(te1)
+        target.Edit(te2)
+        target.Edit(te3)
+        Dim actual() As Integer = target.KomabakoCounts
+        Assert.AreEqual(Koma.C_KOMABAKO_MAX + 1, actual.Length)
+        Assert.AreEqual(0, actual(Koma.C_HISYA))
+        Assert.AreEqual(1, actual(Koma.C_KAKU))
+        Assert.AreEqual(0, actual(Koma.C_KIN))
+        Assert.AreEqual(0, actual(Koma.C_GIN))
+        Assert.AreEqual(0, actual(Koma.C_KEI))
+        Assert.AreEqual(0, actual(Koma.C_KYO))
+        Assert.AreEqual(2, actual(Koma.C_FU))
+        Assert.AreEqual(0, actual(Koma.C_GYOKU))
+        Assert.AreEqual(0, actual(Koma.C_OU))
+    End Sub
+
+    '''<summary>
+    '''KomabakoCounts のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub KomabakoCountsTest()
+        Dim target As Kyokumen = New Kyokumen(New Haichi.Jumaiochi)
+        Dim actual() As Integer = target.KomabakoCounts
+        Assert.AreEqual(Koma.C_KOMABAKO_MAX + 1, actual.Length)
+        Assert.AreEqual(1, actual(Koma.C_HISYA))
+        Assert.AreEqual(1, actual(Koma.C_KAKU))
+        Assert.AreEqual(2, actual(Koma.C_KIN))
+        Assert.AreEqual(2, actual(Koma.C_GIN))
+        Assert.AreEqual(2, actual(Koma.C_KEI))
+        Assert.AreEqual(2, actual(Koma.C_KYO))
+        Assert.AreEqual(0, actual(Koma.C_FU))
+        Assert.AreEqual(0, actual(Koma.C_GYOKU))
+        Assert.AreEqual(0, actual(Koma.C_OU))
+    End Sub
+End Class

Added: ShogiNextMove.Test/KyokumenUtilTest.vb
===================================================================
--- ShogiNextMove.Test/KyokumenUtilTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/KyokumenUtilTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,84 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''KyokumenUtilTest のテスト クラスです。すべての
+'''KyokumenUtilTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class KyokumenUtilTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''IsOuGyokuInSamePlayer のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsOuGyokuInSamePlayerTest() 
+        Dim kyokumen As Kyokumen = New Kyokumen
+        Assert.AreEqual(False, KyokumenUtil.IsOuGyokuInSamePlayer(kyokumen))
+        Dim te1 As Te = New Te(New KomaLocation(5, 1), KomaLocation.KomaBako, Koma.GOTE_OU, False)
+        Dim te2 As Te = New Te(KomaLocation.KomaBako, New KomaLocation(5, 5), Koma.SENTE_OU, False)
+        kyokumen.Edit(te1)
+        kyokumen.Edit(te2)
+        Assert.AreEqual(True, KyokumenUtil.IsOuGyokuInSamePlayer(kyokumen))
+    End Sub
+
+    '''<summary>
+    '''IsNifu のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub IsNifuTest()
+        Dim kyokumen As Kyokumen = New Kyokumen
+        Assert.AreEqual(False, KyokumenUtil.IsNifu(kyokumen))
+        Dim te1 As Te = New Te(New KomaLocation(3, 3), KomaLocation.KomaBako, Koma.GOTE_FU, False)
+        Dim te2 As Te = New Te(KomaLocation.KomaBako, New KomaLocation(4, 4), Koma.GOTE_FU, False)
+        kyokumen.Edit(te1)
+        kyokumen.Edit(te2)
+        Assert.AreEqual(True, KyokumenUtil.IsNifu(kyokumen))
+    End Sub
+End Class

Added: ShogiNextMove.Test/LocationTest.vb
===================================================================
--- ShogiNextMove.Test/LocationTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/LocationTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,104 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''LocationTest のテスト クラスです。すべての
+'''LocationTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class LocationTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''ParseLocation のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub ParseLocationTest()
+        Dim actual As komaLocation
+        actual = KomaLocation.ParseLocation("00")
+        Assert.AreEqual(True, actual.IsMochigoma)
+    End Sub
+
+    '''<summary>
+    '''ParseLocation のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub ParseLocationTest2()
+        Dim actual As KomaLocation
+        actual = KomaLocation.ParseLocation("31")
+        Assert.AreEqual(False, actual.IsMochigoma)
+        Assert.AreEqual(1, actual.Row)
+        Assert.AreEqual(3, actual.Col)
+    End Sub
+
+    <TestMethod()> _
+    Public Sub EqualTest()
+        Dim target1 As New KomaLocation(1, 1)
+        Dim target2 As New KomaLocation(2, 1)
+        Dim target3 As New KomaLocation(1, 1)
+        Dim target4 As KomaLocation = KomaLocation.Mochigoma
+        Dim target5 As KomaLocation = KomaLocation.KomaBako
+        Dim target6 As KomaLocation = KomaLocation.Mochigoma
+        Dim target7 As KomaLocation = KomaLocation.KomaBako
+        Assert.IsTrue(target1.Equals(target1))
+        Assert.IsTrue(target1.Equals(target3))
+        Assert.IsFalse(target1.Equals(target2))
+        Assert.IsFalse(target1.Equals(target4))
+        Assert.IsFalse(target1.Equals(target5))
+        Assert.IsFalse(target1.Equals(target6))
+        Assert.IsFalse(target1.Equals(target7))
+        Assert.IsTrue(target4.Equals(target4))
+        Assert.IsFalse(target4.Equals(target5))
+        Assert.IsTrue(target4.Equals(target6))
+        Assert.IsFalse(target4.Equals(target7))
+        Assert.IsTrue(target5.Equals(target5))
+        Assert.IsFalse(target5.Equals(target6))
+        Assert.IsTrue(target5.Equals(target7))
+
+    End Sub
+End Class

Added: ShogiNextMove.Test/My Project/AssemblyInfo.vb
===================================================================
--- ShogiNextMove.Test/My Project/AssemblyInfo.vb	                        (rev 0)
+++ ShogiNextMove.Test/My Project/AssemblyInfo.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,37 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+
+' アセンブリに関する一般情報は以下の属性セットを通して制御されます。
+' アセンブリに関連付けられている情報を変更するには、
+' これらの属性値を変更してください。
+
+' アセンブリ属性の値を確認します。
+
+<Assembly: AssemblyTitle("ShogiNextMove.Test")> 
+<Assembly: AssemblyDescription("")> 
+<Assembly: AssemblyCompany("")> 
+<Assembly: AssemblyProduct("ShogiNextMove.Test")> 
+<Assembly: AssemblyCopyright("Copyright ©  2014")> 
+<Assembly: AssemblyTrademark("")> 
+
+<Assembly: CLSCompliant(True)> 
+
+<Assembly: ComVisible(False)>
+
+'このプロジェクトが COM に公開される場合、次の GUID がタイプ ライブラリの ID になります。
+<Assembly: Guid("987069a4-7d68-446b-a23c-c7d747a328f2")> 
+
+' アセンブリのバージョン情報は、以下の 4 つの値で構成されています:
+'
+'      Major Version
+'      Minor Version 
+'      Build Number
+'      Revision
+'
+' すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 
+' 既定値にすることができます:
+' <Assembly: AssemblyVersion("1.0.*")> 
+
+<Assembly: AssemblyVersion("1.0.0.0")> 
+<Assembly: AssemblyFileVersion("1.0.0.0")> 

Added: ShogiNextMove.Test/ShogiNextMove.Test.vbproj
===================================================================
--- ShogiNextMove.Test/ShogiNextMove.Test.vbproj	                        (rev 0)
+++ ShogiNextMove.Test/ShogiNextMove.Test.vbproj	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>
+    </ProductVersion>
+    <SchemaVersion>
+    </SchemaVersion>
+    <ProjectGuid>{FFF08F65-C8F0-443A-B140-3494451BECC6}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <RootNamespace>ShogiNextMove.Test</RootNamespace>
+    <AssemblyName>ShogiNextMove.Test</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <MyType>Windows</MyType>
+    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+    <ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>
+    <ReferencePath>$(DevEnvDir)PublicAssemblies\</ReferencePath>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <DefineDebug>true</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DocumentationFile>ShogiNextMove.Test.xml</DocumentationFile>
+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <DefineDebug>false</DefineDebug>
+    <DefineTrace>true</DefineTrace>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DocumentationFile>ShogiNextMove.Test.xml</DocumentationFile>
+    <NoWarn>42016,41999,42017,42018,42019,42032,42036,42020,42021,42022</NoWarn>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionExplicit>On</OptionExplicit>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionCompare>Binary</OptionCompare>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionStrict>Off</OptionStrict>
+  </PropertyGroup>
+  <PropertyGroup>
+    <OptionInfer>On</OptionInfer>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core">
+      <RequiredTargetFramework>3.5</RequiredTargetFramework>
+    </Reference>
+    <Reference Include="System.Data" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+    <Reference Include="System.Xml.Linq" />
+  </ItemGroup>
+  <ItemGroup>
+    <Import Include="System" />
+    <Import Include="System.Collections" />
+    <Import Include="System.Collections.Generic" />
+    <Import Include="System.Data" />
+    <Import Include="System.Diagnostics" />
+    <Import Include="System.Linq" />
+    <Import Include="System.Xml.Linq" />
+    <Import Include="Microsoft.VisualBasic" />
+    <Import Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
+  </ItemGroup>
+  <ItemGroup>
+    <CodeAnalysisDependentAssemblyPaths Condition=" '$(VS100COMNTOOLS)' != '' " Include="$(VS100COMNTOOLS)..\IDE\PrivateAssemblies">
+      <Visible>False</Visible>
+    </CodeAnalysisDependentAssemblyPaths>
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="CSAKifuUtilTest.vb" />
+    <Compile Include="CSAKifuWriterTest.vb" />
+    <Compile Include="KifKifuUtilTest.vb" />
+    <Compile Include="KifuTest.vb" />
+    <Compile Include="KomaLocationTest.vb" />
+    <Compile Include="KomaMoveDirectionTest.vb" />
+    <Compile Include="KomaTest.vb" />
+    <Compile Include="KomaUtilTest.vb" />
+    <Compile Include="KyokumenHaichiCompTest.vb" />
+    <Compile Include="KyokumenTest.vb" />
+    <Compile Include="KyokumenUtilTest.vb" />
+    <Compile Include="LocationTest.vb" />
+    <Compile Include="My Project\AssemblyInfo.vb" />
+    <Compile Include="TeTest.vb" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\ShogiNextMove\ShogiNextMove.vbproj">
+      <Project>{96DB0781-3A38-48B7-92D3-E8743D6A9162}</Project>
+      <Name>ShogiNextMove</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.VisualBasic.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file

Added: ShogiNextMove.Test/TeTest.vb
===================================================================
--- ShogiNextMove.Test/TeTest.vb	                        (rev 0)
+++ ShogiNextMove.Test/TeTest.vb	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,99 @@
+Imports Microsoft.VisualStudio.TestTools.UnitTesting
+
+Imports ShogiNextMove.Board
+
+
+
+'''<summary>
+'''TeTest のテスト クラスです。すべての
+'''TeTest 単体テストをここに含めます
+'''</summary>
+<TestClass()> _
+Public Class TeTest
+
+
+    Private testContextInstance As TestContext
+
+    '''<summary>
+    '''現在のテストの実行についての情報および機能を
+    '''提供するテスト コンテキストを取得または設定します。
+    '''</summary>
+    Public Property TestContext() As TestContext
+        Get
+            Return testContextInstance
+        End Get
+        Set(value As TestContext)
+            testContextInstance = Value
+        End Set
+    End Property
+
+#Region "追加のテスト属性"
+    '
+    'テストを作成するときに、次の追加属性を使用することができます:
+    '
+    'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用
+    '<ClassInitialize()>  _
+    'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
+    'End Sub
+    '
+    'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用
+    '<ClassCleanup()>  _
+    'Public Shared Sub MyClassCleanup()
+    'End Sub
+    '
+    '各テストを実行する前にコードを実行するには、TestInitialize を使用
+    '<TestInitialize()>  _
+    'Public Sub MyTestInitialize()
+    'End Sub
+    '
+    '各テストを実行した後にコードを実行するには、TestCleanup を使用
+    '<TestCleanup()>  _
+    'Public Sub MyTestCleanup()
+    'End Sub
+    '
+#End Region
+
+
+    '''<summary>
+    '''MustPromote のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub MustPromoteTest()
+        Dim target1 As Te = New Te(KomaLocation.Mochigoma, New KomaLocation(9, 2), Koma.SENTE_KEI, False)
+        Dim target2 As Te = New Te(New KomaLocation(4, 5), New KomaLocation(5, 3), Koma.SENTE_KEI, False)
+        Dim target3 As Te = New Te(New KomaLocation(2, 4), New KomaLocation(2, 3), Koma.SENTE_FU, False)
+        Dim target4 As Te = New Te(New KomaLocation(2, 2), New KomaLocation(2, 1), Koma.SENTE_FU, False)
+        Dim target5 As Te = New Te(KomaLocation.Mochigoma, New KomaLocation(9, 9), Koma.GOTE_KEI, False)
+        Dim target6 As Te = New Te(New KomaLocation(6, 5), New KomaLocation(5, 7), Koma.GOTE_KEI, False)
+        Dim target7 As Te = New Te(New KomaLocation(8, 6), New KomaLocation(8, 7), Koma.GOTE_FU, False)
+        Dim target8 As Te = New Te(New KomaLocation(8, 8), New KomaLocation(8, 9), Koma.GOTE_FU, False)
+        Dim target9 As Te = New Te(New KomaLocation(9, 1), New KomaLocation(9, 9), Koma.GOTE_KYO, False)
+        Dim target10 As Te = New Te(New KomaLocation(9, 1), New KomaLocation(9, 8), Koma.GOTE_KYO, False)
+        Dim target11 As Te = New Te(KomaLocation.Mochigoma, KomaLocation.Mochigoma, Koma.SENTE_FU, False)
+        Dim target12 As Te = New Te(KomaLocation.Mochigoma, KomaLocation.KomaBako, Koma.SENTE_FU, False)
+        Assert.AreEqual(True, target1.MustPromote)
+        Assert.AreEqual(False, target2.MustPromote)
+        Assert.AreEqual(False, target3.MustPromote)
+        Assert.AreEqual(True, target4.MustPromote)
+        Assert.AreEqual(True, target5.MustPromote)
+        Assert.AreEqual(False, target6.MustPromote)
+        Assert.AreEqual(False, target7.MustPromote)
+        Assert.AreEqual(True, target8.MustPromote)
+        Assert.AreEqual(True, target9.MustPromote)
+        Assert.AreEqual(False, target10.MustPromote)
+        Assert.AreEqual(False, target11.MustPromote)
+        Assert.AreEqual(False, target12.MustPromote)
+    End Sub
+
+    '''<summary>
+    '''Equals のテスト
+    '''</summary>
+    <TestMethod()> _
+    Public Sub EqualsTest()
+        Dim target As Te = New Te(New KomaLocation(3, 3), New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        Dim comp As Te = New Te(New KomaLocation(3, 3), New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        Dim comp2 As Te = New Te(KomaLocation.Mochigoma, New KomaLocation(3, 4), Koma.GOTE_FU, False)
+        Assert.IsTrue(target.Equals(comp))
+        Assert.IsFalse(target.Equals(comp2))
+    End Sub
+End Class

Added: ShogiNextMove.vsmdi
===================================================================
--- ShogiNextMove.vsmdi	                        (rev 0)
+++ ShogiNextMove.vsmdi	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="テストの一覧" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="0c0ea35c-98d9-44d6-ae06-82e1a338d7b9" name="ローカル" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
\ No newline at end of file

Added: ShogiNextMove1.vsmdi
===================================================================
--- ShogiNextMove1.vsmdi	                        (rev 0)
+++ ShogiNextMove1.vsmdi	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="テストの一覧" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="0c0ea35c-98d9-44d6-ae06-82e1a338d7b9" name="ローカル" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
\ No newline at end of file

Added: ShogiNextMove2.vsmdi
===================================================================
--- ShogiNextMove2.vsmdi	                        (rev 0)
+++ ShogiNextMove2.vsmdi	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="テストの一覧" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="0c0ea35c-98d9-44d6-ae06-82e1a338d7b9" name="ローカル" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
\ No newline at end of file

Added: ShogiNextMove3.vsmdi
===================================================================
--- ShogiNextMove3.vsmdi	                        (rev 0)
+++ ShogiNextMove3.vsmdi	2016-02-22 06:48:06 UTC (rev 76)
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestLists xmlns="http://microsoft.com/schemas/VisualStudio/TeamTest/2010">
+  <TestList name="テストの一覧" id="8c43106b-9dc1-4907-a29f-aa66a61bf5b6">
+    <RunConfiguration id="0c0ea35c-98d9-44d6-ae06-82e1a338d7b9" name="ローカル" storage="local.testsettings" type="Microsoft.VisualStudio.TestTools.Common.TestRunConfiguration, Microsoft.VisualStudio.QualityTools.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  </TestList>
+</TestLists>
\ No newline at end of file




Shoginextmove-commit メーリングリストの案内
アーカイブの一覧に戻る