Ein Memory

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Hallo Leute !

    Ich Bin neu Hier , also sorry falls ich
    in der falschen Kategorie poste !


    Ich bin momentan dabei aus Jux ein
    Memory-Spiel in Visual basic 2010 zu erstellen .


    Doch (wer hätte das gedacht) habe ich
    ein Problem !Ich habe bereits 7 Bilder importiert und 14 PictureBoxen
    erstellt . Doch wie kriege ich es hin das die Bilder sich zufällig
    (randomize Funktion ?) auf die PictureBoxen verteilen aber jedes Bild
    nur zwei mal ? Die Lösung ist sicherlich total offensichtlich aber
    es ist so , das ich eigentlich ein totaler visual basic “noob“
    bin !


    Ich freue mich auf eure antworten und
    danke im voraus !


    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Es ist deutlich einfacher die Bilder direkt von der Festplatte zu laden (PictureBox1.ImageLocation=path).
    Speichere die Pfade in einer List (Of String) und lass dir den Index als Zufallszahl rausgeben. Du musst dir aber irgendwo merken, welche Indexe schon dran waren und beim 3.Mal ein neues Random machen.

    Es geht bestimmt noch viel einfacher, aber das ist mir jetzt auf die Schnelle eingefallen.
    Zunächst fang garnicht erst an mit Pictureboxen zu arbeiten. Verwende in Spielen stets GDI+. Damit sind auch kleine Animationen möglich zum Beispiel das umdrehen der Karten o.ä. Pack die einzelnen Teile in ein zweidimensionales Array und schreib dir eine Function die dir aus einer Zahl das Bild zurückgibt.

    Bsp:

    VB.NET-Quellcode

    1. ReturnImageByNumber(Byval num as UInteger) as Image
    2. Select Case num
    3. Case 1
    4. Return My.Resources.Ameisenkarte
    5. End Select
    6. End Function


    Und dann gehst du per Forschleife das zweidimensinale Array durch und genrierst eine Zahl mit der du dir aus der obigen Function das Bild holst und das mit GDI auf den Bildschirm zeichnest. Bei dieser Methode müsstest du noch überprüfen ob eine Karte zweimal gezogen wurde. Dazu würde ich die generierten Zahl in eine List of Integer packen und jedes mal neu generieren wenn die Zahl schon zweimal vorhanden ist.

    Siehs als Denkanstoß. Wenn du das nachvollziehen kannst wird es was.

    Außerdem:

    llol111 schrieb:

    das ich eigentlich ein totaler visual basic “noob“
    bin !


    Lies das microsoft.com/germany/msdn/akt…how.aspx?id=msdn_de_49057. Das wird dir die "Noobhaftigkeit" auf den ersten 150 Seiten austreiben ;) , denn das ist kein Projekt für Anfänger, wenn man es richtig machen will.

    8-) faxe1008 8-)

    sonne75 schrieb:

    Speichere die Pfade in einer List (Of String) und lass dir den Index als Zufallszahl rausgeben. Du musst dir aber irgendwo merken, welche Indexe schon dran waren und beim 3.Mal ein neues Random machen.



    Wenn dann eher die Grafiken in einer List(Of Bitmap) oder so , jedesmal Neuladen ist unnötig.

    Aber sowas ist auch alles eher weniger professionell.
    Stimmt, so geht es auch.

    EDIT:
    @faxe1008
    Ich nahm an, dass er/sie ein absoluter Anfänger ist und einfach üben will. Da wird man mit GDI+ usw gleich erschlagen. Zu Übungszwecken kann man so ein Projekt auch ganz einfach realisieren, Hauptsache, man hat gelernt logisch vorzugehen und die Probleme auf unterschiedliche Arten zu lösen. Und als Anfänger braucht man ein schnelles Erfolgserlebnis, sonst gibt man schnell auf.
    @sonne75:
    Zweifellos. Ich bin nun einaml ein Verfechter der Mauer-Methode: Du stellst jemanden vor die Mauer und forderst ihn auf über eine hohe Mauer zu steigen. Natürlich wird er es nicht schaffen. Dann sucht er eine Möglichkeit es auch so zu schaffen und besogt sicht eine Leiter. Danach wird er sich von selbst kleinere Mauern suchen an denen er das klettern üben kann, weil der Erfolg nicht hundertprozentig Eigenleistung ist und er nicht ganz zu frieden damit ist, bis er schließlich geübt genug ist über die hohe Mauer vom Anfang zu klettern.

    8-) faxe1008 8-)
    @faxe1008
    Eben. Wenn man aber eine hohe Mauer vor sich hat und sie zwar auf eine falsche Art und Weise überwunden hat, dafür es aber einigermaßen selbst geschafft hat, dann ist man total stolz drauf. Es ist gut, dass man darauf hingewiesen wird, dass die Art und Weise nicht so optimal war. Aber trotzdem war es eine Leistung.
    Das Ganze über Pictureboxen zu lösen ist wohl die schlechteste Methode. Was du brauchst sind erstmal die Grundlagen der Programmierung (=> Klassenbau, Events, Variablen, Datentypen, Option Strict On, Methoden, usw). Mit deinem jetzigen Kenntnisstand ist ein Memory-Spiel nicht ohne weiteres zu lösen.

    @faxe1008
    Geht schonmal in die richtige Richtung^^ So eine "ImageByNumber"-Methode bräuchte man nicht, wenn man die entsprechenden Klassen hätte (z.B. eine Klasse Karte und eine Klasse Spielfeld). Das Spielfeld wäre auch ganz einfach per GDI+ zu zeichnen. Wichtig: Das Spielfeld ist eine Klasse um einen 2D-Array von Karten - hier wird die komplette Spiellogik eingebaut. Die GUI müsste nur noch zur Ansteuerung der Klasse genutzt werden (=> GUI von Daten trennen).

    @sonne75
    Und woher weiß man ob eine Karte aufgedeckt/zugedeckt/entfernt ist? Tja, man muss mehrere Infos über eine Karte parat haben: Bild, Status (aufgedeck, etc) und eine ID. Genau zwei Karten im Spiel haben die selbe ID, so kann man ganz einfach prüfen, ob sie 'gleich' sind.

    Die Mauer-Geschichte stimmt schon. Allerdings wird kein 1-Jähriger über irgendeine Mauer kommen, aus dem einfachen Grund, dass er noch nicht laufen kann. Soll heißen: erst die Grundlagen lernen. Ohne die wird ein Memory-Spiel in ein gnadenloses Control-Gebastel ausarten. Lernfaktor = 0, eher -42 weil man genauso falsch weitermacht. Im manchen Mauern ist eben eine Tür durch die man gehen kann^^
    @FreakJNS
    Ich denke trotzdem, dass man etwas gelernt hat, wenn man versucht die Teilprobleme, die man bekommt (wie bekomme ich die Bilder in Zufallsreihenfolge), zu lösen. Frei nach dem Sprichwort: die Schlacht haben wir verloren, aber wenigstens paar Kriege gewonnen. ;)