skat

Du hast eine Idee für ein Projekt?
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

hendrikS hat geschrieben:
BlackJack hat geschrieben:@hendrikS: Wofür kommt Python nicht in Frage? Eine Skat AI? Wäre die soo rechenaufwändig? Wobei das wohl auch alles nicht mehr viel mit der Ausgangsfrage zu tun hat.
Mit der Ausgangsfrage hat es nichts mehr zu tun. Davon abgesehen ist Skat wie Schach ein Strategiespiel. Bringe doch mal Deinem PC bei einen Grand ohne 4 zu spielen oder richtig zu reizen und dann ist dann ja manchmal der König zu dritt, der ja immer n'en Ritt macht. Wird keiner in Python schreiben. Zumindest nicht, wenn es gut werden soll.
Ich sehe kein Problem bei sowas. Die KI hat die Karten vor sich und agiert einfach nach ein paar Regeln. z.B geht die KI alles durch.

Möchte ich Kreuz spiele? 3Bube *10pkt + 2kreuz*5punkte = 25punkte
Möchte ich ....
Möchte ich Grand spielen? 3Buben * 15pkt + 1ass*5punkte + 2 10nen*3punkte = 56punkte

das macht man für alle Spielvarianten und der PC wählt dann die Modi wo er die meisten Punkte erreicht hat und reizt dann bis zu den Punkten die dieser Spielvariante hergibt. Falls ein Computerspieler zu oft bei einem Spielmodus verliert muss man die Punkteverteilung anpassen.

So wenn der Spielvariante entschieden ist ist es nur noch Rechnerei, hat mein Gegenspieler noch Trumpf? hat er noch Kreuz? Ja hat er letze runde bedient dann spiel ich mein Kreuzass.

Man muss nicht mehrer Varianten durchspielen um ein realistisches Spielverhalten zu bekommen.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Sr4l hat geschrieben:Ich sehe kein Problem bei sowas. Die KI hat die Karten vor sich und agiert einfach nach ein paar Regeln. z.B geht die KI alles durch.
Ohne 11, Spiel 12 * Eichholz = 144.
Bei Deiner Variante könnte also auf Eichholz gereizt werden obwohl der PC Spieler gar kein Trumpf hat. Dies ist eher theorescher Natur und kommt in einem von 10000 Fällen vor.
Ne so einfach geht das nicht. Du musst schon Deinen PC befähigen das Blatt zu bewerten, welche Farbe die höchsten Gewinnaussichten hat, oder ob es überhaupt eine gibt. Dabei spielt auch eine Rolle ob ich in Vor, Mittel oder Hinterhand sitze und noch 100 andere Faktoren.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich habe mir das so vorgestellt:
http://paste.pocoo.org/show/152873/

Ausgabe z.B:

Code: Alles auswählen

SPIELRKARTEN
============
[Karte(kreuz, dame, spieler1), Karte(kreuz, 8, spieler1), Karte(karo, 8, spieler1), Karte(kreuz, 9, spieler1),
Karte(karo, 10, spieler1), Karte(karo, koenig, spieler1), Karte(kreuz, bube, spieler1), Karte(herz, bube, spieler1),
Karte(karo, ass, spieler1), Karte(kreuz, ass, spieler1)]
SPIELMODUS
==========
{'herz': 36, 'pik': 26, 'kreuz': 76, 'karo': 66, 'grand': 37}
Nach der Ausgabe sollte die KI also als spielvariante kreuz wählen karo könnte aber nach nach Aufnahme des Skats recht gut abschneiden.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Sr4l hat geschrieben:Ich habe mir das so vorgestellt:
http://paste.pocoo.org/show/152873/
Ja, schon mal ein Ansatz zu einer Bewertung des Blattes zu kommen. Die NULL fehlt noch. Müßte man mal n'paar zufällige Tests machen wie nahe das dem Normalspiel kommen würde.
problembär

Übrigens: Bei xskat sollte man noch die Kartenbilder von

http://www.xskat.de/xskat-cards-de.html

runterladen und installieren, damit es wie gewohnt aussieht (sonst ist es etwas häßlich).
Auf den Kartenbildern war wohl ein Copyright (siehe auf der Seite).

Die Quellen von xskat 4.0 sind 873K C-Code. Könnte man vielleicht mal versuchen, nach Python zu übersetzen. Wenn einen das sehr interessiert und man unbedingt was zu dem Thema lernen will, heißt das :) ...

Gruß
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

