CSAKifuUtilをSigleton化
| @@ -30,14 +30,16 @@ | ||
| 30 | 30 | End Property |
| 31 | 31 | |
| 32 | 32 | #Region "追加のテスト属性" |
| 33 | + Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance | |
| 33 | 34 | ' |
| 34 | 35 | 'テストを作成するときに、次の追加属性を使用することができます: |
| 35 | 36 | ' |
| 36 | 37 | 'クラスの最初のテストを実行する前にコードを実行するには、ClassInitialize を使用 |
| 37 | - '<ClassInitialize()> _ | |
| 38 | + '<ClassInitialize()> _ | |
| 38 | 39 | 'Public Shared Sub MyClassInitialize(ByVal testContext As TestContext) |
| 40 | + | |
| 39 | 41 | 'End Sub |
| 40 | - ' | |
| 42 | + '' | |
| 41 | 43 | 'クラスのすべてのテストを実行した後にコードを実行するには、ClassCleanup を使用 |
| 42 | 44 | '<ClassCleanup()> _ |
| 43 | 45 | 'Public Shared Sub MyClassCleanup() |
| @@ -64,11 +66,11 @@ | ||
| 64 | 66 | '''</summary> |
| 65 | 67 | <TestMethod()> _ |
| 66 | 68 | Public Sub KomaToCSANameTest() |
| 67 | - Assert.AreEqual("KY", CSAKifuUtil.KomaToCSAName(Koma.C_KYO)) | |
| 68 | - Assert.AreEqual("FU", CSAKifuUtil.KomaToCSAName(Koma.C_FU)) | |
| 69 | - Assert.AreEqual("HI", CSAKifuUtil.KomaToCSAName(Koma.C_HISYA)) | |
| 70 | - Assert.AreEqual("OU", CSAKifuUtil.KomaToCSAName(Koma.C_GYOKU)) | |
| 71 | - Assert.AreEqual("OU", CSAKifuUtil.KomaToCSAName(Koma.C_OU)) | |
| 69 | + Assert.AreEqual("KY", _CSAKifuUtil.KomaToCSAName(Koma.C_KYO)) | |
| 70 | + Assert.AreEqual("FU", _CSAKifuUtil.KomaToCSAName(Koma.C_FU)) | |
| 71 | + Assert.AreEqual("HI", _CSAKifuUtil.KomaToCSAName(Koma.C_HISYA)) | |
| 72 | + Assert.AreEqual("OU", _CSAKifuUtil.KomaToCSAName(Koma.C_GYOKU)) | |
| 73 | + Assert.AreEqual("OU", _CSAKifuUtil.KomaToCSAName(Koma.C_OU)) | |
| 72 | 74 | End Sub |
| 73 | 75 | |
| 74 | 76 | '''<summary> |
| @@ -76,11 +78,11 @@ | ||
| 76 | 78 | '''</summary> |
| 77 | 79 | <TestMethod()> _ |
| 78 | 80 | Public Sub KomaToCSANameWithWhichTest() |
| 79 | - Assert.AreEqual("+FU", CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_FU)) | |
| 80 | - Assert.AreEqual("-FU", CSAKifuUtil.KomaToCSANameWithWhich(Koma.GOTE_FU)) | |
| 81 | - Assert.AreEqual("+HI", CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_HISYA)) | |
| 82 | - Assert.AreEqual("+OU", CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_OU)) | |
| 83 | - Assert.AreEqual("+OU", CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_GYOKU)) | |
| 81 | + Assert.AreEqual("+FU", _CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_FU)) | |
| 82 | + Assert.AreEqual("-FU", _CSAKifuUtil.KomaToCSANameWithWhich(Koma.GOTE_FU)) | |
| 83 | + Assert.AreEqual("+HI", _CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_HISYA)) | |
| 84 | + Assert.AreEqual("+OU", _CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_OU)) | |
| 85 | + Assert.AreEqual("+OU", _CSAKifuUtil.KomaToCSANameWithWhich(Koma.SENTE_GYOKU)) | |
| 84 | 86 | End Sub |
| 85 | 87 | |
| 86 | 88 | '''<summary> |
| @@ -99,7 +101,7 @@ | ||
| 99 | 101 | <TestMethod()> _ |
| 100 | 102 | Public Sub CSAStringToNullMoveTest() |
| 101 | 103 | Dim actual As Te |
| 102 | - actual = CSAKifuUtil.CSAStringToNullMove("%TORYO", Koma.GOTE) | |
| 104 | + actual = _CSAKifuUtil.CSAStringToNullMove("%TORYO", Koma.GOTE) | |
| 103 | 105 | Assert.AreEqual(True, actual.IsNullMove) |
| 104 | 106 | Assert.AreEqual(NullMoveType.TORYO, actual.NullMoveType) |
| 105 | 107 | End Sub |
| @@ -109,7 +111,7 @@ | ||
| 109 | 111 | '''</summary> |
| 110 | 112 | <TestMethod()> _ |
| 111 | 113 | Public Sub CSAParseThinkTimeTest() |
| 112 | - Assert.AreEqual(6, CSAKifuUtil.CSAParseThinkTime("-3334FU,T6")) | |
| 114 | + Assert.AreEqual(6, _CSAKifuUtil.CSAParseThinkTime("-3334FU,T6")) | |
| 113 | 115 | End Sub |
| 114 | 116 | |
| 115 | 117 | '''<summary> |
| @@ -119,7 +121,7 @@ | ||
| 119 | 121 | Public Sub CSAMoveStringToTeTest() |
| 120 | 122 | Dim line As String = "-3334FU" |
| 121 | 123 | Dim kyokumen As New Kyokumen |
| 122 | - Dim actual As Te = CSAKifuUtil.CSAMoveStringToTe(line, kyokumen) | |
| 124 | + Dim actual As Te = _CSAKifuUtil.CSAMoveStringToTe(line, kyokumen) | |
| 123 | 125 | Assert.AreEqual(4, actual.ToLocation.Row) |
| 124 | 126 | Assert.AreEqual(3, actual.ToLocation.Col) |
| 125 | 127 | Assert.AreEqual(3, actual.FromLocation.Row) |
| @@ -134,14 +136,14 @@ | ||
| 134 | 136 | '''</summary> |
| 135 | 137 | <TestMethod()> _ |
| 136 | 138 | Public Sub CSAKomaNameWithWhichToValueTest() |
| 137 | - Assert.AreEqual(Koma.SENTE_FU, CSAKifuUtil.CSAKomaNameWithWhichToValue("+FU")) | |
| 138 | - Assert.AreEqual(Koma.SENTE_GYOKU, CSAKifuUtil.CSAKomaNameWithWhichToValue("+OU")) | |
| 139 | - Assert.AreEqual(Koma.GOTE_FU, CSAKifuUtil.CSAKomaNameWithWhichToValue("-FU")) | |
| 140 | - Assert.AreEqual(Koma.GOTE_RYU, CSAKifuUtil.CSAKomaNameWithWhichToValue("-RY")) | |
| 141 | - Assert.AreEqual(Koma.GOTE_OU, CSAKifuUtil.CSAKomaNameWithWhichToValue("-OU")) | |
| 142 | - Assert.AreEqual(CByte(0), CSAKifuUtil.CSAKomaNameWithWhichToValue(" * ")) | |
| 143 | - Assert.AreEqual(Koma.SENTE_HISYA, CSAKifuUtil.CSAKomaNameWithWhichToValue("+HI")) | |
| 144 | - Assert.AreEqual(Koma.GOTE_KAKU, CSAKifuUtil.CSAKomaNameWithWhichToValue("-KA")) | |
| 139 | + Assert.AreEqual(Koma.SENTE_FU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("+FU")) | |
| 140 | + Assert.AreEqual(Koma.SENTE_GYOKU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("+OU")) | |
| 141 | + Assert.AreEqual(Koma.GOTE_FU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("-FU")) | |
| 142 | + Assert.AreEqual(Koma.GOTE_RYU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("-RY")) | |
| 143 | + Assert.AreEqual(Koma.GOTE_OU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("-OU")) | |
| 144 | + Assert.AreEqual(CByte(0), _CSAKifuUtil.CSAKomaNameWithWhichToValue(" * ")) | |
| 145 | + Assert.AreEqual(Koma.SENTE_HISYA, _CSAKifuUtil.CSAKomaNameWithWhichToValue("+HI")) | |
| 146 | + Assert.AreEqual(Koma.GOTE_KAKU, _CSAKifuUtil.CSAKomaNameWithWhichToValue("-KA")) | |
| 145 | 147 | End Sub |
| 146 | 148 | |
| 147 | 149 | '''<summary> |
| @@ -150,8 +152,8 @@ | ||
| 150 | 152 | <TestMethod()> _ |
| 151 | 153 | Public Sub CSAKomaNameToValueTest() |
| 152 | 154 | |
| 153 | - Assert.AreEqual(Koma.C_FU, CSAKifuUtil.CSAKomaNameToValue("FU")) | |
| 154 | - Assert.AreEqual(Koma.C_OU, CSAKifuUtil.CSAKomaNameToValue("OU")) | |
| 155 | + Assert.AreEqual(Koma.C_FU, _CSAKifuUtil.CSAKomaNameToValue("FU")) | |
| 156 | + Assert.AreEqual(Koma.C_OU, _CSAKifuUtil.CSAKomaNameToValue("OU")) | |
| 155 | 157 | |
| 156 | 158 | End Sub |
| 157 | 159 | End Class |
| @@ -0,0 +1,126 @@ | ||
| 1 | +Imports ShogiNextMove.Board | |
| 2 | + | |
| 3 | +Namespace Board.Kifu | |
| 4 | + | |
| 5 | + Public MustInherit Class KifuUtilBase | |
| 6 | + | |
| 7 | + Protected MustOverride ReadOnly Property nullMoveCSAStrArray As String() | |
| 8 | + | |
| 9 | + Protected MustOverride ReadOnly Property komaCSANameArray As String() | |
| 10 | + | |
| 11 | + Protected MustOverride ReadOnly Property komaCSANameWithWhichArray As String() | |
| 12 | + | |
| 13 | + Public Function KomaToCSAName(ByVal komaValueWithWhich As Byte) As String | |
| 14 | + komaValueWithWhich = Board.KomaUtil.GyokuToOu(komaValueWithWhich) | |
| 15 | + Dim komaKind As Byte = Board.KomaUtil.KomaKind(komaValueWithWhich) | |
| 16 | + Debug.Assert(komaKind < komaCSANameArray.Length) | |
| 17 | + Return komaCSANameArray(komaKind) | |
| 18 | + End Function | |
| 19 | + | |
| 20 | + Public Function CSAKomaNameToValue(ByVal komaName As String) As Byte | |
| 21 | + For i As Integer = 0 To komaCSANameArray.Length - 1 | |
| 22 | + If komaName = komaCSANameArray(i) Then | |
| 23 | + Return CByte(i) | |
| 24 | + End If | |
| 25 | + Next | |
| 26 | + | |
| 27 | + Debug.Assert(False) | |
| 28 | + Return 0 | |
| 29 | + End Function | |
| 30 | + | |
| 31 | + Public Function KomaToCSANameWithWhich(ByVal komaValue As Byte) As String | |
| 32 | + Debug.Assert(komaValue < komaCSANameWithWhichArray.Length) | |
| 33 | + If komaValue = Koma.SENTE_OU Then | |
| 34 | + komaValue = Koma.SENTE_GYOKU | |
| 35 | + ElseIf komaValue = Koma.GOTE_GYOKU Then | |
| 36 | + komaValue = Koma.GOTE_OU | |
| 37 | + End If | |
| 38 | + Return komaCSANameWithWhichArray(komaValue) | |
| 39 | + End Function | |
| 40 | + | |
| 41 | + | |
| 42 | + Public Function CSAKomaNameWithWhichToValue(ByVal komaName As String) As Byte | |
| 43 | + For i As Integer = 0 To komaCSANameWithWhichArray.Length - 1 | |
| 44 | + If komaName = komaCSANameWithWhichArray(i) Then | |
| 45 | + Return CType(i, Byte) | |
| 46 | + End If | |
| 47 | + Next | |
| 48 | + Debug.Assert(False) | |
| 49 | + Return 0 | |
| 50 | + End Function | |
| 51 | + | |
| 52 | + Public Function CSAMoveStringToTe(line As String, kyokumen As Board.Kyokumen) As Board.Te | |
| 53 | + | |
| 54 | + Debug.Assert(Not line.Length < 7) | |
| 55 | + If line.Length < 7 Then | |
| 56 | + Return Nothing | |
| 57 | + End If | |
| 58 | + | |
| 59 | + Dim which As Byte | |
| 60 | + If line.StartsWith("+") Then | |
| 61 | + which = Board.Koma.SENTE | |
| 62 | + ElseIf line.StartsWith("-") Then | |
| 63 | + which = Board.Koma.GOTE | |
| 64 | + Else | |
| 65 | + Debug.Assert(False) | |
| 66 | + End If | |
| 67 | + | |
| 68 | + Dim fromLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(1, 2)) | |
| 69 | + Dim toLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(3, 2)) | |
| 70 | + Dim komaName As String = line.Substring(5, 2) | |
| 71 | + Dim komaValue As Byte = Me.CSAKomaNameToValue(komaName) + which | |
| 72 | + Debug.Assert(komaValue <> 0) | |
| 73 | + If komaValue = 0 Then | |
| 74 | + Return Nothing | |
| 75 | + End If | |
| 76 | + | |
| 77 | + If fromLocation.IsMochigoma Then | |
| 78 | + Return New Board.Te(fromLocation, toLocation, komaValue, False) | |
| 79 | + End If | |
| 80 | + | |
| 81 | + Dim preValue As Koma = kyokumen.GetMasu(fromLocation) | |
| 82 | + Dim isPromote As Boolean = CommonKifuUtil.IsPromoteKoma(komaValue, preValue.Value) | |
| 83 | + | |
| 84 | + If komaValue = KomaUtil.KomaKind(Koma.C_OU) Then | |
| 85 | + komaValue = preValue.Value | |
| 86 | + End If | |
| 87 | + | |
| 88 | + Return New Board.Te(fromLocation, toLocation, komaValue, isPromote) | |
| 89 | + | |
| 90 | + End Function | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + Public Function CSAParseThinkTime(ByVal line As String) As Integer | |
| 96 | + Debug.Assert(7 < line.Length) | |
| 97 | + Dim thinkTime As Integer | |
| 98 | + Dim array As String() = line.Split({","}, StringSplitOptions.RemoveEmptyEntries) | |
| 99 | + If array.Length > 1 Then | |
| 100 | + Dim text As String = array(1) | |
| 101 | + Dim idx As Integer = text.IndexOf("T") | |
| 102 | + If idx <> -1 Then | |
| 103 | + Integer.TryParse(text.Substring(idx + 1), thinkTime) | |
| 104 | + End If | |
| 105 | + End If | |
| 106 | + Return thinkTime | |
| 107 | + End Function | |
| 108 | + | |
| 109 | + | |
| 110 | + Public Function CSAStringToNullMove(moveStr As String, which As Byte) As Board.Te | |
| 111 | + Dim array As String() = Me.nullMoveCSAStrArray | |
| 112 | + For i As Integer = 1 To array.Length - 1 | |
| 113 | + Dim value As String = array(i) | |
| 114 | + If moveStr.IndexOf(value) <> -1 Then | |
| 115 | + Return New Board.Te(CType(i, Board.NullMoveType), which) | |
| 116 | + End If | |
| 117 | + Next | |
| 118 | + Return Nothing | |
| 119 | + End Function | |
| 120 | + | |
| 121 | + Public Function NullMoveToCSAString(ByVal nullmovetype As NullMoveType) As String | |
| 122 | + Return nullMoveCSAStrArray(CInt(nullmovetype)) | |
| 123 | + End Function | |
| 124 | + End Class | |
| 125 | + | |
| 126 | +End Namespace | |
| \ No newline at end of file |
| @@ -5,6 +5,8 @@ | ||
| 5 | 5 | Private _kifu As Kifu |
| 6 | 6 | Dim _firstKyokumen As Kyokumen |
| 7 | 7 | |
| 8 | + Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance() | |
| 9 | + | |
| 8 | 10 | Public Function ReadCSAString(kifuStr As String) As Kifu |
| 9 | 11 | _kifu = New Kifu |
| 10 | 12 | _firstKyokumen = New Kyokumen |
| @@ -65,13 +67,13 @@ | ||
| 65 | 67 | Return flag |
| 66 | 68 | End If |
| 67 | 69 | |
| 68 | - Dim te As Te = CSAKifuUtil.CSAMoveStringToTe(text, _kifu.LastKyokumen) | |
| 70 | + Dim te As Te = _CSAKifuUtil.CSAMoveStringToTe(text, _kifu.LastKyokumen) | |
| 69 | 71 | If te Is Nothing Then |
| 70 | 72 | Return flag |
| 71 | 73 | End If |
| 72 | 74 | Dim thinkTime As Integer = 0 |
| 73 | 75 | If text.Length > 7 Then |
| 74 | - thinkTime = CSAKifuUtil.CSAParseThinkTime(text) | |
| 76 | + thinkTime = _CSAKifuUtil.CSAParseThinkTime(text) | |
| 75 | 77 | End If |
| 76 | 78 | |
| 77 | 79 | _kifu.AddMove(te, thinkTime) |
| @@ -80,7 +82,7 @@ | ||
| 80 | 82 | Return flag |
| 81 | 83 | End If |
| 82 | 84 | |
| 83 | - Dim te2 As Te = CSAKifuUtil.CSAStringToNullMove(text, _kifu.LastKyokumen.Turn) | |
| 85 | + Dim te2 As Te = _CSAKifuUtil.CSAStringToNullMove(text, _kifu.LastKyokumen.Turn) | |
| 84 | 86 | If te2 Is Nothing Then |
| 85 | 87 | Return flag |
| 86 | 88 | End If |
| @@ -109,7 +111,7 @@ | ||
| 109 | 111 | Exit While |
| 110 | 112 | End If |
| 111 | 113 | Dim komaStr As String = line.Substring(num + 2, 2) |
| 112 | - Dim komaValue As Byte = CSAKifuUtil.CSAKomaNameToValue(komaStr) | |
| 114 | + Dim komaValue As Byte = _CSAKifuUtil.CSAKomaNameToValue(komaStr) | |
| 113 | 115 | h.KomaOchi(l.Col, l.Row, komaValue) |
| 114 | 116 | num += 4 |
| 115 | 117 | End While |
| @@ -142,7 +144,7 @@ | ||
| 142 | 144 | End If |
| 143 | 145 | ParseMochigomaAll(which) |
| 144 | 146 | Else |
| 145 | - Dim b As Byte = CSAKifuUtil.CSAKomaNameToValue(komaName) | |
| 147 | + Dim b As Byte = _CSAKifuUtil.CSAKomaNameToValue(komaName) | |
| 146 | 148 | Debug.Assert(b <> 0) |
| 147 | 149 | If b = 0 Then |
| 148 | 150 | Exit Sub |
| @@ -188,7 +190,7 @@ | ||
| 188 | 190 | |
| 189 | 191 | For col As Integer = 9 To 1 Step -1 |
| 190 | 192 | Dim komaName As String = line.Substring(3 * (9 - col) + 2, 3) |
| 191 | - Dim b As Byte = CSAKifuUtil.CSAKomaNameWithWhichToValue(komaName) | |
| 193 | + Dim b As Byte = _CSAKifuUtil.CSAKomaNameWithWhichToValue(komaName) | |
| 192 | 194 | _firstKyokumen.SetMasu(New KomaLocation(col, row), New Koma(b)) |
| 193 | 195 | Next |
| 194 | 196 |
| @@ -6,6 +6,8 @@ | ||
| 6 | 6 | |
| 7 | 7 | Private _firstKyokumen As Kyokumen |
| 8 | 8 | |
| 9 | + Private _CSAKifuUtil As CSAKifuUtil = CSAKifuUtil.GetInstance | |
| 10 | + | |
| 9 | 11 | Public Function MakeKifuCSAString(kifu As Kifu) As String |
| 10 | 12 | _kifu = kifu |
| 11 | 13 | _firstKyokumen = kifu.KyokumenList(0) |
| @@ -102,7 +104,7 @@ | ||
| 102 | 104 | Dim text As String = "P" |
| 103 | 105 | text += dan.ToString() |
| 104 | 106 | For i As Integer = 9 To 1 Step -1 |
| 105 | - text += CSAKifuUtil.KomaToCSANameWithWhich(_firstKyokumen.GetMasu(i, dan).Value) | |
| 107 | + text += _CSAKifuUtil.KomaToCSANameWithWhich(_firstKyokumen.GetMasu(i, dan).Value) | |
| 106 | 108 | Next |
| 107 | 109 | Return text |
| 108 | 110 | End Function |
| @@ -112,7 +114,7 @@ | ||
| 112 | 114 | For i As Integer = Koma.C_HISYA To Koma.C_FU Step -1 |
| 113 | 115 | Dim komaValue = CByte(i) |
| 114 | 116 | For j As Integer = 1 To _firstKyokumen.SenteHand(komaValue) |
| 115 | - textBuilder.AppendFormat("00{0}", CSAKifuUtil.KomaToCSAName(komaValue)) | |
| 117 | + textBuilder.AppendFormat("00{0}", _CSAKifuUtil.KomaToCSAName(komaValue)) | |
| 116 | 118 | Next |
| 117 | 119 | Next |
| 118 | 120 | Return textBuilder.ToString |
| @@ -123,7 +125,7 @@ | ||
| 123 | 125 | For i As Integer = Koma.C_HISYA To Koma.C_FU Step -1 |
| 124 | 126 | Dim komaValue = CByte(i) |
| 125 | 127 | For j As Integer = 1 To _firstKyokumen.GoteHand(komaValue) |
| 126 | - textBuilder.AppendFormat("00{0}", CSAKifuUtil.KomaToCSAName(komaValue)) | |
| 128 | + textBuilder.AppendFormat("00{0}", _CSAKifuUtil.KomaToCSAName(komaValue)) | |
| 127 | 129 | Next |
| 128 | 130 | Next |
| 129 | 131 | Return textBuilder.ToString |
| @@ -154,7 +156,7 @@ | ||
| 154 | 156 | str += MoveToCSAString(te) |
| 155 | 157 | result = str + ",T" + thinkTime.ToString() |
| 156 | 158 | Else |
| 157 | - Dim text As String = CSAKifuUtil.NullMoveToCSAString(te.NullMoveType) | |
| 159 | + Dim text As String = _CSAKifuUtil.NullMoveToCSAString(te.NullMoveType) | |
| 158 | 160 | If te.NullMoveType = NullMoveType.ILLEGAL_ACTION Then |
| 159 | 161 | If te.IsGote Then |
| 160 | 162 | text = "%-" + text |
| @@ -179,7 +181,7 @@ | ||
| 179 | 181 | Dim str As String = LocationToCSAString(te.FromLocation) |
| 180 | 182 | Dim str2 As String = LocationToCSAString(te.ToLocation) |
| 181 | 183 | Dim b As Byte = te.KomaKind |
| 182 | - Dim str3 As String = CSAKifuUtil.KomaToCSAName(te.KomaKind) | |
| 184 | + Dim str3 As String = _CSAKifuUtil.KomaToCSAName(te.KomaKind) | |
| 183 | 185 | Return str + str2 + str3 |
| 184 | 186 | End Function |
| 185 | 187 |
| @@ -4,36 +4,61 @@ | ||
| 4 | 4 | |
| 5 | 5 | |
| 6 | 6 | Public Class CSAKifuUtil |
| 7 | + Inherits KifuUtilBase | |
| 7 | 8 | |
| 8 | - Private Shared nullMoveCSAStrArray As String() = { | |
| 9 | - "", | |
| 10 | - "%CHUDAN", | |
| 11 | - "%TSUMI", | |
| 12 | - "%TORYO", | |
| 13 | - "%SENNICHITE", | |
| 14 | - "%TIME_UP", | |
| 15 | - "%ILLEGAL_MOVE", | |
| 16 | - "%JISHOGI", | |
| 17 | - "ILLEGAL_ACTION"} | |
| 18 | 9 | |
| 19 | - Private Shared komaCSANameArray As String() = { | |
| 20 | - "", | |
| 21 | - "FU", | |
| 22 | - "KY", | |
| 23 | - "KE", | |
| 24 | - "GI", | |
| 25 | - "KI", | |
| 26 | - "KA", | |
| 27 | - "HI", | |
| 28 | - "OU", | |
| 29 | - "", | |
| 30 | - "TO", | |
| 31 | - "NY", | |
| 32 | - "NK", | |
| 33 | - "NG", | |
| 34 | - "UM", | |
| 35 | - "RY"} | |
| 36 | - Private Shared komaCSANameWithWhichArray As String() = { | |
| 10 | + | |
| 11 | + | |
| 12 | + Private Shared _instance As New CSAKifuUtil | |
| 13 | + Private Sub New() | |
| 14 | + End Sub | |
| 15 | + Public Shared Function GetInstance() As CSAKifuUtil | |
| 16 | + Return _instance | |
| 17 | + End Function | |
| 18 | + | |
| 19 | + | |
| 20 | + Protected Overrides ReadOnly Property nullMoveCSAStrArray As String() | |
| 21 | + Get | |
| 22 | + Dim arrray As String() = { | |
| 23 | + "", | |
| 24 | + "%CHUDAN", | |
| 25 | + "%TSUMI", | |
| 26 | + "%TORYO", | |
| 27 | + "%SENNICHITE", | |
| 28 | + "%TIME_UP", | |
| 29 | + "%ILLEGAL_MOVE", | |
| 30 | + "%JISHOGI", | |
| 31 | + "ILLEGAL_ACTION"} | |
| 32 | + Return arrray | |
| 33 | + End Get | |
| 34 | + End Property | |
| 35 | + | |
| 36 | + Protected Overrides ReadOnly Property komaCSANameArray As String() | |
| 37 | + Get | |
| 38 | + Dim array As String() = { | |
| 39 | + "", | |
| 40 | + "FU", | |
| 41 | + "KY", | |
| 42 | + "KE", | |
| 43 | + "GI", | |
| 44 | + "KI", | |
| 45 | + "KA", | |
| 46 | + "HI", | |
| 47 | + "OU", | |
| 48 | + "", | |
| 49 | + "TO", | |
| 50 | + "NY", | |
| 51 | + "NK", | |
| 52 | + "NG", | |
| 53 | + "UM", | |
| 54 | + "RY"} | |
| 55 | + Return array | |
| 56 | + End Get | |
| 57 | + End Property | |
| 58 | + | |
| 59 | + Protected Overrides ReadOnly Property komaCSANameWithWhichArray As String() | |
| 60 | + Get | |
| 61 | + Dim array As String() = { | |
| 37 | 62 | " * ", |
| 38 | 63 | "+FU", |
| 39 | 64 | "+KY", |
| @@ -66,120 +91,9 @@ | ||
| 66 | 91 | "-NG", |
| 67 | 92 | "-UM", |
| 68 | 93 | "-RY"} |
| 69 | - | |
| 70 | - | |
| 71 | - Public Shared Function KomaToCSAName(ByVal komaValueWithWhich As Byte) As String | |
| 72 | - komaValueWithWhich = Board.KomaUtil.GyokuToOu(komaValueWithWhich) | |
| 73 | - Dim komaKind As Byte = Board.KomaUtil.KomaKind(komaValueWithWhich) | |
| 74 | - Debug.Assert(komaKind < komaCSANameArray.Length) | |
| 75 | - Return komaCSANameArray(komaKind) | |
| 76 | - End Function | |
| 77 | - | |
| 78 | - Public Shared Function CSAKomaNameToValue(ByVal komaName As String) As Byte | |
| 79 | - For i As Integer = 0 To komaCSANameArray.Length - 1 | |
| 80 | - If komaName = komaCSANameArray(i) Then | |
| 81 | - Return CByte(i) | |
| 82 | - End If | |
| 83 | - Next | |
| 84 | - | |
| 85 | - Debug.Assert(False) | |
| 86 | - Return 0 | |
| 87 | - End Function | |
| 88 | - | |
| 89 | - Public Shared Function KomaToCSANameWithWhich(ByVal komaValue As Byte) As String | |
| 90 | - Debug.Assert(komaValue < komaCSANameWithWhichArray.Length) | |
| 91 | - If komaValue = Koma.SENTE_OU Then | |
| 92 | - komaValue = Koma.SENTE_GYOKU | |
| 93 | - ElseIf komaValue = Koma.GOTE_GYOKU Then | |
| 94 | - komaValue = Koma.GOTE_OU | |
| 95 | - End If | |
| 96 | - Return komaCSANameWithWhichArray(komaValue) | |
| 97 | - End Function | |
| 98 | - | |
| 99 | - | |
| 100 | - Public Shared Function CSAKomaNameWithWhichToValue(ByVal komaName As String) As Byte | |
| 101 | - For i As Integer = 0 To komaCSANameWithWhichArray.Length - 1 | |
| 102 | - If komaName = komaCSANameWithWhichArray(i) Then | |
| 103 | - Return CType(i, Byte) | |
| 104 | - End If | |
| 105 | - Next | |
| 106 | - Debug.Assert(False) | |
| 107 | - Return 0 | |
| 108 | - End Function | |
| 109 | - | |
| 110 | - Public Shared Function CSAMoveStringToTe(line As String, kyokumen As Board.Kyokumen) As Board.Te | |
| 111 | - | |
| 112 | - Debug.Assert(Not line.Length < 7) | |
| 113 | - If line.Length < 7 Then | |
| 114 | - Return Nothing | |
| 115 | - End If | |
| 116 | - | |
| 117 | - Dim which As Byte | |
| 118 | - If line.StartsWith("+") Then | |
| 119 | - which = Board.Koma.SENTE | |
| 120 | - ElseIf line.StartsWith("-") Then | |
| 121 | - which = Board.Koma.GOTE | |
| 122 | - Else | |
| 123 | - Debug.Assert(False) | |
| 124 | - End If | |
| 125 | - | |
| 126 | - Dim fromLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(1, 2)) | |
| 127 | - Dim toLocation As KomaLocation = KomaLocation.ParseLocation(line.Substring(3, 2)) | |
| 128 | - Dim komaName As String = line.Substring(5, 2) | |
| 129 | - Dim komaValue As Byte = CSAKifuUtil.CSAKomaNameToValue(komaName) + which | |
| 130 | - Debug.Assert(komaValue <> 0) | |
| 131 | - If komaValue = 0 Then | |
| 132 | - Return Nothing | |
| 133 | - End If | |
| 134 | - | |
| 135 | - If fromLocation.IsMochigoma Then | |
| 136 | - Return New Board.Te(fromLocation, toLocation, komaValue, False) | |
| 137 | - End If | |
| 138 | - | |
| 139 | - Dim preValue As Koma = kyokumen.GetMasu(fromLocation) | |
| 140 | - Dim isPromote As Boolean = CommonKifuUtil.IsPromoteKoma(komaValue, preValue.Value) | |
| 141 | - | |
| 142 | - If komaValue = KomaUtil.KomaKind(Koma.C_OU) Then | |
| 143 | - komaValue = preValue.Value | |
| 144 | - End If | |
| 145 | - | |
| 146 | - Return New Board.Te(fromLocation, toLocation, komaValue, isPromote) | |
| 147 | - | |
| 148 | - End Function | |
| 149 | - | |
| 150 | - | |
| 151 | - | |
| 152 | - | |
| 153 | - Public Shared Function CSAParseThinkTime(ByVal line As String) As Integer | |
| 154 | - Debug.Assert(7 < line.Length) | |
| 155 | - Dim thinkTime As Integer | |
| 156 | - Dim array As String() = line.Split({","}, StringSplitOptions.RemoveEmptyEntries) | |
| 157 | - If array.Length > 1 Then | |
| 158 | - Dim text As String = array(1) | |
| 159 | - Dim idx As Integer = text.IndexOf("T") | |
| 160 | - If idx <> -1 Then | |
| 161 | - Integer.TryParse(text.Substring(idx + 1), thinkTime) | |
| 162 | - End If | |
| 163 | - End If | |
| 164 | - Return thinkTime | |
| 165 | - End Function | |
| 166 | - | |
| 167 | - | |
| 168 | - Public Shared Function CSAStringToNullMove(moveStr As String, which As Byte) As Board.Te | |
| 169 | - Dim array As String() = CSAKifuUtil.nullMoveCSAStrArray | |
| 170 | - For i As Integer = 1 To array.Length - 1 | |
| 171 | - Dim value As String = array(i) | |
| 172 | - If moveStr.IndexOf(value) <> -1 Then | |
| 173 | - Return New Board.Te(CType(i, Board.NullMoveType), which) | |
| 174 | - End If | |
| 175 | - Next | |
| 176 | - Return Nothing | |
| 177 | - End Function | |
| 178 | - | |
| 179 | - Public Shared Function NullMoveToCSAString(ByVal nullmovetype As NullMoveType) As String | |
| 180 | - Return nullMoveCSAStrArray(CInt(nullmovetype)) | |
| 181 | - End Function | |
| 182 | - | |
| 94 | + Return array | |
| 95 | + End Get | |
| 96 | + End Property | |
| 183 | 97 | End Class |
| 184 | 98 | |
| 185 | 99 | End Namespace |
| \ No newline at end of file |
| @@ -0,0 +1,28 @@ | ||
| 1 | +Imports ShogiNextMove.Board | |
| 2 | + | |
| 3 | +Namespace Board.Kifu | |
| 4 | + | |
| 5 | + Public Class KifKifuUtil | |
| 6 | + Inherits KifuUtilBase | |
| 7 | + | |
| 8 | + Protected Overrides ReadOnly Property komaCSANameArray As String() | |
| 9 | + Get | |
| 10 | + | |
| 11 | + End Get | |
| 12 | + End Property | |
| 13 | + | |
| 14 | + Protected Overrides ReadOnly Property komaCSANameWithWhichArray As String() | |
| 15 | + Get | |
| 16 | + | |
| 17 | + End Get | |
| 18 | + End Property | |
| 19 | + | |
| 20 | + Protected Overrides ReadOnly Property nullMoveCSAStrArray As String() | |
| 21 | + Get | |
| 22 | + | |
| 23 | + End Get | |
| 24 | + End Property | |
| 25 | + End Class | |
| 26 | + | |
| 27 | +End Namespace | |
| 28 | + |