分類:[VB.NET/VB2005 以降]
2009/12/04(Fri) 18:57:36 編集(投稿者)
[初心者,VB2008、WinXP-SP3]
こんにちは。
将棋を作っています。
香車の移動処理を3日ぐらい考えてもできたソースは
意図した動作をしてくれません。(またいではいけないという処理)
いっしょに考えていただけませんか?
お願いします。
試しに作ってみたソースコード(英語苦手なので、引数の名前が間違っているかもしれません。):
======ここから======
'香車の動ける範囲を求めるソースコード
'MovePositionは移動元の座標です。
Dim plist As New List(Of Point)
'考えられる香車の移動できるマスすべてを求める
plist.AddRange(New Point() { _
New Point(MovePosition.X, MovePosition.Y - 1), _
New Point(MovePosition.X, MovePosition.Y - 2), _
New Point(MovePosition.X, MovePosition.Y - 3), _
New Point(MovePosition.X, MovePosition.Y - 4), _
New Point(MovePosition.X, MovePosition.Y - 5), _
New Point(MovePosition.X, MovePosition.Y - 6), _
New Point(MovePosition.X, MovePosition.Y - 7), _
New Point(MovePosition.X, MovePosition.Y - 8) _
})
'負の数、9以上はとれない(正常)
plist.RemoveAll(AddressOf CheckNegativeandnineplus) 'plistから負の数、9以上のx,y座標を削除
'自分の駒は取れない(正常)
plist.RemoveAll(AddressOf CheckMykoma)
'ほかの駒をまたいではいけない
For i As Integer = plist.Count - 1 To 0 Step -1
If Checkmatagi(CellStatus.Kyosha, MovePosition, plist(i)) Then
plist.RemoveAt(i)
End If
Next
'ほかの駒をまたいでいないか(trueで削除)
Private Function Checkmatagi(ByVal koma As CellStatus, ByVal MovePosition As Point, ByVal MoveToPosition As Point) As Boolean
Select Case koma
Case CellStatus.Kyosha ’香車の場合の処理
☆なんてかいたらいいですか?
End Select
End Function
すべてのマスの情報は、public property Cells(x,y) As cellstatus
Public Enum CellStatus
[Nothing] 'なし
Gyokusho '玉将
Hisya '飛車
Kakugyo '角行
Kinsho '金将
Ginsho '銀将
Keima '桂馬
Kyosha '香車
Huhyo '歩兵
_Hisya '飛車成り(+銀
_Kakugyo '角成り(+金
_Ginsho '成銀(金
_Keima '成桂(金
_Kyosha '成香(金
_Huhyo 'と金(金
'---逆さまの駒(Sakは逆さまの略)---
Sak_Gyokusho '玉将
Sak_Hisya '飛車
Sak_Kakugyo '角行
Sak_Kinsho '金将
Sak_Ginsho '銀将
Sak_Keima '桂馬
Sak_Kyosha '香車
Sak_Huhyo '歩兵
End Enum
======ここまで======