駒が動ける場所以外に移動したときキャンセルされるようにした。
| @@ -0,0 +1,78 @@ | ||
| 1 | +Imports Microsoft.VisualStudio.TestTools.UnitTesting | |
| 2 | + | |
| 3 | +Imports ShogiNextMove.Board | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | +'''<summary> | |
| 8 | +'''KomaMoveDirectionTest のテスト クラスです。すべての | |
| 9 | +'''KomaMoveDirectionTest 単体テストをここに含めます | |
| 10 | +'''</summary> | |
| 11 | +<TestClass()> _ | |
| 12 | +Public Class KomaMoveDirectionTest | |
| 13 | + | |
| 14 | + | |
| 15 | + Private testContextInstance As TestContext | |
| 16 | + | |
| 17 | + '''<summary> | |
| 18 | + '''現在のテストの実行についての情報および機能を | |
| 19 | + '''提供するテスト コンテキストを取得または設定します。 | |
| 20 | + '''</summary> | |
| 21 | + Public Property TestContext() As TestContext | |
| 22 | + Get | |
| 23 | + Return testContextInstance | |
| 24 | + End Get | |
| 25 | + Set(value As TestContext) | |
| 26 | + testContextInstance = Value | |
| 27 | + End Set | |
| 28 | + End Property | |
| 29 | + | |
| 30 | +#Region "追加のテスト属性" | |
| 31 | + ' | |
| 32 | + 'テストを作成するときに、次の追加属性を使用することができます: | |
| 33 | + ' | |
| 34 | + 'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用 | |
| 35 | + '<ClassInitialize()> _ | |
| 36 | + 'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext) | |
| 37 | + 'End Sub | |
| 38 | + ' | |
| 39 | + 'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用 | |
| 40 | + '<ClassCleanup()> _ | |
| 41 | + 'Public Shared Sub MyClassCleanup() | |
| 42 | + 'End Sub | |
| 43 | + ' | |
| 44 | + '各テストを実行する前にコードを実行するには、TestInitialize を使用 | |
| 45 | + '<TestInitialize()> _ | |
| 46 | + 'Public Sub MyTestInitialize() | |
| 47 | + 'End Sub | |
| 48 | + ' | |
| 49 | + '各テストを実行した後にコードを実行するには、TestCleanup を使用 | |
| 50 | + '<TestCleanup()> _ | |
| 51 | + 'Public Sub MyTestCleanup() | |
| 52 | + 'End Sub | |
| 53 | + ' | |
| 54 | +#End Region | |
| 55 | + | |
| 56 | + | |
| 57 | + ' '''<summary> | |
| 58 | + ' '''GetToLocations のテスト | |
| 59 | + ' '''</summary> | |
| 60 | + '<TestMethod()> _ | |
| 61 | + 'Public Sub GetToLocationsTest() | |
| 62 | + ' Dim komaDirection1 As New KomaMoveDirection(1, -1) | |
| 63 | + ' Dim komaDiretion2 As New KomaMoveDirection(1, 1, True) | |
| 64 | + | |
| 65 | + ' Dim from As New KomaLocation(2, 2) | |
| 66 | + ' Dim actual() As KomaLocation | |
| 67 | + ' actual = komaDirection1.GetToLocations(from) | |
| 68 | + ' Assert.AreEqual(1, actual.Count) | |
| 69 | + ' Assert.AreEqual(3, actual(0).Col) | |
| 70 | + ' Assert.AreEqual(1, actual(0).Row) | |
| 71 | + ' actual = komaDiretion2.GetToLocations(from) | |
| 72 | + ' Assert.AreEqual(7, actual.Count) | |
| 73 | + ' Assert.AreEqual(3, actual(0).Col) | |
| 74 | + ' Assert.AreEqual(3, actual(0).Row) | |
| 75 | + ' Assert.AreEqual(9, actual(6).Col) | |
| 76 | + ' Assert.AreEqual(9, actual(6).Row) | |
| 77 | + 'End Sub | |
| 78 | +End Class |
| @@ -10,13 +10,252 @@ | ||
| 10 | 10 | Private Sub New() |
| 11 | 11 | End Sub |
| 12 | 12 | |
| 13 | + Private direction()() As KomaMoveDirection = { | |
| 14 | + New KomaMoveDirection() {}, | |
| 15 | + New KomaMoveDirection() { | |
| 16 | + New KomaMoveDirection(0, -1)}, | |
| 17 | + New KomaMoveDirection() { | |
| 18 | + New KomaMoveDirection(0, -1, True)}, | |
| 19 | + New KomaMoveDirection() { | |
| 20 | + New KomaMoveDirection(1, -2), | |
| 21 | + New KomaMoveDirection(-1, -2)}, | |
| 22 | + New KomaMoveDirection() { | |
| 23 | + New KomaMoveDirection(1, -1), | |
| 24 | + New KomaMoveDirection(0, -1), | |
| 25 | + New KomaMoveDirection(-1, -1), | |
| 26 | + New KomaMoveDirection(1, 1), | |
| 27 | + New KomaMoveDirection(-1, 1)}, | |
| 28 | + New KomaMoveDirection() { | |
| 29 | + New KomaMoveDirection(1, -1), | |
| 30 | + New KomaMoveDirection(0, -1), | |
| 31 | + New KomaMoveDirection(-1, -1), | |
| 32 | + New KomaMoveDirection(1, 0), | |
| 33 | + New KomaMoveDirection(-1, 0), | |
| 34 | + New KomaMoveDirection(0, 1)}, | |
| 35 | + New KomaMoveDirection() { | |
| 36 | + New KomaMoveDirection(1, -1, True), | |
| 37 | + New KomaMoveDirection(1, 1, True), | |
| 38 | + New KomaMoveDirection(-1, -1, True), | |
| 39 | + New KomaMoveDirection(-1, 1, True)}, | |
| 40 | + New KomaMoveDirection() { | |
| 41 | + New KomaMoveDirection(0, 1, True), | |
| 42 | + New KomaMoveDirection(0, -1, True), | |
| 43 | + New KomaMoveDirection(1, 0, True), | |
| 44 | + New KomaMoveDirection(-1, 0, True)}, | |
| 45 | + New KomaMoveDirection() { | |
| 46 | + New KomaMoveDirection(1, -1), | |
| 47 | + New KomaMoveDirection(0, -1), | |
| 48 | + New KomaMoveDirection(-1, -1), | |
| 49 | + New KomaMoveDirection(1, 0), | |
| 50 | + New KomaMoveDirection(-1, 0), | |
| 51 | + New KomaMoveDirection(1, 1), | |
| 52 | + New KomaMoveDirection(0, 1), | |
| 53 | + New KomaMoveDirection(-1, 1)}, | |
| 54 | + New KomaMoveDirection() { | |
| 55 | + New KomaMoveDirection(1, -1), | |
| 56 | + New KomaMoveDirection(0, -1), | |
| 57 | + New KomaMoveDirection(-1, -1), | |
| 58 | + New KomaMoveDirection(1, 0), | |
| 59 | + New KomaMoveDirection(-1, 0), | |
| 60 | + New KomaMoveDirection(1, 1), | |
| 61 | + New KomaMoveDirection(0, 1), | |
| 62 | + New KomaMoveDirection(-1, 1)}, | |
| 63 | + New KomaMoveDirection() { | |
| 64 | + New KomaMoveDirection(1, -1), | |
| 65 | + New KomaMoveDirection(0, -1), | |
| 66 | + New KomaMoveDirection(-1, -1), | |
| 67 | + New KomaMoveDirection(1, 0), | |
| 68 | + New KomaMoveDirection(-1, 0), | |
| 69 | + New KomaMoveDirection(0, 1)}, | |
| 70 | + New KomaMoveDirection() { | |
| 71 | + New KomaMoveDirection(1, -1), | |
| 72 | + New KomaMoveDirection(0, -1), | |
| 73 | + New KomaMoveDirection(-1, -1), | |
| 74 | + New KomaMoveDirection(1, 0), | |
| 75 | + New KomaMoveDirection(-1, 0), | |
| 76 | + New KomaMoveDirection(0, 1)}, | |
| 77 | + New KomaMoveDirection() { | |
| 78 | + New KomaMoveDirection(1, -1), | |
| 79 | + New KomaMoveDirection(0, -1), | |
| 80 | + New KomaMoveDirection(-1, -1), | |
| 81 | + New KomaMoveDirection(1, 0), | |
| 82 | + New KomaMoveDirection(-1, 0), | |
| 83 | + New KomaMoveDirection(0, 1)}, | |
| 84 | + New KomaMoveDirection() { | |
| 85 | + New KomaMoveDirection(1, -1), | |
| 86 | + New KomaMoveDirection(0, -1), | |
| 87 | + New KomaMoveDirection(-1, -1), | |
| 88 | + New KomaMoveDirection(1, 0), | |
| 89 | + New KomaMoveDirection(-1, 0), | |
| 90 | + New KomaMoveDirection(0, 1)}, | |
| 91 | + New KomaMoveDirection() { | |
| 92 | + New KomaMoveDirection(1, -1, True), | |
| 93 | + New KomaMoveDirection(1, 1, True), | |
| 94 | + New KomaMoveDirection(-1, -1, True), | |
| 95 | + New KomaMoveDirection(-1, 1, True), | |
| 96 | + New KomaMoveDirection(0, -1), | |
| 97 | + New KomaMoveDirection(1, 0), | |
| 98 | + New KomaMoveDirection(-1, 0), | |
| 99 | + New KomaMoveDirection(0, 1)}, | |
| 100 | + New KomaMoveDirection() { | |
| 101 | + New KomaMoveDirection(0, 1, True), | |
| 102 | + New KomaMoveDirection(0, -1, True), | |
| 103 | + New KomaMoveDirection(1, 0, True), | |
| 104 | + New KomaMoveDirection(-1, 0, True), | |
| 105 | + New KomaMoveDirection(1, -1), | |
| 106 | + New KomaMoveDirection(-1, -1), | |
| 107 | + New KomaMoveDirection(1, 1), | |
| 108 | + New KomaMoveDirection(-1, 1)}, | |
| 109 | + New KomaMoveDirection() {}, | |
| 110 | + New KomaMoveDirection() { | |
| 111 | + New KomaMoveDirection(0, 1)}, | |
| 112 | + New KomaMoveDirection() { | |
| 113 | + New KomaMoveDirection(0, 1, True)}, | |
| 114 | + New KomaMoveDirection() { | |
| 115 | + New KomaMoveDirection(1, 2), | |
| 116 | + New KomaMoveDirection(-1, 2)}, | |
| 117 | + New KomaMoveDirection() { | |
| 118 | + New KomaMoveDirection(1, 1), | |
| 119 | + New KomaMoveDirection(0, 1), | |
| 120 | + New KomaMoveDirection(-1, 1), | |
| 121 | + New KomaMoveDirection(1, -1), | |
| 122 | + New KomaMoveDirection(-1, -1)}, | |
| 123 | + New KomaMoveDirection() { | |
| 124 | + New KomaMoveDirection(1, 1), | |
| 125 | + New KomaMoveDirection(0, 1), | |
| 126 | + New KomaMoveDirection(-1, 1), | |
| 127 | + New KomaMoveDirection(1, 0), | |
| 128 | + New KomaMoveDirection(-1, 0), | |
| 129 | + New KomaMoveDirection(0, -1)}, | |
| 130 | + New KomaMoveDirection() { | |
| 131 | + New KomaMoveDirection(1, -1, True), | |
| 132 | + New KomaMoveDirection(1, 1, True), | |
| 133 | + New KomaMoveDirection(-1, -1, True), | |
| 134 | + New KomaMoveDirection(-1, 1, True)}, | |
| 135 | + New KomaMoveDirection() { | |
| 136 | + New KomaMoveDirection(0, 1, True), | |
| 137 | + New KomaMoveDirection(0, -1, True), | |
| 138 | + New KomaMoveDirection(1, 0, True), | |
| 139 | + New KomaMoveDirection(-1, 0, True)}, | |
| 140 | + New KomaMoveDirection() { | |
| 141 | + New KomaMoveDirection(1, 1), | |
| 142 | + New KomaMoveDirection(0, 1), | |
| 143 | + New KomaMoveDirection(-1, 1), | |
| 144 | + New KomaMoveDirection(1, 0), | |
| 145 | + New KomaMoveDirection(-1, 0), | |
| 146 | + New KomaMoveDirection(1, -1), | |
| 147 | + New KomaMoveDirection(0, -1), | |
| 148 | + New KomaMoveDirection(-1, 1)}, | |
| 149 | + New KomaMoveDirection() { | |
| 150 | + New KomaMoveDirection(1, 1), | |
| 151 | + New KomaMoveDirection(0, 1), | |
| 152 | + New KomaMoveDirection(-1, 1), | |
| 153 | + New KomaMoveDirection(1, 0), | |
| 154 | + New KomaMoveDirection(-1, 0), | |
| 155 | + New KomaMoveDirection(1, -1), | |
| 156 | + New KomaMoveDirection(0, -1), | |
| 157 | + New KomaMoveDirection(-1, 1)}, | |
| 158 | + New KomaMoveDirection() { | |
| 159 | + New KomaMoveDirection(1, 1), | |
| 160 | + New KomaMoveDirection(0, 1), | |
| 161 | + New KomaMoveDirection(-1, 1), | |
| 162 | + New KomaMoveDirection(1, 0), | |
| 163 | + New KomaMoveDirection(-1, 0), | |
| 164 | + New KomaMoveDirection(0, -1)}, | |
| 165 | + New KomaMoveDirection() { | |
| 166 | + New KomaMoveDirection(1, 1), | |
| 167 | + New KomaMoveDirection(0, 1), | |
| 168 | + New KomaMoveDirection(-1, 1), | |
| 169 | + New KomaMoveDirection(1, 0), | |
| 170 | + New KomaMoveDirection(-1, 0), | |
| 171 | + New KomaMoveDirection(0, -1)}, | |
| 172 | + New KomaMoveDirection() { | |
| 173 | + New KomaMoveDirection(1, 1), | |
| 174 | + New KomaMoveDirection(0, 1), | |
| 175 | + New KomaMoveDirection(-1, 1), | |
| 176 | + New KomaMoveDirection(1, 0), | |
| 177 | + New KomaMoveDirection(-1, 0), | |
| 178 | + New KomaMoveDirection(0, -1)}, | |
| 179 | + New KomaMoveDirection() { | |
| 180 | + New KomaMoveDirection(1, 1), | |
| 181 | + New KomaMoveDirection(0, 1), | |
| 182 | + New KomaMoveDirection(-1, 1), | |
| 183 | + New KomaMoveDirection(1, 0), | |
| 184 | + New KomaMoveDirection(-1, 0), | |
| 185 | + New KomaMoveDirection(0, -1)}, | |
| 186 | + New KomaMoveDirection() { | |
| 187 | + New KomaMoveDirection(1, -1, True), | |
| 188 | + New KomaMoveDirection(1, 1, True), | |
| 189 | + New KomaMoveDirection(-1, -1, True), | |
| 190 | + New KomaMoveDirection(-1, 1, True), | |
| 191 | + New KomaMoveDirection(0, -1), | |
| 192 | + New KomaMoveDirection(1, 0), | |
| 193 | + New KomaMoveDirection(-1, 0), | |
| 194 | + New KomaMoveDirection(0, 1)}, | |
| 195 | + New KomaMoveDirection() { | |
| 196 | + New KomaMoveDirection(0, 1, True), | |
| 197 | + New KomaMoveDirection(0, -1, True), | |
| 198 | + New KomaMoveDirection(1, 0, True), | |
| 199 | + New KomaMoveDirection(-1, 0, True), | |
| 200 | + New KomaMoveDirection(1, -1), | |
| 201 | + New KomaMoveDirection(-1, -1), | |
| 202 | + New KomaMoveDirection(1, 1), | |
| 203 | + New KomaMoveDirection(-1, 1)} | |
| 204 | + } | |
| 205 | + | |
| 206 | + | |
| 13 | 207 | Public Function IsValidate(ByVal kyokumen As Kyokumen, ByVal te As Te) As Boolean |
| 14 | 208 | If te.FromLocation.IsMochigoma Then |
| 15 | 209 | Return IsValidatePut(kyokumen, te) |
| 210 | + Else | |
| 211 | + Dim locationList As KomaLocation() = GetToLocation(kyokumen, te.FromLocation, te.Piece.Value) | |
| 212 | + For Each l As KomaLocation In locationList | |
| 213 | + If l.Col = te.ToLocation.Col AndAlso l.Row = te.ToLocation.Row Then | |
| 214 | + Return True | |
| 215 | + End If | |
| 216 | + Next | |
| 16 | 217 | End If |
| 17 | - Return True | |
| 218 | + Return False | |
| 18 | 219 | End Function |
| 19 | 220 | |
| 221 | + Private Function IsValidToLocation(ByVal tocol As Integer, torow As Integer) As Boolean | |
| 222 | + Return 1 <= tocol AndAlso tocol <= 9 AndAlso _ | |
| 223 | + 1 <= torow AndAlso torow <= 9 | |
| 224 | + End Function | |
| 225 | + | |
| 226 | + Public Function GetToLocation(ByVal kyokumen As Kyokumen, fromLocation As KomaLocation, komaValue As Byte) As KomaLocation() | |
| 227 | + Dim drectionList As KomaMoveDirection() = direction(komaValue) | |
| 228 | + Dim komaLocations As New List(Of KomaLocation) | |
| 229 | + For Each d As KomaMoveDirection In drectionList | |
| 230 | + komaLocations.AddRange( | |
| 231 | + GetToLocationsLine(kyokumen, fromLocation, d)) | |
| 232 | + Next | |
| 233 | + Return komaLocations.ToArray | |
| 234 | + End Function | |
| 235 | + | |
| 236 | + Public Function GetToLocationsLine(ByVal kyokumen As Kyokumen, ByVal fromLocation As KomaLocation, d As KomaMoveDirection) As KomaLocation() | |
| 237 | + | |
| 238 | + Dim komaLocations As New List(Of KomaLocation) | |
| 239 | + Dim tocol As Integer = fromLocation.Col | |
| 240 | + Dim torow As Integer = fromLocation.Row | |
| 241 | + Dim i As Integer = 1 | |
| 242 | + Do While i = 1 OrElse (i < 9 AndAlso d.Line) | |
| 243 | + tocol += d.Col | |
| 244 | + torow += d.Row | |
| 245 | + If IsValidToLocation(tocol, torow) Then | |
| 246 | + komaLocations.Add(New KomaLocation(tocol, torow)) | |
| 247 | + Else | |
| 248 | + Exit Do | |
| 249 | + End If | |
| 250 | + If Not kyokumen.GetMasu(New KomaLocation(tocol, torow)).IsEmpty Then | |
| 251 | + Exit Do | |
| 252 | + End If | |
| 253 | + i += 1 | |
| 254 | + Loop | |
| 255 | + | |
| 256 | + Return komaLocations.ToArray | |
| 257 | + End Function | |
| 258 | + | |
| 20 | 259 | Private Function IsValidatePut(ByVal kyokumen As Kyokumen, ByVal te As Te) As Boolean |
| 21 | 260 | Dim tolocation As KomaLocation = te.ToLocation |
| 22 | 261 | If Not kyokumen.GetMasu(tolocation).IsEmpty Then |
| @@ -0,0 +1,43 @@ | ||
| 1 | +Namespace Board | |
| 2 | + | |
| 3 | + | |
| 4 | + Public Class KomaMoveDirection | |
| 5 | + | |
| 6 | + Private _col As Integer | |
| 7 | + Public ReadOnly Property Col As Integer | |
| 8 | + Get | |
| 9 | + Return _col | |
| 10 | + End Get | |
| 11 | + End Property | |
| 12 | + | |
| 13 | + Private _row As Integer | |
| 14 | + Public ReadOnly Property Row As Integer | |
| 15 | + Get | |
| 16 | + Return _row | |
| 17 | + End Get | |
| 18 | + End Property | |
| 19 | + | |
| 20 | + Private _line As Boolean | |
| 21 | + Public ReadOnly Property Line As Boolean | |
| 22 | + Get | |
| 23 | + Return _line | |
| 24 | + End Get | |
| 25 | + End Property | |
| 26 | + | |
| 27 | + Sub New(ByVal col As Integer, row As Integer) | |
| 28 | + _col = col | |
| 29 | + _row = row | |
| 30 | + End Sub | |
| 31 | + | |
| 32 | + Sub New(ByVal col As Integer, row As Integer, isLine As Boolean) | |
| 33 | + _col = col | |
| 34 | + _row = row | |
| 35 | + _line = isLine | |
| 36 | + End Sub | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + End Class | |
| 42 | + | |
| 43 | +End Namespace | |
| \ No newline at end of file |