Kartenspiel !! - Bitte um Hilfe!!

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Rikudo.

    Kartenspiel !! - Bitte um Hilfe!!

    Hallo Liebe Vb Gemeinde,
    Ich möchte gerne in mein spiel ein kleines minigame einbauen, das wie folgt aussehen soll:

    Ich habe 5 Karten, der gegener ebenefalls. Ich sehe aber nur meine!!
    Auf den Karten (PictureBoxen) gibt es verschiedene Symbole (Kreise, vierecke,kreuze, herze usw.)

    Die Symbole 8karten) sollen am anfang per random funktion verteilt werden.
    Auch an den Computergegner!

    Das Problem:
    Ich möchte folgende vorgehensweiße:

    XX (ein paar) = 2 Punkte
    XX OO (Zwei paare) = 4 Punkte
    XXX (3 gleiche) = 8 Punkte
    XXXOO (Full house) = 15 Punkte
    XXXX (4 Gleiche) = 22 Punkte
    XXXXX (5 Gleiche) = 40 Punkte

    Wenn ich auf einen Button (Umdrehen) drücke, müssen die Karten des Gegeners umgedreht werden, und mit meinen verglichen werden und wenn ich beispielsweiße ein full house habe und der gegener 3 gleiche habe ich gewonnen. Aber wie programmiere ich das er erkennt wer welche karte hat und was höher ist?
    Später soll es ja noch mehr zeichen geben ( O , X , § , ? , & )
    Das heißt ein päärchen mit && ist höher als ein pärchen mit ?? als beispiel. Das soll das programm auch noch unterscheiden können.
    Am ende kommt dann halt ne msgbox "Du hast gewonnen" oder "du hast verloren"
    entsprechen des gewinns sollen dann auch die punkte vergeben werden.

    Bitte helft mir!
    Ich würde euch gerne Code geben, kann das aber leider nicht, da ich selbst nicht weiß wie ich anfangen soll. Das hauptproblem ist das Vergeleichen und erkennen.
    Lg
    Rikudo

    Danke im Vorraus
    C# Developer
    Learning C++
    du must doch irgendwo die karten speichern (also wer was hat) in nem array etc.
    daraus holste dir die infos:

    if kartenarray(0).karte(0).getzeichen andalso ... z.b. alle durchgehen ob man zwei gleiche hat dann durchgehen ob man drei gleiche hat
    kartenarray steht hier für alle karten die 0 für player1 (du)
    .karte steht für die liste indem die karten liegen 0 = karte 1
    und .getzeichen ist wohl selbstverständlich

    ;D
    Zunächst mal solltest du dich mit der Hauptproblematik eines Spieles beschäftigen - Der grafischen Darstellung.

    Das Grafische Darstellen von Sprites oder Ähnlichem steht nicht im Aufgabenbereich einer Picturebox.

    Für rudimentäre Zeichnungen bzw. einfache Spiele, würde ich dir GDI+ empfehlen.
    Hier im Forum gibt es einige Tutorials diesbetreffend.

    Jedoch wirst du auch schnell die Grenzen bemerken, die GDI bezüglich Spiele-Programmierung bietet.

    Wenn du dich in die Thematik eingelesen hast, kann man sich allmählich über die Logik Gedanken machen.

    Liebe Grüße
    /nicht getestet

    joscha999 schrieb:

    du must doch irgendwo die karten speichern (also wer was hat) in nem array etc.
    daraus holste dir die infos:

    if kartenarray(0).karte(0).getzeichen andalso ... z.b. alle durchgehen ob man zwei gleiche hat dann durchgehen ob man drei gleiche hat
    kartenarray steht hier für alle karten die 0 für player1 (du)
    .karte steht für die liste indem die karten liegen 0 = karte 1
    und .getzeichen ist wohl selbstverständlich

    ;D
    Das ist doch mal was :D
    Also erstmal muss ich das karten arry als was deklarieren?
    Und dann das Array ist die kombination und die karte das zeichen?
    Also wie würde das aussehen, damit er die Karten erkennt und der Kombinatiomn zuordnet?, sry bin noch anfänger xD
    Aber danke schonmal ;)
    C# Developer
    Learning C++
    Soll das ein Pokerspiel werden?
    Trenne die GUI von den Daten.
    Die GUI zeichnet die bunten Bildchen, nichts weiter.
    Eine Klasse hält die Karten, mischt und verteilt.
    n Instanzen einer Klasse halten die Karten der Spieler.
    Ich weiß, übermorgen willst Du das Spiel auf 3 bis n Spieler erweitern.
    Eine Klasse brauchst Du, um die Spielstrategie und so des PCs zu implementieren.
    Usw.
    Mach Dir einen Plan und verfeinere den. Fange erst an zu programmieren, wenn der Plan alles berücksichtigt, was Dir bis DEIN_END_TERMIN dazu einfällt.
    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!

    rotherford schrieb:

    Zunächst mal solltest du dich mit der Hauptproblematik eines Spieles beschäftigen - Der grafischen Darstellung.

    @Rotherford,
    ich halte diese Vorgehensweise für äußerst fragwürdig. Was soll denn die wundervolle graphische Darstellung darstellen? Dazu müssen erstmal Daten und die Logik (Spielregeln) bereitstehen, die deine Grafik "ansteuern". Stell dir vor, die hätten in der Steinzeit schon Fernseher gehabt, obwohl da gar keiner was sendet! 8|
    Das Aussehen bringt außer einem evtl. vorläufigen Erfolgserlebnis a la "Ach ist die Wiese schön grüün" richtigen Frust, weil man erst hinterher merkt, dass es so plötzlich nicht mehr weitergeht.

    Von daher kann ich nur empfehlen, Rods Vorschlag Schritt für Schritt abzuarbeiten. Die Grafik sollte als letztes kommen.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    rotherford schrieb:

    Geschickt alle Beiträge übergehen, die ein wenig Theorie bieten und kein C&P.

    @rotherford: Hast Du sonst noch weitere nützliche Hinweise für @Rikudo: :?:
    Oder willst Du ihm Deine Lösung verkaufen :?:
    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!
    Vergleichen und erkennen ...

    zb

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. Debug.Print(finde("abdgh"))
    3. Debug.Print(finde("baced"))
    4. Debug.Print(finde("abbcd"))
    5. Debug.Print(finde("abbcc"))
    6. Debug.Print(finde("abccc"))
    7. Debug.Print(finde("aaccc"))
    8. End Sub
    9. Public Function finde(ByVal s As String) As String
    10. ' alle in der reihe?
    11. Dim r = From c In s Let i = AscW(c) Order By i Select i
    12. If r.Max - r.Min = 4 Then Return "Strasse"
    13. ' Paare etc finden
    14. Dim g = From c In s Group c By Buchstabe = c Into Group Select New With {.Buchstabe = Buchstabe, .Anzahl = Group.Count}
    15. Select Case True
    16. Case g.Count = 5
    17. ' alle verschieden (evtl Strasse, aber das prüfen wir hier nicht)
    18. Return "Müll"
    19. Case g.Count = 4
    20. ' ein paar
    21. Return "Ein Paar " & (From b In g Where b.Anzahl = 2 Select b.Buchstabe).First
    22. Case g.Count = 3
    23. ' zwei Paare oder ein Dreier mit 2 Müllkarten
    24. Dim h = From b In g Where b.Anzahl = 3 Select b
    25. If h.Count = 1 Then
    26. ' dreier
    27. Return "Ein Dreier " & h.First.Buchstabe
    28. Else
    29. ' dann sind es zwei Zweier
    30. h = From b In g Where b.Anzahl = 2 Order By b.Buchstabe Select b
    31. Return String.Format("Zwei Paare {0}, {1}", h(0).Buchstabe, h(1).Buchstabe)
    32. End If
    33. Case g.Count = 2
    34. ' Ein Vierer oder ein Fullhouse
    35. Dim h = From b In g Where b.Anzahl = 4 Select b
    36. If h.Count = 1 Then
    37. ' vierer
    38. Return "Ein Vierer " & h.First.Buchstabe
    39. Else
    40. ' Fullhouse
    41. h = From b In g Order By b.Anzahl Descending Select b
    42. Return String.Format("Fullhouse {0}, {1}", h(0).Buchstabe, h(1).Buchstabe)
    43. End If
    44. Case g.Count = 1
    45. Return "Falschspieler!"
    46. End Select
    47. End Function



    edit: gnampf

    VB.NET-Quellcode

    1. ' alle in der reihe?
    2. Dim r = From c In s Let i = AscW(c) Order By i Select i Distinct
    3. If r.Count = 5 AndAlso r.Max - r.Min = 4 Then Return "Strasse"

    sonst geht et nich

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

    @Vatter
    Meine Aussage war lediglich, dass er sich zunächst mal mit der Thematik beschäftigen sollte, wie er sein Spiel überhaupt darstellt.
    Meine Herangehensweise wäre bei einem Spiel, sich erst über grafische Hintergründe Gedanken zu machen und danach in die Logik einzusteigen.
    Denn auch wenn er eine funktionierende Spiellogik entwickelt hat, wird er mit Pixtureboxen nicht sehr weit kommen.

    Meine Meinung. Wie der TE es letztendlich macht, bleibt ihm überlassen.

    Liebe Grüße
    /nicht getestet

    rotherford schrieb:

    Meine Herangehensweise wäre bei einem Spiel, sich erst über grafische Hintergründe Gedanken zu machen und danach in die Logik einzusteigen.
    Was nützt der Aufwand eine schicke GUI programmiert zu haben, wenn er dann merkt, dass er von Spieltheorie absolut keinen Schimmer hat?
    Dann kann er allerdings versuchen, seine GUI meistbietend zu verscherbeln und sich auf Jobangebote für GUI-Designer bewerben.
    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!
    Die Grafik ist nicht das Problem... Da kann man simple Zeichen verwenden. Das Problem ist, die Kombinationen zu erkennen.
    Und Picoflop. Danke für deinen Code, aber kannst du ihn mir auch grob erklären?
    Danke auch allen anderen für Vorschläge und Hilfe ^^
    C# Developer
    Learning C++

    Rikudo schrieb:

    Danke für deinen Code, aber kannst du ihn mir auch grob erklären?

    Die Logik, oder die Befehle.

    Die Logik ist im Prinzip simpel.

    Nimm dir 5 Karten. Jetzt lege alle Karten mit dem gleichen Wert auf einen Stapel. Wieviel Stapel hast du?
    5 Stapel -> Dann müssen alle Karten unterschiedliche Werte haben
    4 Stapel -> Dann hast du einen Stapel mit zwei Karten (=Pair) und vier einzelne
    3 Stapel -> Können zwei Stapel mit je 2 Karten plus ne einzelne sein (also 2 Paare plus Müll) oder ein Stapel mit 3 Karten (also Drilling) und 2 einzelne
    2 Stapel -> Entweder drei plus zwei (fullhouse) oder vier plus eins (vierling)
    1 Stapel -> Geht nicht, weil jeder Wert nur 4 mal vorkommt

    Und dann macht der Befehl nix anderes, als die Karten auf "Stapel" zu legen:

    VB.NET-Quellcode

    1. ' Paare etc finden
    2. Dim g = From c In s Group c By Buchstabe = c Into Group Select New With {.Buchstabe = Buchstabe, .Anzahl = Group.Count}

    Nimm jedes c (= ein Zeichen) im String s und packe alle gleichen c zusammen. Merke dir den Buchstaben (=Wert) und für jeden Stapel die Anzahl der Werte. Das ganze wird dann als "Aufzählung von Stapeln" zurückgegeben in denen man mit den nachfolgen Befehlen suchen kann:

    VB.NET-Quellcode

    1. Dim h = From b In g Where b.Anzahl = 3 Select b

    => Betrachte jeden Stapel und wähle den aus, der drei Karten hat