1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| Class MainWindow
Sub recur(ByVal pionPrecedent As Point, ByVal couleur As SolidColorBrush, ByVal direction As Point, ByRef lPoint As List(Of Point))
Dim p As New Point(pionPrecedent.X + direction.X, pionPrecedent.Y + direction.Y)
If p.X < 0 Or p.X > nbreCol - 1 Then Exit Sub
If p.Y < 0 Or p.Y > nbreRow - 1 Then Exit Sub
If getColorCase(p).Equals(couleur) Then
lPoint.Add(p)
recur(p, couleur, direction, lPoint)
End If
End Sub
Sub verifCase(ByVal p As Point)
Dim lHorizontal As New List(Of Point)
recur(p, getColorCase(p), New Point(-1, 0), lHorizontal)
recur(p, getColorCase(p), New Point(1, 0), lHorizontal)
Dim lVertical As New List(Of Point)
recur(p, getColorCase(p), New Point(0, -1), lVertical)
recur(p, getColorCase(p), New Point(0, 1), lVertical)
If lHorizontal.Count >= 3 Then
' Le 4iem étant la case du millieu
plateau(p.X, p.Y).Content = "OK"
For Each p2 In lHorizontal
plateau(p2.X, p2.Y).Content = "OK : H"
Next
End If
If lVertical.Count >= 3 Then
' Le 4iem étant la case du millieu
plateau(p.X, p.Y).Content = "OK"
For Each p2 In lVertical
plateau(p2.X, p2.Y).Content = "OK : V"
Next
End If
End Sub
Private plateau As Label(,)
Private nbreCol As Integer = 10
Private nbreRow As Integer = 10
Public Sub New()
' Cet appel est requis par le concepteur.
InitializeComponent()
' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
creePlateau()
rempliPlateau()
End Sub
Sub creePlateau()
ReDim plateau(nbreCol, nbreRow)
GridPlateau.Background = Brushes.Black
GridPlateau.RowDefinitions.Clear()
GridPlateau.ColumnDefinitions.Clear()
For i As Integer = 0 To 9
GridPlateau.RowDefinitions.Add(New RowDefinition() With {.Name = "RowDefinition" & i})
GridPlateau.ColumnDefinitions.Add(New ColumnDefinition() With {.Name = "ColumnDefinition" & i})
Next
For x As Integer = 0 To nbreCol - 1
For y As Integer = 0 To nbreRow - 1
Dim elem As New Label
elem.Margin = New Thickness(1)
elem.Background = Brushes.Brown
elem.Content = x & " : " & y
elem.VerticalContentAlignment = Windows.VerticalAlignment.Center
elem.HorizontalContentAlignment = Windows.HorizontalAlignment.Center
elem.Name = "Label_" & x & "_" & y
GridPlateau.Children.Add(elem)
Grid.SetColumn(elem, x)
Grid.SetRow(elem, y)
plateau(x, y) = elem
Next
Next
End Sub
Sub rempliPlateau()
For x As Integer = 0 To nbreCol - 1
For y As Integer = 0 To nbreRow - 1
setCase(x, y, Brushes.Brown)
plateau(x, y).Content = ""
Next
Next
setCase(1, 1, Brushes.Red)
setCase(1, 2, Brushes.Red)
setCase(1, 3, Brushes.Red)
setCase(2, 4, Brushes.Red)
setCase(3, 4, Brushes.Red)
setCase(4, 4, Brushes.Red)
setCase(0, 3, Brushes.Blue)
setCase(0, 5, Brushes.Blue)
setCase(0, 6, Brushes.Blue)
setCase(0, 4, Brushes.Red)
setCase(1, 4, Brushes.Blue)
End Sub
Sub setCase(ByVal x As Integer, ByVal y As Integer, ByVal couleur As SolidColorBrush)
plateau(x, y).Background = couleur
End Sub
Sub setCase(ByVal p As Point, ByVal couleur As SolidColorBrush)
setCase(p.X, p.Y, couleur)
End Sub
Function getColorCase(ByVal x As Integer, ByVal y As Integer) As SolidColorBrush
Return plateau(x, y).Background
End Function
Function getColorCase(ByVal p As Point) As SolidColorBrush
Return getColorCase(p.X, p.Y)
End Function
Sub permutCase(ByVal c1 As Point, ByVal c2 As Point)
Dim coulC1 As SolidColorBrush = getColorCase(c1)
setCase(c1, getColorCase(c2))
setCase(c2, coulC1)
verifCase(c1)
verifCase(c2)
End Sub
Private Sub ButtonPermuteCase_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles ButtonPermuteCase.Click
permutCase(New Point(0, 4), New Point(1, 4))
End Sub
End Class |
Partager