[VB.NET] 3D-Array Problem

Folgendes: Ich programmiere zurzeit an einem einfachem Schach. Soweit lief eigentlich alles gut. Allerdings habe ich eine eigene Klasse Field:
Code:
Public Class Field
    Private color As Enums.Colors = Enums.Colors.noColor
    Private figure As Enums.Figures = Enums.Figures.NoFigure
    Private xCoord As Short
    Private yCoord As Short
    Public Function figureExists() As Boolean
        If Not figure = Nothing And Not figure = Enums.Figures.NoFigure Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function setColor(ByVal _color As Enums.Colors)
        color = _color
    End Function

    Public Function setFigure(ByVal _figure As Enums.Figures)
        figure = _figure
    End Function

    Public Function getColor() As Enums.Colors
        Return color
    End Function

    Public Function getFigure() As Enums.Figures
        Return figure
    End Function
End Class

Und speichere das Schachbrett in einem Dreidimensionalen Array der Klasse Field:
Code:
Dim field(7, 7) As Field
Initialisiere das Ganze in einem Loop:
Code:
        Dim x As New Field
        x.setColor(Enums.Colors.noColor)
        x.setFigure(Enums.Figures.NoFigure)

        For i As Integer = 0 To 7
            For j As Integer = 0 To 7
                field(i, j) = x
            Next
        Next
Wenn ich dann mit einer anderen Schleife und MsgBoxen die Werte ausgebe passt auch alles, aber wenn ich dann manuell einen Wert setze
Code:
field(0,0).setColor(Enums.colors.White)
field(0,0).setFigure(Enums.figures.Bauer)
oder mit
Code:
Dim x as New field
x.setColor(Enums.colors.White)
x.setFigure(Enums.figures.Bauer)
field(0,0) = x
Und das dann damit (oder MsgBoxen prüfe):
Code:
    Sub printField()
        Console.WriteLine()
        MsgBox("FieldColor:" & field(0, 0).getColor & "FieldFigure:" & field(0, 0).getFigure & "Exists:" & field(0, 0).figureExists())
        MsgBox("FieldColor:" & field(7, 7).getColor & "FieldFigure:" & field(7, 7).getFigure & "Exists:" & field(7, 7).figureExists())
        For i As Integer = 0 To 7
            For j As Integer = 0 To 7
                Select Case field(i, j).getColor
                    Case Enums.Colors.White
                        Console.ForegroundColor = ConsoleColor.White
                        printFigure(field(i, j))
                        Exit Select
                    Case Enums.Colors.Black
                        Console.ForegroundColor = ConsoleColor.Black
                        printFigure(field(i, j))
                        Exit Select
                    Case Else
                        Exit Select
                End Select
            Next
            Console.WriteLine()
        Next
    End Sub

    Function printFigure(ByVal _field As Field)
        Select Case _field.getFigure
            Case Enums.Figures.Bauer
                Console.Write("B ")
                Exit Select
            Case Enums.Figures.Laeufer
                Console.Write("L ")
                Exit Select
            Case Enums.Figures.Springer
                Console.Write("S ")
                Exit Select
            Case Enums.Figures.Turm
                Console.Write("T ")
                Exit Select
            Case Enums.Figures.Dame
                Console.Write("D ")
            Case Enums.Figures.Koenig
                Console.Write("+ ")
                Exit Select
            Case Else
                Console.Write("  ")
        End Select
    End Function
Sind sofort alle Felder anstatt einem Weiße Bauern. Wäre nett wenn mir jemand helfen könnte.

Tnx im Voraus, 5830
 
wirf einen blick auf deine initialisierung

du erzeugst wieviele felder? (kleiner hinweis: genau eines)

was du vorhattest:

initialisiere jedes feld deines arrays mit einem neuen objekt vom typ Field

was du getan hast:

initialisiere ein Field, und weise jedem feld deines arrays eine referenz (stichwort "pointer") auf dieses eine Field zu


Code:
        Dim x As Field

        For i As Integer = 0 To 7
            For j As Integer = 0 To 7
                x = New Field
                x.setColor(Enums.Colors.noColor)
                x.setFigure(Enums.Figures.NoFigure)
                field(i, j) = x
            Next
        Next
 
Zurück
Oben