トリアタマAIでは、設置可能かどうかというチェックにLINQ使ってます
設置予定場所から右上方向を取得する例では以下の条件です
・現在の盤面情報はFieldの一次元配列変数FieldState()
・設置予定の位置はSTONEPOSITIONの変数SetPosition
・盤面クラスFieldには以下のメンバを含む
→Short型のプロパティStone(石の状態)
→STONEPOSITION構造体のプロパティPosition(升目の位置)
→STONEPOSITION構造体にはShort型のX、Short型のYが所属
Dim UpperRight = From n In FieldState _
Where n.Position.X > SetPosition.X _
And n.Position Y < SetPosition.Y _
And (n.Position.X + n.Position.Y) _
= (SetPosition.X + SetPosition.Y) _
Order By n.Position.X Ascending
これでUpperRightには、設置位置から順に右上方向への盤面情報が入ってきます。
元々盤面情報の配列を二次元にしとけばLINQ使うまでもないかもですが、
自力走査させるのが面倒だったのと勉強兼ねて。