svnno****@sourc*****
svnno****@sourc*****
2014年 9月 16日 (火) 12:50:07 JST
Revision: 59 http://sourceforge.jp/projects/shoginextmove/scm/svn/commits/59 Author: bellyoshi Date: 2014-09-16 12:50:04 +0900 (Tue, 16 Sep 2014) Log Message: ----------- 駒が動ける場所以外に移動したときキャンセルされるようにした。 Modified Paths: -------------- ShogiNextMove/Board/KomaMoveValidater.vb ShogiNextMove/ShogiNextMove.vbproj ShogiNextMove.Test/ShogiNextMove.Test.vbproj Added Paths: ----------- ShogiNextMove/Board/KomaMoveDirection.vb ShogiNextMove.Test/KomaMoveDirectionTest.vb Added: ShogiNextMove/Board/KomaMoveDirection.vb =================================================================== --- ShogiNextMove/Board/KomaMoveDirection.vb (rev 0) +++ ShogiNextMove/Board/KomaMoveDirection.vb 2014-09-16 03:50:04 UTC (rev 59) @@ -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 Modified: ShogiNextMove/Board/KomaMoveValidater.vb =================================================================== --- ShogiNextMove/Board/KomaMoveValidater.vb 2014-09-16 02:08:48 UTC (rev 58) +++ ShogiNextMove/Board/KomaMoveValidater.vb 2014-09-16 03:50:04 UTC (rev 59) @@ -10,13 +10,252 @@ 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 + Return True + End If + Next End If - Return True + 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 Modified: ShogiNextMove/ShogiNextMove.vbproj =================================================================== --- ShogiNextMove/ShogiNextMove.vbproj 2014-09-16 02:08:48 UTC (rev 58) +++ ShogiNextMove/ShogiNextMove.vbproj 2014-09-16 03:50:04 UTC (rev 59) @@ -98,6 +98,7 @@ <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"> Added: ShogiNextMove.Test/KomaMoveDirectionTest.vb =================================================================== --- ShogiNextMove.Test/KomaMoveDirectionTest.vb (rev 0) +++ ShogiNextMove.Test/KomaMoveDirectionTest.vb 2014-09-16 03:50:04 UTC (rev 59) @@ -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 Modified: ShogiNextMove.Test/ShogiNextMove.Test.vbproj =================================================================== --- ShogiNextMove.Test/ShogiNextMove.Test.vbproj 2014-09-16 02:08:48 UTC (rev 58) +++ ShogiNextMove.Test/ShogiNextMove.Test.vbproj 2014-09-16 03:50:04 UTC (rev 59) @@ -83,6 +83,7 @@ <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" />