Hallo Besucher, der Thread wurde 37k mal aufgerufen und enthält 416 Antworten

letzter Beitrag von RKSoft am

Hakuna Matata - it's Matatu Time on C128 and Plus/4

  • Hab das Spiel nun übers Tablet gespielt. ^^
    Versteh das nun etwas besser und kann mir nun auch im Kopf überlegen, wie ich das grafisch umsetzen kann. Der Standardzeichensatz ist ja prädestiniert dafür :).


    Ich will ja nicht streiten, aber im "matatu64.prg" in Beitrag #4 fehlt nach wie vor Zeile 3000 :alt:;) .

    Nimm einfach diese hier. Sie läuft unter V2, V3.5 und V7 BASIC.


    Der Fehler war übrigens bei Zeile 3000, daß du Leerzeichen hinter dem PRINT hattest (bis >Zeichen 90). Deshalb nimmt der Emulator diese Zeile nicht an.



    Rk soft super dann ändere ich die datas so dass man nicht einen String Wert hat den man zerschneiden muss und die Hälfte davon bei Bedarf in Zahl wandeln sondern immer abwechselnd poke wert für screen ram und direkt rechenbare Zahl im Wechsel. Je zwei Werte bilden eine Karte.


    Ich baue die Verarbeitungslogik entsprechend um.


    Nebenher mache ich noch die simple ki aber auch wenn sie simpel wird, wird es ein paar Tage dauern bis sie fertig ist.

    Ich benutz erstmal die erste Version und pass dies dann später an deine neue an, ok?

  • Sooo, jetzt melde ich mich auch endlich mal zu Wort.
    Zuallererst mal: TAUSEND DANK fuer das tolle Vor-Nikoloaus-Geschenk! :-) Das kam ja doch schneller als erwartet. Ich hab jetzt mal kurz die letzte von RKSoft hochgeladene C64-Version getestet; und das ist schon mal ein sehr guter Anfang, auch wenn man sich erstmal an die textbasierte Darstellung gewoehnen muss. :-)
    Erstmal noch Grundlegendes zum Regelwerk: zunaechst, wenn man eine Karte zieht, darf man die bei Matatur eigentlich gleich ablegen (diese Variante gibt es ja auch beim Mau Mau) - ausser beim "Strafziehen" nach einer 2; man muss aber nicht ablegen (z.B. aus taktischen Gruenden). Dann wird das Spiel auch weitergespielt, bis einer fertig ist - also wenn keine Karte mehr zum Ziehen uebrig ist, wird der Stapel (bis auf die zuletz gespielte, obenauf leigende Karte) umgedreht und gemischt; das kommt allerdings bei der "Classic"-Variante, wie wir sie hier spielen, relativ selten vor. Dann MUSS man nach 8 oder Buben auch nochmal legen (ausser wenn das die letzte Karte war), oder eben ziehen, wenn man nicht kann. Und die Karte, die die Cutter-Farbe bestimmt, liegt nicht auf dem Stapel, sondern eigentlich quer _unter_ dem Ziehstapel; d.h., diese Karte ist komplett raus aus dem Spiel (weil sie immer so liegen bleibt), und derjenige, der das Spiel beginnt, hat die freie Auswahl, womit er anfaengt (bei einem "echten" Spiel wuerde der Verlierer mischen und austeilen, und der vorherige Gewinner hat das Privileg, als erstes ablegen zu duerfen - das koennte man ja hier sicher auch leicht realisieren. Bei der App basiert es auf dem Zufallsprinzip, wer anfaengt.). Wenn diese Cutter-Frabe-bestimmende Karte uebrigens zuaellig eine 7 sein sollte, wird sie wieder reingemischt, und eine neue Karte umgedreht, die die Cutterfarbe bestimmt - es gibt also kein Spiel, bei dem man nicht cutten kann.
    Dann zu der Version: zunaechst faende ich es sehr praktisch, wenn man zum "Debuggen"/Testen erstmal beide Blaetter auf dem Bildschirm hat - dann ist es leichter zu sehen, was passiert. Waere das ohne groesseren Aufwand moeglich?
    Es sind mir einige Sachen aufgefallen, die vielleicht schon erwaehnt wurden (hab den Thread erstmal nur ueberflogen):


    - Nach einer 2 scheint der Gegner nicht GEZWUNGEN zu sein zu ziehen, sondern kann weiterspielen - aber anscheinend zieht er bei der naechsten Gelegenheit, wo er dann zieht, gleich 2 Karten?!
    - Nach dem As und der Ansage, was jetzt default colour ist, kommt auf RETURN hin erstmal "falsche Eingabe"; wenn man es dann nochmal versucht, geht's aber?! Einmal hatte ich es auch, dass er wrong input angezeigt hat, ich dann das As nochmal spielen wollte, es aber nicht ging (wegen dem ja schon bekannten Bug, dass man direkt auf ein As erstmal kein As legen kann; das Programm _dachte_ also, das As sei schon gespielt worden - die Farbe war auch erfolgreich geaendert, von daher konnte ich dann eine Karte von der gerade gewaehlen Farbe ablegen (hatte aber mein As noch auf der Hand). In der naechsten Runde allerdings, als das As die letzte Karte auf der Hand war, hat das Spiel funktioniert, und ich hatte nach der Farbwahl gewonnen, ohne es nochmal machen zu muessen. In der naechsten Runde konnte ich dasselbe As 3x zum Farbwaehlen nehmen. :-)
    - Nachdem ich einen Buben gespielt habe (und nicht bedienen konnte, also ziehen musste), schien der Gegner 2x hintereinander dran zu sein?!


    Ich hoffe, ich habe das verstaendlich beschrieben; ich werde es mir bald nochmal genauer ansehen.


    Zur grafischen Darstellung: in PETSCII koennte man z.B. die Karten ueberlappend darstellen, und nur die vorderste komplett; z.B. mit 7 Zeichen fuer eine komplette Karte und 3 Zeichen fuer eine abgedeckte Karte. Damit waere schonmal eine Hand mit bis zu 11 Karten moeglich (wenn ich mich nicht verrechnet habe); sollten es mehr Karten werden, koennte man die darunterliegenden ja auf 2 Zeichen Breite reduzieren.


    Und als letztes eher eine Kuriositaet: ich bin nicht sicher warum, aber hier in Uganda sagt man zu Kreuz "Flowers" statt Clubs. :-) Muss ich mal recherchieren, wo das so verwendet wird.


    Ich bin sehr gespannt auf den weiteren Fortgang!

  • Soo. Für RKSoft habe ich das Spiel nun umgeschrieben. Es arbeitet jetzt mit Petscii Chars, also echten Kartensymbolen. Es sieht auch besser aus, weniger abstrakt. Siehe Anhang. Der Quellcode lässt sich auf jedem Plus/4,C128 und C64 ausführen. Das prg ist ein C64-prg. Bleibe ich also doch bei der alten Liebe ohne C128. :-)
    Man muss halt auf seine echte C64 Tastatur gucken und mit Shift-Y,Shift-X,Shift-A und Shift-S am Emulator die Kartensymbole direkt drücken. Also Shift-S09 eingeben für Herz9.


    Zu bugjams Punkten:


    - Nach einer 2 scheint der Gegner nicht GEZWUNGEN zu sein zu ziehen, sondern kann weiterspielen - aber anscheinend zieht er bei der naechsten Gelegenheit, wo er dann zieht, gleich 2 Karten?!


    -> Die 2 wird so interpretiert, dass wenn man nicht mit einer PASSENDEN (Farbe oder Zahl) Karte antworten kann, man 2 ziehen muss. Da können noch weitere 2en dazu kommen und sich aufsummieren. Wenn dann irgendwann einer nicht bedienen kann, zieht er die Anzahl Strafkarten die bis dahin angesammelt sind. Das Programm merkt sich das und verdonnert den ersten der nicht bedienen kann. Das kann auch der sein, der die 2 urspünglich ausgespielt hat.


    - Nach dem As und der Ansage, was jetzt default colour ist, kommt auf RETURN hin erstmal "falsche Eingabe"; wenn man es dann nochmal versucht, geht's aber?! Einmal hatte ich es auch, dass er wrong input angezeigt hat, ich dann das As nochmal spielen wollte, es aber nicht ging (wegen dem ja schon bekannten Bug, dass man direkt auf ein As erstmal kein As legen kann; das Programm _dachte_ also, das As sei schon gespielt worden - die Farbe war auch erfolgreich geaendert, von daher konnte ich dann eine Karte von der gerade gewaehlen Farbe ablegen (hatte aber mein As noch auf der Hand). In der naechsten Runde allerdings, als das As die letzte Karte auf der Hand war, hat das Spiel funktioniert, und ich hatte nach der Farbwahl gewonnen, ohne es nochmal machen zu muessen. In der naechsten Runde konnte ich dasselbe As 3x zum Farbwaehlen nehmen.


    -> Wenn man nach der Ansage zur Default Colour Return eingibt, dann gibt man nichts ein was das Programm verwerten kann. Es muss ein Herz-,Pik-,Karo- oder Kreuz-Symbol sein. Wenn man nach dem Leer-Return eine ordentliche Eingabe macht die das Programm versteht, wird diese Eingabe auch angenommen. Was nicht gehen sollte ist, dass er nach dem zweiten Versuch ein Leer-Return annimmt und man einfach weiter machen kann. Dass man ein As mit einem As beantworten kann habe ich ursprünglich nicht bedacht, das ist richtig. Es ist aber aus meiner Sicht eine mögliche Variation, es mit Absicht so zu machen.


    - Nachdem ich einen Buben gespielt habe (und nicht bedienen konnte, also ziehen musste), schien der Gegner 2x hintereinander dran zu sein?!


    -> Nein so sollte es nicht sein. Hast Du oben genau geguckt wie die Player 1 / Player 2 Beschriftung gewechselt hat? Wenn Du einen Buben spielst und danach ziehst, dann warst Du zweimal dran, dann ist der Gegner dran. Ob der danach nochmal darf hängt davon ab ob er selbst wiederum einen Bubden oder eine 8 Spielen kann. ich habe ein Auge drauf ob ich dieses Verhalten reproduzieren kann.


    Ich würde gerne schauen ob RK Soft mit der neuen Version eine Art GUI aufbauen kann, also Kärtchen-Petscii malen für das aktuelle Spieler-Blatt und die offene Stapelkarte. Dazu muss er meinen Quellcode doch ein wenig kennen. Ich hoffe das Grobe ist soweit klar.


    Dann würde ich mich gerne noch um eine simple KI kümmern. Diese wird immer versuchen die aktuell höchsten Karten loszuwerden und zu cutten sobald es möglich ist, unabhängig von der Blatt-Zahl. Das ist genauso schlecht wie die Android-App, aber schon jetzt muss auf einem C64 in langsamem Basic hierzu sortiert, ausgewertet und ausgespielt werden. Und die KI sollte zum Ziehen eben keine 10 Sekunden brauchen. Wie weit sich das verlängert mit verschachtelten und bug-anfälligen Abfragen möchte ich nicht ausprobieren. Das geht mir in 8 Bit Basic zu weit.


    Prio 1 ist bei mir jetzt die einfache KI. Ob ich die Regelvariation, die Bugjam als Bugs ansieht, noch ändere, weiß ich noch nicht. Mein Code ist da eher fragil und ich will nicht wegen kleiner Änderungen sehr viel Zeit verbraten, die ich lieber für die KI nutzen möchte. Nur da, wo etwas wirklich nicht klappt, also, ein Spieler ohne Grund zweimal dran kommt, da würde ich mich dransetzen wenn ich das Verhalten reproduzieren kann. Ansonsten ist dieses Spiel eben nicht Matatu pur sondern ein deutscher Dialekt davon. ;-)


    Vor Weihnachten will ich das Endergebnis (wenigstens mit KI) auf csdb stellen. Schicke Kartenoptik von RKSoft dann zusätzlich oder ich warte noch auf ihn, wenn er mit meinem Quellcode klarkommt.

  • So, work in progress ^^


    Eine Frage aber: wofür soll das letzte mid$ in Zeile 1612 sein?

    Code
    1. 1612 printmid$(ca$(i,pl),1,3);mid$(ca$(i,pl),4,2)" ";

    Du kannst übrigens am Code arbeiten, ich pack meine Sachen seperat rein und bearbeite erstmal nur den Statusausgabe von Zeile 1399 bis 1650.


    Nachtrag:
    Böser Fehler! Du benutzt Strings/Variablen mit mehr als 2 Buchstaben!!! Bitte fürs nächste Mal merken, daß das Commodore BASIC nur AA-ZZ kann (Zahl von 0 bis 9 funktioniert alternativ als zweites Namenszeichen auch).

  • @ rk soft


    Dass cbm basic nur zwei Buchstaben pro variable auseinander halten kann ist mir bekannt. Ich habe doch keine doppelten drin?!


    Es ist nur so dass ich in manchen Fällen mehr Zeichen benutzt habe um selber noch durch zu blicken. Hauptsache die ersten beiden Buchstaben unterscheiden sich.


    Das zweite mid schneidet die Zahl aus, das erste das Karten Symbol. Die Zahl muss separat auswertbar sein und wird im Cut Fall vom aus geschnittenen String in eine Zahl gewandelt.

  • Erste Preview ist fertig. Hab das mit den MID$ beibehalten, auch wegen der Kartenanzeige schon ^^. Auch werden pro Reihe max. 9 Karten angezeigt. Weitere werden darunter angezeigt.


    Lauffähig auf C16/+4, C64 und C128. VC20 hab ich (noch) nicht angepasst, da dieser weniger Zeichen pro Zeile hat. Textdatei kann direkt per Copy&Paste in VICE eingefügt werden.


    Nachtrag:
    Bin mit dem PETSCII nicht wirklich glücklich. Würde das ganze zu gern als eigenen Zeichensatz erstellen, was dann schöner aussähe. Allerdings müßten dann je System 2-3 POKE Adresse angepasst werden. Dies aber später irgendwann.


    Nachtrag #2:
    Du speicherst ja im String c0$ die aktuelle Kartenfarbe. Du hast nur vergessen, dies gleich beim Start in diesen String zu speichern. Warum ich das erwähne? Nun, beim Farbwechsel fiel mir auf, daß die Ausgabe der aktuellen Farbe nur beim Wechsel erwähnt wird. Dies möchte ich aber nun gern (wenn dies für dich okay ist) immer ausgegeben haben. Spieler 1 z.B. wechelt die Farbe, bekommt die Ausgabe, daß dies geschehen ist. Spieler #2 ist nun dran, Bildschirm wird gelöscht und er weiss nicht, daß es eine neue Farbe gibt. ;)

  • Darf ich eigentlich ein Ass ablegen, egal welche Farbe sie hat oder muss es die Farbe sein, die aktuell ist? Dieses Problem hab ich nämlich grad beim Testen (siehe Bild).


    PS.:
    übrigens hab ich die Ausgabe des Farbwechsels nun so eingepasst, daß er nur erscheint, wenn wirklich einer stattfand. Auf diesem Bild sieht man dies. Hatte vorher einen Wechsel gemacht. Gleiche Farbe wie auf dem Stapel, also nicht wundern. ^^


  • Sorry, wenn ich dies nicht darf (evtl. Doppelpost?) Bitte mir bescheid geben, dann editier ich das nächste mal meinen letzten Beitrag!


    So, Anzeige etwas optimiert und läuft ein wenig schneller. Meinen Code hab ich ab 5000 reingepackt. Ansonsten hab ich nur den Anzeigecode bearbeitet.
    Zur Info:
    Die Variable mt steht für Machine Type. Welcher Wert für was steht, sieht man ab 5000 in den REM Zeilen. Standardmachine ist im Code derzeit +4. Unterschiede sind nur die Standardfarben des Cursors.


    matatu64-petscii_rksoft_v2.txt


    Commodore 264 Version (C16/116/+4):


    Commodore 64 Version:


    Wünsche einen angenehmen Abend. Bin auf weitere Ergebnisse gespannt.

  • sehr sehr schick RKSoft, was ich aber noch bemaengeln muss ist das die karten noch nicht "echt" bennant sind.


    auf alten blaettern hatt man ja zb "bube,dame,koenig,ass" stehn das koennte man doch zumindest als abkuerzungen.
    auf die karten pressen. zb "B->Bube,D->Dame,K->Koenig,A->Ass", ich sage das nur weil mich diese zahlen werte
    konfus machen.


    ansonsten weitermachen gefaellt mir :)


    salute

  • Klasse, genau so hab ich mir das vorgestellt - ein schoenes Kollaborationsprojekt! \o/
    Cool, dass man den .txt direkt in VICE einfuegen kann, das wusste ich nicht - hab es erstmal ueberlesen und mich an PETCAT versucht, bin aber gescheitert. :/
    Jetzt zu den ganzen Punkten:


    - Ja, As auf As sollte gehen (geht auch jetzt schon, wenn das zweite As zufaellig die vorher gewuenschte default colour hat)
    - Die Farbe vom As ist in der Tat egal, unabhaengig von der momentanen default colour
    - Zur 2: das laeuft eigentlich genauso wie bei der 7 bei Mau Mau - d.h., entweder man legt eine 2 auf eine 2, oder man muss direkt zwei Karten ziehen. Sonst kann man ja z.B. trotz einer 2 das Spiel beenden, wenn man die zur 2 passende Farbe als letzte Karte in der Hand hat. Das sollte m.E.n. geaendert werden. Im Original-Matatu summieren sich die 2er uebrigens nicht auf, wenn mehrere hintereinander gelegt werden - aber das ist durchaus eine moegliche Variante (bei Mau Mau gibt es ja auch beide Varianten bezueglich der 7).
    - Zum As: sorry, das verstehe ich immer noch nicht ganz - wenn ich ein As gelegt habe und mir eine Farbe gewunscht habe, und es erscheint die Meldung "default colour for next round: ...", wie quittiere ich denn dann diese Anzeige? Auch wenn ich NOCHMAL die entsprechende Farbtaste druecke, kommt "wrong input", ich komme zurueck zur Kartenauswahl, aber die default colour ist trotzdem schon geaendert (aber das As noch auf der Hand - d.h., ich kann mit einem As als letzter Karte auch das Spiel nicht beenden). Ich meinte NICHT eine Leereingabe, wenn nach der Farbe gefragt wird - das faengt er korrekt ab mit "wrong input". Wenn ich etwas anderes als eine Farbe eingebe, erscheint diese Angabe dann trotzdem als default colour (z.B. eine Zahl oder ein BUchstabe, oder eine Kombination) - das ist aber nur Kosmetik, da es keine Konsequenzen hat (man kommt ja so lange zurueck zur Farbeingabe, bis man tatsaechlich eine richtige Farbe waehlt).
    - Zum Buben: kann sein, dass ich mich da tatsaechlich geirrt habe - werde es weiter austesten.
    - Zur Cutter 7: die Abfrage, ob man ausreichend wenig Punkte hat, funktioniert ja schon mal; waere es viel Aufwand, dass man dann zur Kartenauswahl zurueckverwiesen wird, wenn die Bedingung <= 25 Punkte nicht erfuellt wird, anstatt die Cutter-7 als "normale" 7 auszuspielen?
    - Das petscii ist super, aber Kreuz erscheint rot und Karo schwarz - da ist wohl was durcheinandergekommen. ;-) Super finde ich auch, dass die default colour angezeigt wird, falls abweichend von der obersten Stapelkarte, und dass zumindest die Cutter-Farbe angezeigt wird - mein Vorschlag waere hier, stattdessen die ganze Cutter-bestimmende Karte anzuzeigen, die dann ja aus dem Spiel ist (und die Karte nicht als erste Karte des Abwurfstapels zu nehmen, sodass der beginnende Spieler die erste Karte frei waehlen kann) - aber wenn das (erstmal) zu viel Aufwand ist, ist das auch ok. Wird denn abgefragt, ob die erste Karte zufaellig eine 7 ist, und dann eine neue Karte genommen, falls ja?
    - Auch dass man nach dem Ziehen gleich ablegen kann (falls die gezogene Karte passt), koennte man auch spaeter noch einbauen; da man dann aber auch nicht ablegen MUSS, muesste es dann noch eine "Pass"-Funktion geben.
    - Ebenso fuer ein Mischen des Ablegestapels, falls der Ziehstapel leer ist.


    Und um Kosmetik wie einen speziellen, grafischen Charset fuer die Karten kann man sich dann auch noch ganz am Schluss kuemmern - erstmal sieht das so schon sehr gut aus!
    Ich bin gespannt, wie es weitergeht. Danke fuer die harte Arbeit! :-)

  • @bugjam
    Hatte Pik Ass und wollte diese auf ein Herz 10 legen, ging irgendwie nicht. Dies wollte ich nur wissen, da man bei Mau Mau den Buben (egal welche Farbe) immer ablegen kann (so kenn ich das von kleinauf so).


    Zum PETSCII: fiel mir gesteren gar nicht auf, ich fix das, sind nur 3 kleine Sachen im Code, sorryZum Rest müßte @Bytebreaker seinen Senf abgeben. Er coded das ja. ;)


    PS:
    Wäre es schlimm, wenn die Karten eckig wären?


    Und, gibt es eine Begrenzung, wieviele Karten man auf der Hand haben darf? Ich weiss, daß irgendwann nach 26 Karten schluss ist. Wegen der GUI könnte ich Probleme dann bekommen, wenn zuviele Karten gleichzeitig auf dem Bildschirm sind.


    Zu guter letzt; können wir uns erstmal auf ein System beschränken (z.B. C64)? Ich frage nur, weil wir ja nun mit Farben hantieren und dies nun zu Problemen führt (z.B. Schwarze Karten im 80 Zeichenmodi auf dem 128er bei Standardhintergrundfarbe). Mein Vorschlag wäre, wir arbeiten am C64er (da BASIC V2) und portieren das später auf die einzelnen Systeme um. Was sollte eurer Meinung nach als Hintergrundfarbe gewählt werden?

  • Hm, das Problem, ein As nicht auf eine andersfarbige Karte legen zu koennen, ist mir bisher noch nicht untergekommen?! Das ist bei Matatu in der Tat genau wie beim Mau Mau.
    Re: maximale Kartenanzahl, da gibt es in der Tat keine Begrenzung - aber man muesste schon mutwillig falsch spielen (d.h. einfach immer ziehen statt abzulegen), um zu mehr als vielleicht 15 Karten oder so zu kommen. Man koennte mal theoretisch ausrechnen, wann man bedienen koennen MUSS (entweder per Farbe oder per Zahl oder per As), wenn man zunaechst zufaellig erst ALLE nicht passenden Karten ziehen wuerde (was in der Praxis natuerlich eh nicht vorkommt). :) Bei der GUI tritt das Problem ja erst bei mehr als 27 Karten auf, wenn die 4. Kartenreihe angefangen wird, und die oberste Bildschirmzeile deshalb aus dem Bildschirm scrollt.
    Was das Layout angeht, ich wuerde sagen, dass man da erstmal nehmen kann, was am praktischsten ist - also auch eckige Karten. Am Schluss kann man dann ja immer noch schauen, wie man das Ganze aufhuebscht (z.B. mit Custom-Charset etc). Als Hintergrundfarbe waere wahrscheinlich erstmal Weiss oder Hellgrau am einfachsten?!
    Und ich stimme zu, fuer Euch Coder ist wahrscheinlich erstmal Beschraenkung auf BASIC V2 am besten.

  • Pik As auf Herz 10 klappt nicht. Asse werden momentan nur gespielt wenn die Farbe auch passt.
    Dafür kann man Asse jetzt mit Assen kontern (müsste man, hoffe ich).


    Ich bin jetzt ganz zum C64 zurück gegangen wegen der Farben. Die gesamte Farbdarstellung am C64 ist aber getriggert auf mt=2. D.h.nur wenn das Spiel am C64 läuft kommen die Pokes.


    Ist der mt (Machine Type) anders, kommen zwar prints, aber keine Pokes. Dadurch ist der Quellcode immer noch "plattformunabhängig". Das hat RKSoft prima eingebaut, die sog. mt's (Machine Types).


    Damit das Spiel "afrikanischer" aussieht habe ich das Farbsetting geändert. Ich komme erst woeder ab 9 Abends dazu weiterzumachen. Anbei die neue Farbgebung,

  • Ich habe derzeit diese Farbwahl am Laufen. Maximal 7x4 Karten können angezeigt werden. Die Zwischenräume brauch ich für den SELECT Cursor ;). Ich will die zweite ------ Reihe plus Text (INPUT entfern ich dann) in die beiden letzten Reihen packen. Ich schau derweil noch, wo ich Cutter-Farbe und aktuell abgelegte Karte anzeigen lasse.


    Die Variablen mt und co hab ich wieder entfernt und das Programm spezifisch auf C64 umgestellt. (2 POKES für Rahmen- und Hintergrundfarbe, Cursorfarbe wird per CHR$ gesetzt)