Schummelfunktion für Memory Spiel

  • VB.NET

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

    Schummelfunktion für Memory Spiel

    Hallo zusammen,

    ich sitze gerade an einer Aufgabe für einen Kurs, bei der ich eine Schummelfunktion in ein vorher erstelltes Memoryspiel einbauen soll. Das bedeutet, dass beim Anklicken des Schummelfeldes alle noch umgedehten Karten für 5 Sekunden aufgedeckt werden sollen.
    Die Schummelfunktion darf nur dann aktiv sein, wenn der Mensch dran ist und dieser noch keine Karte umgedreht hat (also vor seinem Zug).

    Kann mir vielleicht jemand einen Tip geben, wie ich da starten soll?

    Vielen Dank und liebe Grüße

    Anbei noch mein erstelltes Memory Spiel
    Dateien
    • MemoryFeld.vb

      (13,87 kB, 367 mal heruntergeladen, zuletzt: )
    • MemoryKarte.vb

      (4,73 kB, 226 mal heruntergeladen, zuletzt: )
    Vielleicht sowas in der Richtung?
    Boolean setzten ob Mensch am Zug ist sowie einen Boolean setzten ob dieser bereits Karten aufgedeckt hat. Diese dann beim Schummeln prüfen.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Kannst du bitte den (relevanten) Code hier (korrekt formatiert) posten? Dann schau ich mir das mal an.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Ich hoffe, die Formatierung klappt, da ich es bisher noch nicht gemacht habe.
    In der Klasse des MemoryFelds habe ich folgendes eingefügt

    VB.NET-Quellcode

    1. Dim schummeln As New Button
    2. schummeln.Content = "Schummeln"
    3. schummeln.Name = "btnschummeln"
    4. feld.Children.Add(schummeln)
    5. 'Bedingungen prüfen, ob Schummeln überhaupt erlaubt ist
    6. Public Function SchummelnErlaubt() As Boolean
    7. Dim erlaubt As Boolean = True
    8. If spieler = 1 Then
    9. erlaubt = False
    10. End If
    11. If umgedrehteKarten = 1 Then
    12. erlaubt = False
    13. End If
    14. Return erlaubt
    15. End Function
    16. Public Sub Schummeln(karte As MemoryKarte)
    17. karte.VorderseiteZeigen()
    18. timer.Start()
    19. End Sub


    In der Klasse MemoryKarte habe ich folgendes eingefügt

    VB.NET-Quellcode

    1. 'die Methode Schummeln
    2. Public Sub btnSchummeln_Click(sender As Object, e As RoutedEventArgs)
    3. 'wenn die Rückseite zu sehen ist, die Vorderseite
    4. 'anzeigen
    5. If umgedreht = False Then
    6. VorderseiteZeigen()
    7. End If
    8. spiel.Schummeln(Me)
    9. End Sub
    @LEOGOLD Willkommen im Forum. :thumbup:
    Wenn Du den Button im Designer erstellst und drauf doppelklickst, wird vom Studio ein EventHandler generiert.
    Wenn Du den Button jedoch per Code generierst, musst Du ihm explizit einen EventHandler hinzufügen. Diese Zeile fehlt in Deinem Code.

    VB.NET-Quellcode

    1. AddHandler(schummeln.Click, AddressOf(btnSchummeln_Click))
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo an alle!
    Der Schummel-Button macht bei mir Probleme, komme einfach nicht dahinter.
    Wie kann ich den Button btnSchummeln zum laufen bringen?
    "Public Sub btnSchummeln_Click(sender As Object, e As RoutedEventArgs)" in MemoryKarte.vb
    Und wo sollte die Anweisung untergebracht werden?
    "AddHandler(schummeln.Click, AddressOf(btnSchummeln_Click))"
    Danke im Voraus
    Willkommen im Forum.
    Das kommt drauf an, ab wann die Verdrahtung stattfinden soll, will heißen, ab wann schummeln.Click zu einem Aufruf der Prozedur btnSchummeln_Click führen soll. Wenn die Antwort "immer" lautet, dann wäre eine "Festverdrahtung" per Handles-Klausel sinnvoller. Wenn "so früh wie möglich, aber ohne Handles", dann im Form_Load-EventHandler.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    vbXion schrieb:

    Und wo sollte die Anweisung untergebracht werden?
    Solch wird bei Wpf im Xaml gesetzt.
    Aber du bist dir drüber im Klaren, dass du hier einen seit > 1 Jahr toten Thread wiederbelebst, und eine Anwendung bearbeitest, die von einem Anfänger ist, und welche auch nie wirklich funktioniert hat?

    Also ich würd da nicht soo viel Brain-Power reinstecken...

    VaporiZed schrieb:

    Willkommen im Forum.
    Das kommt drauf an, ab wann die Verdrahtung stattfinden soll, will heißen, ab wann schummeln.Click zu einem Aufruf der Prozedur btnSchummeln_Click führen soll. Wenn die Antwort "immer" lautet, dann wäre eine "Festverdrahtung" per Handles-Klausel sinnvoller. Wenn "so früh wie möglich, aber ohne Handles", dann im Form_Load-EventHandler.


    @Hallo VaporiZed,
    danke für die schnelle Antwort. Die Verbindung soll nur eine Methode/Funktion aufrufen. Habe gestern noch die Lösung gefunden und im MemoryFeld.vb integriert.
    Im Konstruktor:
    AddHandler mSchummel.Click, New RoutedEventHandler(AddressOf btnSchummel_Click)
    Der Button befindet sich ebenfalls in MemoryFeld.vb
    Danke nochmal.

    @Hallo ErfinderDesRades,
    auch dir danke ich für die rasche Antwort. Deine Anmerkung hat bestätigt das MVM falsch lag mit seiner Überlegung. Danke.Es ist mir klar das dies ein Jahr totes Thread ist. Habe leider nichts relevantes zu diesem Thema gefunden, deshalb sah ich keine andere Möglichkeit als es hier nochmal zu versuchen. Sobald ich den Lösungsweg herausgefunden habe, teile ich es hier für die Anderen mit.

    @Hallo an Alle die noch ein Problem mit der Aufgabe haben.
    ich werde keine direkte Lösung hier reinschreiben, zerstört den Lerneffekt, aber ihr bekommt die wichtigsten Typs.
    Als erstes, das was MVM oben eingestellt hat ist falsch(nicht ganz) aber trotzdem verwirrend. Danke nochmal an ErfinderDesRades für den Hinweis.

    Das meiste wird in der Klasse MemoryFeld.vb programmiert.
    a. dies ist schon mal richtig
    Dim schummeln As New Button
    schummeln.Content = "Schummeln"
    schummeln.Name = "btnschummeln"
    feld.Children.Add(schummeln)
    b. der AddHandler bleibt, sowie das Click-Ereignis, in der MemoryFeld.vb Klasse
    c. programmiert eine Schummel-Funktion (das könnt ihr eigentlich von MVM übernehmen)
    d. das Anzeigen aller Bilder im Spielfeld. Schaut euch bitte im Konstruktor die For...Next Schleife an
    For i = 0 To 41
    ' als Beispiel sehen, If .... IsNochImSpiel() ...Then und die VorderseiteZeigen() (jede Schleife wird getrennt eingesetzt)
    e. dann braucht ihr noch eine Schleife für den Aufruf von "Public Sub RueckseiteAnzeigen()" (folgt der Logik)
    f. "Public Sub RueckseiteAnzeigen()" ist das einzige was in MemoryKarte.vb programmiert wird.
    g. noch einen separaten Timer für die Schummel Option.
    h. Gewinner Text am Ende des Spiels - bitte separat ein Private Sub erstellen. Aus KarteOeffnen() alte Meldung ganz raus.
    Die neue Sub setzt ihr am besten ins karteSchliessen(), weil sonst, am Ende des Spiels ein Programmabsturz auf euch wartet.
    Viel Spaß





    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „vbXion“ ()