Kartenspiel mehrere Karten als Array?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Der Fehler sagt mir, dass sich der arrayindex irgendwann außerhalb des festgelegten Bereichs 0-1 befindet.

    Das Problem ist, beim Start wird die Rückseite angezeigt.

    Dann drücke ich drauf und das erste Bild erscheint. Danach klicke ich mehrmals auf das Bild und dann kommt der Fehler.

    Hast du da noch einen Tip für mich?
  • Hmm, einfach ein bissel "mehr" als 4 Wörter.

    Ich dachte das ist ein Fachforum?? Das man sich hier mit Beispielen unterstützt oder so.

    Quellcode

    1. front = UIImageView(image: UIImage(named: bild[Int(arc4random_uniform(UInt32(bild.count)))]))
    Hab da noch eine Frage. Das mit dem Zufallsgenerator habe ich gelöst. Problem ist, er zeigt jetzt jeden "Bild" arraywert, mehrmals zufällig an.

    Ich möchte aber das er wirklich zufällig nur einmal, jeden Wert anzeigt.

    Gibt es dafür auch eine lösung?
  • es ist ein fachforum, nur sind die meisten nicht wirklich vom fach.

    was du willst, ist wohl einmal die karten "durchmischen".

    im englischen nennt man das shuffle. such einfach bei google danach. dort findest du konzepte mit denen du in jeder programmiersprache dann ein array bzw ein indexset oder was auch immer mischen kannst (denn ich denke nicht dass es in siwft eine extra funktion dafür gibt).
  • Ok. Hab was gefunden in meinem Fachbuch.

    Aber irgendwas haut da nicht so hin.

    Die Ausgabe der Schleife sollte eig. ein Integerwert sein den den der Bildindex erkennt.

    Der Code ist:

    Quellcode

    1. var index = Array(1...2)
    2. for i in 0..<index.count {
    3. let n = Int(arc4random_uniform(UInt32(index.count - 1)))
    4. swap(&index[i], &index[n])
    5. }
    6. front = UIImageView(image: UIImage(named: bild[index]))
    Jetzt kommt der Fehler, dass der Wert Index als Ausgabe einen Stringwert liefert, den er nicht verarbeiten kann.

    Sehr Ihr den Fehler?
  • Jetzt lasse ich mich doch wieder zu einer Antwort im Swift-Bereich hinreißen, aber diesmal "gefahrlos": Mein Beitrag enthält nichts Swift-spezifisches.

    Ich habe den Eindruck, Dein Hauptproblem ist, dass Du keine genaue Vorstellung hast, was Dein Programm genau leisten soll. Also nicht bzgl. der genauen Statements, sondern den tatsächlichen Algorithmus. Sagt Dir "Pseudo-Code" etwas? Wenn nicht, versuche einmal strukturiert, aber in Prosa zu schreiben, was Dein Programm wann machen soll. Wenn ja, schreibe es in Pseudo-Code auf:

    Welche Karten-Gruppen gibt es zu unterscheiden? Aus welchen soll die nächste Karte zufällig ausgewählt werden? Was passiert, wenn man eine Karte umdreht. Gehe das Spiel schrittweise durch und schreibe alle Aspekte (verkürzt) auf, dann hast Du Deinen Algorithmus. Diesen dann in eine Sprache - und sei es Swift - zu übersetzen, ist eher der leichtere, aber zweite Teil.

    HTH, Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wenn Du "echte" Zusatzzahlen willst, die sich nicht bei jedem Start wiederholen, musst du deinen Generator erst mal initialisieren.
    Wie das in Swift geht (was ist das eigentlich?) weiß ich nicht
    In C z.B.

    Quellcode

    1. srand(time(0));
    2. int randomnumber;
    3. randomnumber = rand() % 10; // 10 oder welcher Maxwert es sein soll
    Das ließt sich für mich leichter, als der ganze Gulasch den ich oben sehen...
  • Ich habe den Thread nur grob quergelesen...

    Der Hinweis auf Pseudocode als ersten Schritt ist sehr wichtig und richtig. Schritt 1b wäre es dann, sich zu überlegen, welche Objekte man braucht und welche Objekte, was über die anderen Objekte wissen und wofür sie zuständig sind.

    Bei der ersten Implementierung eines solches Datenmodels würde man erstmal normalerweise GUI, also Bilder und Views, weglassen. Erstmal soll's ja funktionieren. Ints und Strings reichen da. Der optische Zucker kommt später.

    Solch ein einfaches Kartendeck/ 'Kartenspiel' eignet sich sehr gut als Anfängerprojekt zum Üben.

    Passenderweise hat Apple genau so ein einfaches Kartenmodell als Muster-Packages für den kommenden Open-Source Packetmanager ausgewählt. Unter github.com/apple findet sich genau solcher grundlegender Kartenspiel-code von Apple. Das sind dort die vier Git-Projekte, die mit 'example' anfangen. Die Aufteilung in vier Packages liegt nur daran, daß sie als Testcases für den Packagemanager dienen. Normalerweise würde man das in einem Projekt zusammenfassen. Ist auch eigentlich nur sehr wenig Code.

    Da könnte man als Anfänger mal reinschauen und gucken, ob man versteht und nachvollziehen kann, was der Code da jeweils macht. Dann würde man es zurseite legen und es nochmal selber versuchen...^^ ;)