problembär hat geschrieben:Die Quellen von xskat 4.0 sind 873K C-Code.
Ich hatte so in der Größenordnung min. 100000 LoC geschätzt. Ich glaube das matched so halbwegs.
In Python wäre es natürlich deutlich weniger.
Sonst gibt es auch ein nettes Forum, in dem ähnlich gefachsimpelt wird wie hier.
http://www.skatforum.com
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

hendrikS hat geschrieben:
problembär hat geschrieben:Die Quellen von xskat 4.0 sind 873K C-Code.
Ich hatte so in der Größenordnung min. 100000 LoC geschätzt. Ich glaube das matched so halbwegs.
In Python wäre es natürlich deutlich weniger.
Sonst gibt es auch ein nettes Forum, in dem ähnlich gefachsimpelt wird wie hier.
http://www.skatforum.com
~700KB C Code und Header Files
und darin stecken nach ohcount 18 852 reine Codezeilen und 290 Kommentarzeilen

Ich finde die KI aber nicht so gut. Habe gerade 11spiele gespielt, davon habe ich 8gespielt und 6gewonnen und 3spiele hat eine der beiden KIs gespielt aber nur 1gewonnen. Dabei sind beide KIs auf höchstes Level gestellt.

Die KIs reizen einfach nicht weit genung ganz selten geht es mal über 24.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Sr4l hat geschrieben:~700KB C Code und Header Files
und darin stecken nach ohcount 18 852 reine Codezeilen und 290 Kommentarzeilen.
Sind da wirklich nur 290 Zeilen Kommentare oder hast du dich vertippt? Wenn nicht, schließt ja schon diese Zahl auf die mangelnde Qualität des Programms...
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ich habs mir jetzt auch mal runtergeladen. Mal n'bisschen spielen.
Mit meinen geschätzten 100000 lag ich dann doch etwas daneben.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

ice2k3 hat geschrieben:
Sr4l hat geschrieben:~700KB C Code und Header Files
und darin stecken nach ohcount 18 852 reine Codezeilen und 290 Kommentarzeilen.
Sind da wirklich nur 290 Zeilen Kommentare oder hast du dich vertippt? Wenn nicht, schließt ja schon diese Zahl auf die mangelnde Qualität des Programms...
Stimmt schon, habe es "per Hand" kontrolliert. Das sind scheinbar nur die Kommentare am Anfang jeder Datei mit der Liezens.
Musste aber feststellen das man ~5k Zeilen Code abziehen muss, die scheinbar nur GIF Bilder enthalten.

Zusätzlich ist das Spiel auf Denglisch gecodet und nur der Name der Funktion gibt Auskunft darüber was sie tut.
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

Sr4l hat geschrieben:Ich habe mir das so vorgestellt:
http://paste.pocoo.org/show/152873/
Also bei mir kommt da

Code: Alles auswählen

SPIELRKARTEN
============
Traceback (most recent call last):
  File "/home/joh/Python-2.6.4/work/skat1.py", line 114, in ?
    print(spiel.spielerkarten(spieler))
  File "/home/joh/Python-2.6.4/work/skat1.py", line 20, in __repr__
    return "{0}({1}, {2}, {3})".format(self.__class__.__name__, self.farbe, self.karte, self.besitzer)
AttributeError: 'str' object has no attribute 'format'
wobei ich

Code: Alles auswählen

class Karte():
zu

Code: Alles auswählen

class Karte(object):
verändern musste, damit das kompiliert, pardon interpretiert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Code: Alles auswählen

return "{0}({1}, {2}, {3})".format(self.__class__.__name__, self.farbe, self.karte, self.besitzer) 
Python 3.1.

für Python2 mach einfach:

Code: Alles auswählen

return "%s(%s, %s, %s)"%(self.__class__.__name__, self.farbe, self.karte, self.besitzer) 
sollte so gehen

Habe auf meinem Windows Rechner jetzt nur noch Python3.
ms4py
User
Beiträge: 1178
Registriert: Montag 19. Januar 2009, 09:37

Mit Python 2.6 geht str.format auch!
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ab Python 2.6 geht str.format auch! ;-)
joh#
User
Beiträge: 139
Registriert: Freitag 6. November 2009, 13:16

BlackJack hat geschrieben:@joh#: Ich kenne die Regeln nicht, aber ich würde mich fragen, ob man das überhaupt auf diese Weise ermitteln würde, und sich nicht vielleicht eher mathematisch Gedanken darüber macht, statt stupide auszuprobieren...
OK, nur genau da hängt es, die Entscheidung des Spielers m Stich ist ja Grundlage für Stich n+1
alles hängt ja vom Zustand (des Blattes) ab.
Antworten