Z10: Blackjack

  • Das Ass besitzt nämlich ZWEI Wertigkeiten, nämlich 11 UND 1.

    Ja, du hast natürlich recht. Für den PUR-80 Zehnzeiler habe ich einfach die leichtere Regel für "17+4" herangezogen, wo ein Ass immer 11 Punkte zählt. Beim echten "Blackjack" kann das Ass - wie du richtig anmerkst - beim Spieler als 11 Punkte oder 1 Punkt zählen. Beim Dealer hingegen zählt das Ass immer 11 Punkte wie ich gelesen habe, was für die technische Umsetzung bedeutet, dass man das ganze nicht ganz so kompakt hinkriegt. Und dann gibt es noch diverse Regel-Auslegungen, je nachdem, ob man Single Deck (52 Karten) oder Multi-Deck (mehrfache Sets à 52 Karten) spielt. In Casinos wird offenbar meist mit 6-8 sets gespielt, um das Kartenzählen zu erschweren.


    Für die optisch aufwendigere PUR-256 Version von Blackjack versuche ich gerne, die 11-oder-1-Punkte-bei-Ass-Logik noch unterzubringen. Auch eine einfache art von Geldsetzen wäre noch nett, damit man sieht, ob man unter dem Strich Gewinn oder Verlust macht. Double, Split, etc. würde dann schon etwas weit gehen. Mal sehen :)

  • Habe einen kurzen Test-Code geschrieben, um das optimale Total einer Kartenhand zu berechnen, wenn Asse dabei sind.
    Also so, dass die Asse bestmöglich entweder einer 11 oder einer 1 zugeordnet werden.


    Die relevante Logik ist in Zeilen 15-20:

    Folgende Erkenntnisse ziehe ich aus dieser kleinen Übung:

    • Prototypen bauen macht Spass und die Logik scheint so zu funktionieren.
    • Bei einem Single Deck kann eine Kartenhand maximal 11(!) Karten betragen (4 Asse, 4 zweier, 3 dreier). Soviel Platz habe ich für die Darstellung der Kartenhand in meinem Spiel nicht vorgesehen. Da muss ich mir was überlegen.
    • Um die optimale 11 oder 1 Punkte-Verteilung bei einem Ass zu berechnen muss ich die gezogenen Kartenwerte in einem Array ablegen. Das schöne daran ist, dass Arrays in BASIC V2 bereits für Index 0-10 (also 11 Werte) vorinitialisiert sind. Da eine Kartenhand in Blackjack nur aus max. 11 Karten bestehen kann, kann ich mir die DIMs sparen. :D
  • ich glaube bagitaman hatte mal ein basic maumau geschrieben wo karten auch halb uebereinander lagen
    (da koennte man sich ja code "borgen"), kann mich aber auch taeuschen (im spiel oder beim ersteller oder auch bei
    allen 3 sachen) ;/ .

  • Ich habe nun eine erweiterte Version von meinem Single-Deck Blackjack erstellt, die auch mit dem Sonderfall Ass(1 oder 11) regel-konform umgehen kann.

    Auch ein "Blackjack" (Hand mit 2 Karten erzielen direkt 21 Punkte) und Double-Down (doppelter Einsatz - aber man kann nur noch eine Karte ziehen) wurde berücksichtigt.

    Und für den Fall, dass zu viele Karten gelegt werden, als die Bildschirmbreite darstellen kann, habe ich ebenfalls eine elegante Lösung gefunden (ab 6 Karten werden die Karten zusammengeschoben).


    Für die Kartenzähler unter Euch (siehe Bericht über das ominöse MIT-Blackjack-Team, welches damit Anfangs der neunziger Jahre diverse Casinos abgezockt hat: https://www.youtube.com/watch?v=QflVqavHHM0) habe ich noch ein High/Low-Zähler eingebaut, damit man überprüfen kann, ob man richtig mitgezählt hat. Einfach die Taste 'c' gedrückt halten, wenn man am Zug ist.

    Sobald 39 Karten gelegt wurden, wird der Stapel neu gemischt.


    Look & Feel und Gameplay ist bewusst auf das nötigste beschränkt. Ich wollte den BASIC-Code weiterhin kompakt halten und auch den Spielfluss nicht künstlich in die Länge ziehen. Auf das Geld setzen habe ich verzichtet. Stattdessen erhält der Gewinner (Dealer oder Player) jeweils einen Punkt. Bei einem Double-Down zählt der Gewinn 2 Punkte. Ein Blackjack gibt 1.5 Punkte. Ein Split (der Spieler kann ein initiales Kartenpaar mit 2 gleichen Werten auf 2 Hände verteilen) ist bei meiner Version (noch) nicht möglich.


    blackjack.prg



    Viel Spass damit.


    Und hier noch der Source-Code dazu (CBM prg Studio):

    PS: Falls jemand von Euch weiss, wie man in BASIC einen passenden SID-Soundeffekt erzeugen kann für 1. Karten mischen und 2. Karte ziehen, dann wäre ich dankbarer Abnehmer. So eine passende Geräuschkulisse würde das Ganze wunderbar abrunden. :thumbsup:

  • Habe nun einen einfachen Sound-Effekt für das Kartenmischen und Austeilen gefunden. Entdeckt im BASIC-Spiel "Five Card Stud" von G. Adams aus dem Jahre 1983. Der Clou dabei ist, das Rauschen (=129) mehrmals hintereinander kurz ein- und gleich wieder auszuschalten. Habe die Wartezeit zwischen den einzelnen Karten noch ein wenig variiert, damit es etwas realistischer klingt.


    Hier der Beispiel-Code zum Sound-Effekt:

    Und hier somit meine aktualisierte Blackjack-Variante mit Kartenmisch-Sound. Wobei ich nun das Gefühl habe, dass man für "Bust", "Win" und "Blackjack" ebenfalls ein Sound-Effekt erwartet (Die Geister, die ich rief...)


    blackjack.prg

  • Find' ich sehr gelungen! Macht Spaß, ist schnell und sieht noch gut aus. +1

  • Hallo, hier kommt noch mal mein Zehnzeiler mit der ASS 1 oder 11 Regel.

    1. Beim Ausprobieren dieser Version ist mir aufgefallen, dass das Ass immer als 1 und nie als 11 gezählt wird. Kann das sein?

      Edit: Ah, verstehe. Wenn das Ass erscheint, kann man bei dir mit der Taste "A" wählen, ob es statt einem Punkt, 11 Punkte Wert sein soll. Das fiese für die Abbildung der 1-oder-11 Logik ist aber, dass eine 11 wieder zu einer 1 werden kann, sobald man mit der 11er Wertung 21 übersteigen würde. Annahme: Ein Ass und eine 9 geben 20 Punkte (11+9). Ich als Spieler könnte nun ruhigen Gewissens noch eine Karte geben lassen, da ich - wenn ich "Bust" gehe - das erste Ass automatisch als 1 gewertet wird und ich mit diesem Punktewert immer noch weiterspielen kann. Wenn ich also als dritte Karte ein Ass erhalte, dann habe ich 21 Punkte (11+9+1). Wenn ich als dritte Karte eine 10, Bube, Dame, König erhalte, bin ich wieder bei 20 Punkten (1+9+10). Wenn ich eine 2 erhalte. bin ich wieder bei 12 Punkten (1+9+2). Für einen Zehnzeiler wird es damit recht eng, diese Logik korrekt abbilden zu wollen. Ich habe deshalb für mich entschieden, den Königsweg zu gehen und für meinen Zehnzeiler bei 17+4 zu bleiben (siehe Punkt 2).
    2. Zwischen 17+4 und Blackjack gibt es Regel-Unterschiede, es sind also nicht zwei unterschiedliche Bezeichnungen für das gleiche Kartenspiel (weiß ich inzwischen :)). Bei 17+4 zählt das Ass immer 11 Punkte. Bei "Blackjack" gilt je nach Situation die "Hard"-1 oder "Soft"-11 Regel beim Ass. Mein ursprünglicher Blackjack-Zehnzeiler aus Post 10 entspricht also klar eher einem 17+4 und werde diesen als Folge nicht mehr als "Blackjack" betiteln - es würde nur eine falsche Erwartungshaltung wecken. "Blackjack" scheint mir stattdessen die Casino-Variante von 17+4 zu sein, mit erweiterten Regeln. Dazu gehören neben "Hit" und "Stand" auch die Optionen "Double-Down", "Split", "Insurance" und "Surrender", also Möglichkeiten, beim Spiel um Geld den Gewinn zu optimieren oder einen Verlust zu begrenzen.
    3. Ich habe mir mal die Screenshots der in Gamebase64 vorhandenen Blackjack-Varianten angeschaut (es gibt so viele (75 Stück) - Blackjack hat dort sogar eine eigene Kategorie erhalten!). Erster Eindruck: Es ist noch erstaunlich, wie viele Blackjack-Spiele es auf dem C64 gibt, die wenig Wert auf look & feel gelegt haben. Dabei wäre der Speicher ja noch fast komplett leer für alle möglichen Sachen, die der Atmosphäre gut tun könnten. Zum Beispiel Sprachausgabe des Dealers. Mal schauen, vielleicht packe ich tatsächlich noch eine Sprachausgabe in mein BASIC-Spiel (Samples könnten dann über ein binäres File in den Speicher geladen und über eine kleine Maschinenspracheroutine abgespielt werden).