Auf Werte einer List of Klasse zugreiffen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    Auf Werte einer List of Klasse zugreiffen

    Hi, ich habe eine Klasse Namens "Held"

    Dort gibt es den Sub New:

    VB.NET-Quellcode

    1. Public Sub New(ByVal Name As String, _
    2. ByVal Leben As Integer, _
    3. ByVal Stärke As Integer, _
    4. ByVal Verteidigung As Integer)
    5. Me.Name = Name
    6. Me.Stärke = CStr(Stärke)
    7. Me.Verteidigung = CStr(Verteidigung)
    8. Me.Leben = CStr(Leben)
    9. End Sub



    Ich habe in der Hauptform eine List of Gegner hinzugefügt:

    VB.NET-Quellcode

    1. Dim Gegna As New List(Of Gegner)
    2. Gegna.Add(New Gegner("Schurke", 70, 100, 50))
    3. Gegna.Add(New Gegner("Spinne", 61, 75, 10))



    Soweit, sogut.

    Jetzt möchte ich allerdings auf die Werte der einzelnen Gegner zugreifen.

    Ich lasse mir eine Zufallszahl zwischen 1 und der Anzahl der Gegner (in dem Fall 2) erstellen,
    die Zahl soll dann auf die Nummer in der Liste zugreifen.

    Ich weiß leider nicht wie? :)
    Hey, danke für eure Antworten, haben mir sehr geholfen ;)

    Ich bin wohl schon ein wenig Müde und bin auf diese Idee nicht gekommen... Ich musste sogar lachen ^^

    Achja: Ich weiß, dass man Gegner mit "er" schreibt :P

    Aber ich konnte einfach nicht widerstehen ^^
    Er hat's wohl mit a geschrieben, weil seine Klasse schon Gegner heißt.
    Außerdem ist die Obergrenze bei Random.Next exklusiv, daher muss das -1 weg, um bei bspw. 2 Gegnern 0 oder 1 zu bekommen.
    @Huma: Wenn man mal fragen darf, wie hast Du es denn gemacht?

    Und das mit Gegner und Gegna, ich mache das so das die Liste dann auch so nenne:
    Enemies As New List (Of Enemy) bzw. wenn Plural das selbe ist, Liste_Gegner oder eben Gegner_Liste As List (Of Gegner).
    Es kommt darauf an wie ich Meine "Intelli-Sense" haben möchte, alles bei L wie Listen oder eben bei G wie Gegner.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Eistee“ ()

    Ich habe eine Function, da ich diese noch öfter brauche:

    VB.NET-Quellcode

    1. Public Function GetRandom(ByVal minimum As Integer, ByVal maximum As Integer) As Integer
    2. Try
    3. Dim nRandom As Integer
    4. Randomize()
    5. nRandom = CInt(minimum + (maximum - minimum + 1) * Rnd())
    6. While nRandom < minimum OrElse nRandom > maximum
    7. Randomize()
    8. nRandom = CInt(minimum + (maximum - minimum + 1) * Rnd())
    9. End While
    10. Return nRandom
    11. Catch ex As Exception
    12. 'ToDo Fehlerbehandlung
    13. Return minimum
    14. End Try


    Aufrufen:

    VB.NET-Quellcode

    1. Dim gegneranzahl As Integer = CInt(Gegna.Count.ToString())
    2. Dim zahl As Integer = GetRandom(0, gegneranzahl - 1)
    1) warum sollte es da zu fehlern kommen? TryCatch weglassen xD
    2) CInt(Gegna.Count.ToString()) ist unnötig, Gegna.Count ist schon ein integer^^
    3) würde ich auf den Code aus Post #3 zurückgreifen, ist doch übersichtlicher. Kannst du ja immernoch in deiner Funktion auslagern, allerdings so, dass die Funktion sich die Werte Minimum und Maximum selbst holt. Wenn du es ganz ausgeklügelt machen willst, dann könntest du eine Funktion "GetRandomEnemy" machen, die einen Gegner zurückgibt. Stichwort Referenz kommt hier zum tragen, der zurückgegebene wert ist quasie ein Zeiger auf den List-Eintrag, also exakt der selbe Gegner.

    lg^^