Jazzy -- Schachvarianten online spielen

    • Offizieller Beitrag

    Hallo,

    Die Anregungen aus dem gestrigen Test mit Schnuffel, L3viathan, PenGuin und RapIt habe ich aufgenommen, einhellig wollten sie den Chat auffälliger platziert haben.
    Daher gibt es jetzt zwei Neuerungen:

    • Sound bei Ankunft einer Chatnachricht
    • box-basiertes Redesign, das sowohl auf Desktop- als auch Mobilgeräten gut aussehen sollte und den vorhandenen horizontalen Platz im Rahmen dessen, was in sauberem CSS möglich ist, ausnutzt (siehe Screenshots).

    Bilder:
    autoit.de/wcf/attachment/14268/autoit.de/wcf/attachment/14269/autoit.de/wcf/attachment/14270/

    Die Bilder zeigen auch schön die früher angesprochenen verschiedenen Stile, die per Klick und ohne Neuladen der Seite wechselbar sind -- getrennt für das Gesamtdesign und das Brett.
    Außerdem gibt es damit endlich mal wieder Screenshots ohne Fehlerbericht :D.

    Viel Spaß beim Spielen!
    Johannes

    • Offizieller Beitrag

    Im Repository liegt eine Version, die eine ernsthafte Teilmenge von Tandemschach (Bughouse) beherrscht. Da -- wie RapIt immer gerne anmerkt -- eine Uhr wichtig für diese Variante ist, werde ich als nächstes (in vermutlich ~ 4 Monaten) versuchen, den Server zusätzlich auf das Websocket-Protokoll anzusetzen, sodass verzögerungsfreies Spiel möglich wird. Vielleicht hat jemand einen Tipp oder in der verbleibenden Zeit entwickelt sich eine schöne Python-Bibliothek für den aktuellen (!) Protokollstandard. Ich brauche im Prinzip nur einen Socket, auf dem ich dann Nachrichten entgegennehmen und Antworten absetzen kann…

    Johannes

  • Hey!
    nach einiger Zeit hab ich gestern mal wieder etwas rumgetestet...
    Erstmal muss ich bemerken, dass sich echt viel getan hat! :thumbup: :thumbup: Tandem lässt sich (bis auf die Uhr) super spielen, es gibt fast nie mehr Verbindungsfehler und alles läuft einwandfrei flüssig! Auch das Design is cool und diverse Buttons haben jetzt auch ne Funktion. :D Außerdem ist die Fensteranordnung super gelungen, sodass man auch sehr gut mit mobilen Geräten spielen kann, was auch einwandfrei und flüssig funktioniert!

    Ich hab noch einige Bugs bemerkt, was aber hauptsächlich Spielfehler und keine Programmierfehler sind: (Diesmal aber keine schlimmen Screenshots peethebee ;) )

    • Bei Fischer Chess (960) sind falsche Rochaderegeln implementiert. Entweder sollten die richtig sein (sind aber ziemlich komplitzert..., oder ganz aus, aber ich hatte nach dem rochieren plötzlich keinen Turm mehr :D )
    • Bei Pawn Chess ist nur ein toter Link :/ (Hattest du das nicht schon!?)
    • Bei legan Chess funktioniert die Umwandlung nicht, was zuweilen zu sehr komischen Ergebnissen führt...Man darf ja eigendlich auf e1-h1-h4 umwandlen...
    • Bei Extinction Chess darf der König eigentlich aus dem Schach rochieren, weil er wie eine normale Figur zählt und man darf ihn im Schach stehen lassen, was für das Spiel auch sehr wichtig ist!
    • Die Umwandlung ist dort glaub ich auch ausgeschaltet, was aber nicht nötig ist, allerdings muss man auch in einen König umwandeln dürfen (macht man zwar eh nie, aber... ;) )
    • Bei Anti-Chess geht die immer nach dem 4 Zug kaputt.! (Klingt komisch, is aber so :d Ich habs 4 mal getestet...) (Keiner kann mehr ziehen,der Zug wird nicht ausgeführt und danach hängt es. Wenn man nochmal zieht kommt 'Not your turn' und Refresh bringt auch nichts.)
    Spoiler anzeigen

    ----------------------------------------
    Exception happened during processing of request from ('127.0.0.1', 39118)
    Traceback (most recent call last):
    File "/usr/lib/python3.2/socketserver.py", line 284, in _handle_request_noblock
    self.process_request(request, client_address)
    File "/usr/lib/python3.2/socketserver.py", line 310, in process_request
    self.finish_request(request, client_address)
    File "/usr/lib/python3.2/socketserver.py", line 323, in finish_request
    self.RequestHandlerClass(request, client_address, self)
    File "/usr/lib/python3.2/socketserver.py", line 638, in __init__
    self.handle()
    File "/usr/lib/python3.2/http/server.py", line 399, in handle
    self.handle_one_request()
    File "/usr/lib/python3.2/http/server.py", line 387, in handle_one_request
    method()
    File "JazzyServer.py", line 259, in do_GET
    moves = game.move(postedMove, targetBoard)
    File "/home/raphael/daten/Dokumente/Autoit/JazzChess7/jazzer-Jazzy-ec31fda/src/jazzy/logic/ClassicGame.py", line 300, in move
    self.parsePossibleMoves()
    File "/home/raphael/daten/Dokumente/Autoit/JazzChess7/jazzer-Jazzy-ec31fda/src/jazzy/logic/ClassicGame.py", line 547, in parsePossibleMoves
    moveSet = self.getPossibleMoves(self.board, checkTest=self.CHECK_FOR_CHECK)
    File "/home/raphael/daten/Dokumente/Autoit/JazzChess7/jazzer-Jazzy-ec31fda/src/jazzy/logic/ClassicGame.py", line 576, in getPossibleMoves
    moveSet = self.filterMovesByRules(moveSet, board, player, noCastlingMoves)
    File "/home/raphael/daten/Dokumente/Autoit/JazzChess7/jazzer-Jazzy-ec31fda/src/jazzy/logic/DifferentRulesGames.py", line 270, in filterMovesByRules
    if not(board.fields[move.toField] is None):
    TypeError: list indices must be integers, not NoneType
    ----------------------------------------


    • Ich geh mal stark davon aus, das man beim Antichess auch nicht durchs Schach rochieren darf und nicht in nen König umwandeln darf...(Konnt ich aber nicht testen, weil ich nur 4 Züge machen darf...:D )
    • Einen hatte ich noch aber den hab ich gerade vergessen ;)


    Das sind zwar alles eher unwichtige Fehler, aber beim Spielen fallen sie halt auf :D
    Hab aber noch lange nicht alles getestet, bei den tausend Varianten... :rofl: Wenn ich mal wieder was Zeit und Lust hab, kann ich gerne noch gucken.


    Diesmal stattdessen noch 2 Screenshots, beim Crazy House über Pc + Mobilgerät:
    [Blockierte Grafik: http://dl.dropbox.com/u/24291162/Jazzy%20-%20Chromium_003.png] [Blockierte Grafik: http://dl.dropbox.com/u/24291162/JazzyMobile.PNG]


    Was übrigens noch cool wäre, ist eine Funktion um beim Tandem eine Nachricht nur an seinen Teampartner zu senden und natürlich ne Uhr. (Auch wenn die noch was dauert...)
    Wenn die da ist, müssen wir hier unbedingt mal ein Tandemtunier veranstalten! :party: :party:
    Viele Grüße,
    RapIt

    • Offizieller Beitrag

    Hi RapIt,

    Vielen Dank für den mal wieder sehr detaillierten Test und -bericht! :)
    Ganz kurze Kommentare nur: Bei den Regeln hast du wohl durchgängig recht. Pawn Chess war glaube ich nie ausprogrammiert, weil es noch keinen GameOverHandler für "Umwandlungsfeld erreicht" gibt.

    Ansonsten nehme ich die Regelbugs als Todo-Liste zum Aufwärmen, wenn ich das Projekt wieder aufnehme (laut aktuellem Plan am 17.02.2012) :D.

    Solange viel Spaß und: Es ist OpenSource! Feel free to learn Python and fix it :D

    Happy Coding!
    Johannes

    p.s. heute meine DWZ verteidigt…

    • Offizieller Beitrag

    Es gibt gute Neuigkeiten.
    Ich habe endlich wieder ein paar Tage entbehren können, um das Projekt voranzutreiben. Das Ergebnis ist, denke ich, durchaus respektabel, daher hier auch noch mal eine kleine Beschreibung der Fortschritte, abseits des Commit-Logs.

    • Canvas
      Für die Darstellung des Brettes waren bisher eine ganze Menge DIV-Tags nötig (je eines für das Feld und jede Figur). Dazu kam reichlich jQuery-Code für die Animationen, der aber nicht richtig stabil lief und gerne mal für komische Bugs gesorgt hat. In der neuen Version wird das Brett mit Canvas-Technologie gerendert: Es gibt je eine Ebene für die Felder (Hintergrund), hervorgehobene Felder (z.B. beim Ziehen oder der letzte Zug), die Figuren und diejenige Figur, die gerade gezogen wird. Durch geschickte Nutzung der Layer wird die Zahl der Repaints minimiert und die Performance ist sehr angenehm. Wie vorher auch wird sowohl Drag-and-Drop- als auch Klick-Semantik (z.B. für Mobilgeräte) unterstützt. Canvas ermöglicht jetzt auch das Resizen von Bildern (die Figuren), was wiederum auch das gesamte Brett größenveränderbar macht. Es passt sich jetzt automatisch der Größe des umgebenden DIVs an, was mit CSS meines Wissens nach nicht browserübergreifend möglich war. Alles in allem also ein robusteres, flexibleres und performantes neues Brett :).
    • Websockets
      Die noch wichtigere Neuerung ist die Echtzeitfähigkeit des Codes. Züge werden jetzt ohne Zeitverzögerung an die Mitspieler übertragen. Dadurch wird die Grundlage für zeitlimitierte Spiele geschaffen und das Nutzererlebnis dramatisch verbessert. Technisch lautet die Lösung kurz SocketIO. Etwas länger erklärt braucht Jazzy jetzt deutlich mehr Installationsvorbereitung, weil es auf mehr externer Software aufsetzt (die übrigens den Rückschritt von Python3 auf Python 2.6/2.7 erfordert): Als Server fungiert jetzt Tornado, auf den mit TornadIO2 ein weiteres Tool gesetzt ist, das SocketIO (und damit auch aktuelle Websockets) unterstützt.

    Aktuelles Bild
    autoit.de/wcf/attachment/15246/

    Nächste Aufgaben
    Pockets wiederherstellen, Zeitnahme einbauen, ...

    Wann es dazu kommt, ist leider wie so oft unklar ;).

    Viel Spaß beim Testen!
    Johannes

    • Offizieller Beitrag

    Es gibt rudimentären Uhr-Support, siehe https://github.com/jazzer/Jazzy/c…0207586eda7878e.

    Allerdings ist das noch an vielen Ecken deutlich unrund. Mal schauen, wann ich dazu komme, das sauber auszubügeln.

    autoit.de/wcf/attachment/15259/

    • Offizieller Beitrag

    Sooooo, nachdem morgen endgültig wieder Uni-Time ist, hier das vorerst wieder mal letzte Update.

    Die Uhren sollten jetzt (zumindest auf einem Brett, mehr habe ich nicht getestet) ganz ordentlich funktionieren, dank folgender 35 Commits in der letzten Woche:

    (generiert mit git shortlog --since="1 week ago")

    Freue mich, wenn es jemand testet und berichtet. Interessant wären für mich vor allem Tests mit Internet Explorer (<7 ist für mich irrelevant, alle anderen interessieren mich ein wenig), älteren Browsern (Firefox, Opera) und Mobilgeräten.

    Wie lange die Pause diesmal dauern wird, weiß ich nicht…

    Todo (bei GitHub entsprechend aktualisiert):

    • Canvas-Arrays (Umwandlung, Pockets, Geschlagene)
    • Statusverwaltung ändern, der Server muss alles parat haben und auf ein Format wie "getsit-c0-m0-h0" antworten (IDs für Chat, Server-Nachrichten, Zuggeschichte)
    • Einstellungen im Browser ermöglichen
    • Pre-Moves (siehe unten)

    Happy Playing!
    Johannes

    • Offizieller Beitrag

    (aktueller Commit)

    Tandemschach ist auf einem ziemlich guten Weg:

    autoit.de/wcf/attachment/15305/

    Außerdem sieht man noch die neue Premove-Unterstützung (in Braun markiert).
    Uhren funktionieren (ohne Änderung :)) schon sehr gut auf beiden Brettern.

    Was im Wesentlichen noch fehlt, sind die Pockets.

    Johannes