[Shoginextmove-commit] [shoginextmove][59] 駒が動ける場所以外に移動したときキャンセルされるようにした。

Back to archive index

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" />




Shoginextmove-commit メーリングリストの案内
Back to archive index