Hallo Besucher, der Thread wurde 14k mal aufgerufen und enthält 58 Antworten

letzter Beitrag von Hexworx am

Kartenspiele

  • Hallo zusammen!


    Die Strategiespiele-Compo läuft ja schon, aber ich frage mich (als Nicht-Coder), wie schwierig es wohl ist, auf dem C64 eine KI für Kartenspiele wie Skat zu entwickeln. Auf der Gamebase gibt es ja ein paar Skats - weiß jemand, ob da eines was taugt? Was mir vorschweben würde, wäre auf jeden Fall noch Schafkopf, und außerdem ein nettes afrikanisches Spiel, das ich grad heute wieder gezockt hab - Matatu.
    Mich würden mal Meinungen interessieren.


    Bugjam


    PS: Das Forum scheint absolut nicht mit dem IE zu funktionieren - ich muß das hier grade auf dem Handy tippen... :-/

  • Hmm... Ich würde mal sagen, daß das Problem bei der Entwicklung einer KI für Kartenspiele weniger der C64 ist, sondern der Algorithmus. Auch Schach wurde ja mehrfach für den C64 umgesetzt. Falls Du noch keinen Algorithmus vorliegen hast, würde ich Dir empfehlen, diesen zuerst auf dem PC zu entwickeln und ausgiebig auszutesten, und erst anschließend auf den C64 zu übertragen. Hierzu könntest Du z. B. C verwenden. (6502-)Assembler wäre nicht unbedingt die geeignete Sprache zur Entwicklung, und das C64-Basic ist zu langsam und für diese Art Programm zu mager ausgestattet (keine komplexen Strukturen, keine lokalen Variablen, keine vernünftige Rekursion, keine Parameter etc).

  • wie schwierig es wohl ist, auf dem C64 eine KI für Kartenspiele wie Skat zu entwickeln.

    Stelle ich mir insgesamt schwierig vor, sowas für Skat zu 'basteln'. Irgendwie ist Skat doch insgesamt recht kompliziert/komplizierter, als man denkt. Und dann bräuchte es i. d. R. ja auch noch einen Schwierigkeits-/Blödheits-Grad für die Gegner.


    Auf der Gamebase gibt es ja ein paar Skats

    Ich hab' mir eben ein paar angeguckt, und die waren wohl alle in BASIC (oder bestenfalls kompiliert). Da gibt es wohl bislang nix vernünftiges.


    Wenn ich was machen würde, dann Arschloch/"Negern" :D . Das haben wir damals ohne Ende beim Bund oben auf der Haubitze sitzend gespielt :rolleyes: . Hach...

  • Ich hab immer noch die Spielidee zu Mau Mau in der Schublade. Ich wollte in c64 Basic mal ein Mau Mau Spiel machen. Aber ohne KI.


    Am CPC habe ich ein schönes Basic Listing gesehen zum Spiel "Pontoon". Man muss der Zahl 21 möglichst nahe kommen und rechtzeitig aufhören. Die CPU versucht einen dann einzuholen bzw zu überholen. Wer über 21 kommt verliert automatisch.


    Das ist sehr einfach zu programmieren weil die ki hier nur stur an die Spieler Vorgabe gehen muss und rnd entscheidet wer am Ende wo steht.


    Evtl ein erster Anfang es mit so was zu probieren statt gleich eine Skat KI zu bauen.


    Gespielt wird Pontoon mit dem normalen Kartensatz. Listing kann ich bei Interesse beisteuern es ist zwar vom CPC aber als Basic 1:1 zu verstehen, mit wenig Aufwand sogar zu portieren.

  • Zum Thema Skat gab es einige Versuche, die auch teilweise als Abtippsoftware für diverse Systeme herausgekommen sind. Aber in meinen Augen recht wenig empfehlenswert.


    Zur Info nebenbei: ich bin seit über 20 Jahren aktiver Skatspieler im Verein und auch (seltener) größere Tuniere. Viele Spielweisen der Spieler - egal ob als Einzelspieler oder in der Gegenpartei - kann man einfach nicht lernen, das entwickelt sich mit der Zeit.

  • Hi alle, Danke fuer die Antworten. Das ist allerdings ein Missverstaendnis: nichts liegt mir ferner als Programmieren. :-) Ich koennte hoechstens die Grafik beisteuern. Dachte nur, ich poste das im Coder-Forum, weil sich ja da die Spezialisten rumtreiben - ich wuerde eher jemand suchen, der sowas vielleicht umsetzen mag. :-) Ich weiss, Coder sind immer rar und/oder sehr beschaeftigt, dachte nur, jemand wuerde das als interessante Herausforderung empfinden. Besonders dieses afrikanische Spiel waere schon sehr lustig - am coolsten waere natuerlich noch ein Mehrspieler-Modus ueber Netzwerk. :-) Wenn es sich jemand anschauen mag: es gibt eine Android-App namens Matatu (von Kola Soft - nicht die Minibus-Fahrsimulation gleichen Namens) - da ist die KI allerdings eher doof, leider.

  • Hast du eine Anleitung zu Matatu?


    Hab nur das hier gefunden:

    Zitat

    Matatu is a familiar feeling card game from Kola Studios, where you are asked to play all your cards before your opponent does. In the traditional 'run/suit' style, you can play a card that has the same suit or the same number as the card at the top of the pile. It's a smooth implementation of the concept, and perfect for sitting around in the sunny weather.



    There are some twists as you would expect - the Ace allows you to change the suit, any 'two' forces your opponent to play a two or pick up two cards, the 'eight' and 'Jack' cards give you an extra turn, and if you match the upturned 'cutter' suit with the 'seven of cutter' then the game comes to an immediate end, and whoever has the least pips in their hand is the winner.

    Was ist mit dem 'seven of cutter' gemeint :gruebel ?

  • Zitat von Matatu Description

    The Neat tricks:
    The card under the deck is called the “cutter”. If you play a “7″ with the same suit as the cutter, you’ve “CUT” the game, and the cards are counted. Cards are counted by their value, except the ACEs, which are 15 and the “2″s which are 20. Jack is 11, Queen is 12, King is 13. The person with the lower sum, wins the game!

  • Aha. Danke.


    Hier dann nochmal alles von hier:



    Also kann der Cutter selbst keine 7 sein, ne?

  • Richtig, die 7 gibt es ja nur 1x pro Blatt.
    Also kann der Cutter nie eine 7 sein, denn die hat man ja dann selber auf der Hand. Das Blatt wiederum kann gleich sein. So hab ich es auch verstanden.

    Macht Sinn so.


    Aber wo kommt der 'Cutter' überhaupt her? Wird gemischt und eine Karte gezogen (oder die unterste genommen?) und wenn '7' wieder zurückgesteckt und neu gezogen?


    Insgesamt wohl schon überschaubar, aber die KI...? Trotzdem wohl nicht ohne... :gruebel

  • Macht Sinn so.
    Aber wo kommt der 'Cutter' überhaupt her? Wird gemischt und eine Karte gezogen (oder die unterste genommen?) und wenn '7' wieder zurückgesteckt und neu gezogen?


    Insgesamt wohl schon überschaubar, aber die KI...? Trotzdem wohl nicht ohne... :gruebel

    @Cutter: Ja genau, erst warden die je 7 Karten an die beiden Mitspieler verteilt, und die naechste Karte dann umgedreht und unter den Stapel geschoben; und eine 7 kommt in den Stapel zurueck und wird durch eine neue Karte ersetzt.
    Es gibt noch eine Regel, die in den Regeln (zumindest den hier zitierten Teilen) nicht erwaehnt wird: um zu "cutten", darf man (nach dem Ablegen der 7) selbst hoechstens 25 Punkte auf der Hand haben - damit wird vermieden, dass man quasi direct nach dem Geben cutten kann, wenn man zufaellig die richtige 7 hat (was ja dann reines Glueck waere).
    Und nach dem ersten Spiel gibt normalerweise der Verlierer, und faengt dann auch an. Das ist in der App nicht so, da ist es tatseachlich "random"; macht aber im wahren Leben schon Sinn.
    Am Anfang waere der "classic mode" definitiv einfacher (und natuerlich nur 1 Computergegner) - damit hat man weniger Komplexitaet in den Regeln (z.B. auch nicht oben erwaehnt ist, dass man in der Joker-Variante auf eine 3 auch eine 2 der gleichen Farbe legen kann, und dann nur eine ziehen muss). Wenn man sich ein bisschen eingespielt hat, merkt man (in der Joker-Variante - spiele meistens die), dass die KI der App sehr eingeschraenkt ist; ein paar Sachen waeren dabei wirklich simpel auszuschliessen.
    Aber die KI zu programmieren, ist sicher nicht so einfach, weil man ja auch strategisch spielen kann (z.B. wann und wie setze ich ein As ein; manchmal macht es Sinn, sich eine Farbe zu wuenschen, die man selbst nicht hat, von der man aber weiss, dass der Gegner, der vielleicht nur noch eine oder 2 Karten auf der Hand hat, sie auch nicht hat....).
    Aber ich freu mich, dass ich scheinbar doch ein bisschen Interesse geweckt habe. Bin auch gerne bereit, mal eine Runde online zu zocken zum Ueben. :-)

  • Vielleicht gebe ich noch ein paar Hinweise zur Taktik, und Herausforderungen fuer die KI.
    Grundsaetzlich ist Taktik natuerlich nicht so einfach zu programmieren - ausser man programmiert ein selbstlernendes neuronales Netzwerk, das sich auch jeweils auf den Gegner einstellt. :-) Am besten waere es, sagenwirmal 3 verschiedene Schwierigkeitsstufen zu haben. Manche Sachen sind dabei recht einfach zu quantifizieren - z.B. das "Gedaechtnis": cbm-warrior wird bestaetigen koennen, dass gute Spieler genau wissen, wann wer welche Karte gespielt hat. Das waere also in der hoechsten Stufe auch der Fall, und auf den niedrigeren Stufen eben per Wahrscheinlichkeit vergisst er z.B. 30% oder 60%.
    Einer der Fehler, die die App macht, ist z.B., dass sie Karten anscheinend stur nach Wert ablegt; das fuehrt z.B. dazu, dass sie, wenn sie sonst nur niedrigere Karten hat, mit einem Buben anfaengt, auch wenn sie direct danach eine ziehen muss, weil sie garkeine weitere Karte von derselben Farbe zum Bedienen hat. Ebenfalls kann es guenstig sein, einen Buben oder eine 8 zum Farbwechsel aufzubehalten: wenn z.B. Herz B und 10 auf der Hand sind, und von Karo B und 5, und Herz liegt an, macht es Sinn, erst die Herz 10 zu legen, und dann in der naechsten Runde Herz B - Karo B - Karo 5.
    Ein Fehler, den die App macht, ist z.B., dass sie _immer_ cuttet, wenn es moeglich ist (d.h., sie die Cutter-7 und hoechstens 25 Punkte auf der Hand hat) - egal wieviele Karten der Gegenspieler auf der Hand hat (auch wenn es nur eine Karte ist, sodass es sogar unmoeglich ist, dass die App gewinnt, wenn sie selbst mehr als 19 Punkte in der Hand hat: selbst wenn der Gegenspieler die mit einer Karte maximal moegliche Punktzahl, also 20 (mit einer 2) in der Hand hat, verliert die App automatisch, da auch bei einem eventuellen Gleichstand 20:20 derjenige verliert, der selbst gecuttet hat - man muss also _weniger_ Punkte haben).
    Ein offensichtlicher Fehler ist auch, dass die App _immer_ Farbe bedient, wenn sie kann - auch wenn der Gegenspieler sich mit einem As als vorletzte Karte eine Farbe gewuenscht hat (und damit klar ist, dass er gewinnt, wenn die Farbe nicht gewechselt wird). Aussere natuerlich, es ist eine 2; aber ansonsten sollte er auf jeden Fall die Farbe per As wechseln, und wenn er kein As hat, dann eine Karte zu ziehen, in der Hoffnung, vielleicht ein As (oder die 2 von der gewuenschten Farbe) zu ziehen - denn das ist die einzige Chance, den Sieg des Gegners noch zu verhindern (und die Anzahl der Punkte, die man noch auf der Hand hat, ist egal - das waere dann noch eine weitere Variante, die man spaeter einbauen koennte, dass die Punktzahl des Verlierers eben NICHT egal ist, sondern als Minus aufgeschrieben wird - das macht das dann nochmal etwas interessanter).
    Aber auch in anderen Situationen kann es Sinn machen, eine Karte zu ziehen, anstatt zu bedienen - z.B. wenn man sich eine 2 oder ein As fuer spaeter im Spiel aufheben moechte; das ist dann schon relative raffiniert fuer die KI, das zu entscheiden... Man kann uebrigens die gezogene Karte direkt ablegen, wenn sie passt - Weiss nicht, ob das in den Regeln so klar erwaehnt wurde. Und noch eine Ergaenzung zu den Regeln: wenn der Zieh-Stapel aufgebraucht sein sollte, wird der Stapel mit den abgelegten Karten (bis auf die oberste) gemischt und umgedreht wieder auf die Cutter-Karte abgelegt zum Ziehen - das kommt bei der Variante aber wahrscheinlich nicht oft vor (bei der Joker-Variante durchaus).
    Alle Klarheiten beseitigt? :-)

  • Alle Klarheiten beseitigt?

    So langsam steigt man durch :) .


    Einer der Fehler, die die App macht,


    Ein Fehler, den die App macht


    Ein offensichtlicher Fehler ist auch, dass die App

    Kann man dann wohl auch kaum KI nennen in der App. Die geht wohl nur ein irgendein Standardprogramm durch und schlägt beim ersten Treffer zu. Das kommt dabei raus, wenn etwas im VK nur 29 cent kosten darf*.


    *Ach nee, costa ja gar nix.

  • Ja, die KI ist leider eher eine KD. ;-) Das laeuft schon sehr einfach ab - die App versucht stur, immer zuerst die hoeheren Karten loszuwerden. Das fuehrt z.B. auch dazu, dass sie mit einem Buben als allererste Karte anfaengt, aber dann garkeine weitere Karte von der Farbe zum Drauflegen hat und ziehen muss. Oder dass sie, hat sie z.B. 10 und 8 von einer Farbe, erst die 10 spielt und dann in der naechsten Runde die 8 (und dann wieder ziehen muss), anstatt gleich 8 und 10 zu legen. Auch beim Farbe wuenschen per As fuehrt das i.d.R. dazu, wenn er z.b. 4, 5, 6 von Herz hat und die Dame von Kreuz, er sich trotzdem Kreuz wuenscht. Das ist absolut vorhersagbar, wie die App spielt. Im Prinzip ist es natuerlich nicht falsch, die grossen Karten zuerst loswerden zu wollen - aber gelegentlich mal eine kleinere zuerst zu spielen aus taktischen/Taeuschungs-Gruenden waere (zumindest in der staerksten Spielstufe) auch nicht verkehrt.
    Bytebreaker: Die App ist aus Uganda (meiner momentanen Heimat), nicht aus Ghana - aber das wird wahrscheinlich sogar noch mehr mit Buergerkrieg, Ebola und wasweissich assoziiert... Aber Du hast vollkommen recht, wuerde in Europa sicher kaum jemand vermuten, dass es hier App-Programmierer gibt.
    Hexworx: Was mich wundert ist, dass da noch nichtmal Werbung in der App ist - dieses Spiel ist hier in Uganda ein ziemlicher Nationalsport, das zockt jeder; und Smartphones haben auch mehr als genug Leute. Und die Werbeindustrie hier ist auch nicht ohne (wuerde man vermutlich auch nicht denken...). Ich habe die Jungs auch mal kontaktiert und ein paar Bugs reportet - geantwortet haben sie immer sehr schnell, aber was sie gefixt haben, weiss ich nicht - ich habe V2.0, und im Playstore ist die aktuelle Version 2.2, allerdings scheinen sie leider keine Update-Funktion eingebaut zu haben. Cool ist auf jeden Fall die Option zum Online-Spielen gegen andere Zocker in anderen Teilen der Welt.


    Also, Bytebreaker, das waere echt klasse, wenn Du Dich daran mal versuchen wuerdest - ich bin gespannt! Um zu beurteilen, was die KI so macht, wuerde ich vorschlagen, zumindest in der Entwicklung eine Option einzubauen, dass man die Karten des Computerspielers sehen kann.
    Und noch eine Kleiningkeit zur optischen Darstellung: man sollte es irgendwie anders machen als in der App, wo man weiss, welche Karte die App zuletzt gezogen hat, weil sie an derselben Stelle liegenbleibt - das sollte man irgendwie kaschieren. Ein menschlicher Spieler schiebt ja auch mal die Karten zusammen, sortiert um usw.

  • Ok.
    Klar, die KI will immer die höchsten Karten zuerst loswerden, damit es beim Cutten das niedrigst mögliche Blatt hat. Darüber werden andere Strategien aber vernachlässigt. Hab ich verstanden.


    Also ich sage hiermit zu, ich setze das in C64 Basic um, es wird aber keine 3 Schwierigkeitsgrade geben sondern nur einen. Es wird erstmal nur den Classic Modus ohne Joker geben und es wird einen 1Player vs KI und einen 2 Player Modus geben.


    Wann das fertig wird? Wahrscheinlich dieses Jahr.


    Im Moment zerbreche ich mir gerade das Hirn darüber, eine Koch-Kurve zu zeichnen und man gibt als Anwender vorher die Anzahl Iterationen ein. Wenn das klappt soll es natürlich am Ende eine Koch Schneeflocke werden. Klar, Code-Beispiele dafür gibt es viele im Netz aber ich will doch selber drauf kommen. Umgesetzt wird es erstmal in Amstrad CPC Basic, evtl. dann auf den Plus/4 portiert.


    Ich bin kein Prorgammiergenie, ich bin nur einer der das geil findet. Was mein Verstand nicht sofort versteht gleiche ich aus durch Zähigkeit und Zeit. Daher brauche ich länger als echte Mathe Cracks, aber irgendwann, wenn der Mathe Crack schon längst das übernächste Projekt fertig hat, fällt bei mir der Groschen. :-)