Collab: Entwicklung eines TSB-Puzznic-Klons

Es gibt 1.089 Antworten in diesem Thema, welches 110.413 mal aufgerufen wurde. Der letzte Beitrag (1. November 2024 um 23:56) ist von Omega.

  • Sorry Omega

    Hab das nur am Handy getippt.

    Kein Problem. Ich bin für alle Vorschläge offen. Aber ich habe mittlerweile verstanden, wie der Micro-Compiler funktioniert. Man muss alle Permutationen von Möglichkeiten durchprobieren, bis irgendwas funktioniert. Und wenn man das mit jeder Codezeile macht, dann braucht man ungefähr 1000 Jahre für einen Zehnzeiler. ;)

  • Der zweite geht dann in 100 Jahren, der dritte in 10, die Produktivität steigt also exponentiell :biggrin:


    Und selbst wenn dir dieser Thread nicht ans Ziel geholfen hat, dann darfst du dich als der Mensch betrachten, der gleichzeitig die Entwicklung von zig Clones initiiert hat :wink:

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • Und selbst wenn dir dieser Thread nicht ans Ziel geholfen hat...

    Wir wissen ja noch nicht, was dieser Thread noch bringt. Wird Snoopy eine Lösung in reinem TSB hervorbringen? Kommen noch neue Personen ins Spiel, die mit völlig irren Ideen aufwarten? Kann Quantencomputer-Technik hier helfen? Wird der Fischstäbchen-Vorrat so lange reichen? Fragen über Fragen.

    To be continued...

  • Ich fasse mal meine Erfahrung zusammen: In der allerersten Version (Fullscan) von EgonOlsen71 war die Vorgehensweise so, dass ein Stein fiel und wenn er irgendwo aufschlug, wurde getestet, was in seiner Umgebung so los ist. Waren das Steine vom gleichen Typ, die mit einer "Breitseite" miteinander verbandelt waren, wurden sie zuerst markiert, damit alle erfasst werden konnten, und dann entfernt. Danach folgte wieder die Fallphase mit den gleichen Folgen wie eben, bis sich nichts mehr bewegte.

    Erstens, das Fallen: Ist in TSB gelöst.

    Zweitens, das Aufschlagen: Ist in TSB gelöst.

    Drittens, der Scan über alle Felder: Ist gelöst, aber laaangsam.

    Viertens, das Markieren: Ist gelöst, ist Teil des Scanvorgangs, gehört also zum langsamen Teil

    Fünftens, das Löschen der markierten Steine: Ist in TSB gelöst, geht relativ schnell, würde in Assembler aber blitzartig gehen (ist ja auch ein Scan)

    Dieses Verhalten erfolgt in Loop, bis sich nichts mehr rührt.

    Mir scheint, der einzige für eine Portierung nach Assembler relevante Teil ist der langsame Scan ("drittens/viertens"). Und wie wunderbar, er erzeugt schwarze, mit Inhalt versehene Felder, die deshalb leicht erkennbar sind und leicht behandelt werden können ("fünftens").

    Eigentlich reicht (erst einmal) eine Implementation des Scans mit eingebauter Markierung. Das könnte mit einem SYS (oder einem X!-Befehl) erledigt werden. Dann müsste man schauen, ob das Löschen noch zu langsam abläuft und man (in dem Fall) für diesen Part einen zweiten SYS anfertigt.

    Diese Funktion sollte allemal in 1KB, ich denke sogar, in einer Page Platz finden...

    Arndt

    PS: Angehängt ein D64 mit dem Programm aus Post Bitte melde dich an, um diesen Link zu sehen., in dem ich rechts oben die Einzelphasen farblich (und mit einem Wort) gekennzeichnet habe. Wenn meine Beschreibung hier zu wirr gewesen sein sollte, hilft ja vielleicht ein Blick in dieses Programm. Beachten: Es arbeitet besonders langsam, da es ja nicht einen Stein fallen lässt, sondern gleich alle auf einmal! Die weiße Phase ist die Fallphase.

    Dateien

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Vielen Dank. Das ist sehr interessantes Anschauungsmaterial.

    Mir fallen da ein paar Sachen auf:

    1.) Das Programm ignoriert völlig meinen bisher entwickelten TSB-Ansatz.

    2.) Es scheint viel zu langsam zu sein (vielleicht wegen der hohen Anzahl Steine?).

    3.) Ich hab' keine Ahnung wie das funktioniert...

    4.) ...und deshalb ist nicht klar, ob das im tatsächlichen Spiel verwendet werden kann.

    Vielleicht könnte ich damit etwas anfangen, wenn das ganze Drumherum entfernt wird. Und dann brauche ich:

    1.) eine Prozedur, die die Steine fallen lässt

    2.) eine Prozedur, die die Paare auflöst

    Von mir aus auch beides in einer Prozedur. Dann könnte man mal checken, wie schnell das Ganze in der Praxis wirklich ist.

    Derweil quäle ich mich noch ein bisschen mit dem Micro-Compiler rum. Irgendwie hat er eine krankhafte Faszination in mir geweckt.

  • Derweil quäle ich mich noch ein bisschen mit dem Micro-Compiler rum. Irgendwie hat er eine krankhafte Faszination in mir geweckt.

    Hab grad mit dem Micro-Compiler gesprochen. Er sagt das Selbe über dich :biggrin:

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • Ich hab nun in den Code von Seite 10 (Bitte melde dich an, um diesen Link zu sehen.) mal meine Vorschläge eingearbeitet.

    Meiner Meinung nach funktioniert dieses Programm korrekt.

    Im Anhang die microcompilierte Version, die aus meiner Sicht auch richtig läuft.

    Ich hab das GOSUB entfernt und das Teile verschieben direkt in die Schleife reingezogen.

    Das ist aber wahrscheinlich garnicht nötig.

    Die Berechnung der POKE-Adressen funktioniert auch so wie im Code.

    Die eigentlich wichtige Änderung ist, dass das AND komplett verschwunden ist.

    Wahrscheinlich ist das auch für unkompiliertes Basic eine schnellere Implementierung als die mit AND.

    Dateien

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • 1.) Das Programm ignoriert völlig meinen bisher entwickelten TSB-Ansatz

    Ist ja auch "nur" ein Port der Machbarkeitsstudie von EgonOlsen71 . Aber mit der farblichen Beschreibung dessen, was gerade passiert (um nachvollziehen zu können, wie das Ganze funktionieren soll).

    2.) Es scheint viel zu langsam zu sein (vielleicht wegen der hohen Anzahl Steine?).

    Genau. Ein einzelner Stein würde einfach unten sein, du müsstest eine Animation einbauen, damit man was davon hat. Die geht mit TSB (und selbst mit Basic V2) gut, das hast du ja in deinem eigenen Beispiel schon gezeigt (Post #186). In TSB würde ich das mit MAP (Stein erscheint) und MOVE (Stein wird bewegt) machen.

    Arndt

    Edit: Ein TSB.Beispiel (aus dem PRG, das ich in Post #304 angehängt hatte, .SINGLE ist der Teil mit der Animation):

    GoDot C64 Image Processing
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

    Einmal editiert, zuletzt von GoDot (22. Februar 2024 um 09:48)

  • Ich habe meine bisherigen Erkenntnisse zum Micro-Compiler mal aufgeschrieben. Ich nenne sie "Die neun Gebote" und habe sie soeben in Stein gemeißelt.

    1. Das Basic-Programm muss mit END enden, damit nach dem SYS wieder zum Basic zurückgesprungen wird.
    2. FOR...NEXT und IF...THEN dürfen nicht verschachtelt werden.
    3. Es dürfen in Berechnungen keine Klammern verwendet werden.
    4. Berechnungen werden anders aufgelöst (sollte man einfach halten).
    5. Man darf PEEK nicht als zweites Argument bei POKE verwenden.
    6. Man darf bei den Parametern von POKE und PEEK möglicherweise keine Berechnungen mit Variablen verwenden. Falls das nicht funktioniert, muss man die Ergbnisse vorher in andere Variablen ablegen.
    7. Wenn man in einem Ausdruck einen- oder mehrere logische Operatoren wie AND und OR hat, kann es zu Fehlern kommen. In diesem Fall sollte man versuchen, diese zu vereinfachen. Zum Beispiel indem man sie durch GOTO-Konstrukte nachbildet.
    8. Es ist besser GOTO statt GOSUB zu benutzen.
    9. Was man genau verwenden darf und was nicht, ist zum Teil nur durch Ausprobieren herauszufinden.
  • Ich habe meine bisherigen Erkenntnisse zum Micro-Compiler mal aufgeschrieben

    3 und 4 lassen sich wahrscheinlich durch "Ausdrücke werden strikt von links nach rechts abgearbeitet. Operatorrangfolge (Punkt vor Strich) wird ebenso ignoriert wie Klammersetzung."

    8: warum ist GOTO besser als GOSUB?

    9: Und durch Lesen des PDFs, dass EgonOlsen71 im GitHub Repo zur Verfügung stellt und durch Anschauen des Videos, das ich hier schon mal gepostet habe.

    und habe sie soeben in Stein gemeißelt.

    Wo kann ich den bestellen? :smile:

    YouTube Kanäle über Basic, den C128 und den VDC-Chip
    Bitte melde dich an, um diesen Link zu sehen. --- Bitte melde dich an, um diesen Link zu sehen.
    Commodore 8-Bit Projekte
    auf Bitte melde dich an, um diesen Link zu sehen.
    Bitte melde dich an, um diesen Link zu sehen. zu Commodore 8-bit Hardware
    auf printables.com
  • Goodwell: Warum goto besser ist als gosub? Keine Ahnung. Ich habe ein Programm partout nicht zum Laufen gebracht. Dann habe ich gosub...return durch mehrere goto ersetzt. Und schwupps. Da lief's. Das ist eben die Micro-Compiler Logik. An der haben die alten Azteken schon vor tausenden von Jahren geforscht. Und bis heute gibt es keine genauen Erklärungen.

  • Die wird in eine C64´er Bundeslade sicher Aufbewahrt .

    Denn das ist sehr Kostbar.

  • Goodwell: Warum goto besser ist als gosub? Keine Ahnung. Ich habe ein Programm partout nicht zum Laufen gebracht. Dann habe ich gosub...return durch mehrere goto ersetzt. Und schwupps. Da lief's. Das ist eben die Micro-Compiler Logik.

    Nee, das kann echt nicht sein. Ein GOSUB wird zu einem JSR, ein RETURN zu einem RTS. Einfacher umsetzen lässt sich das nicht. Das geht nur dann in die Hose, wenn du GOSUBs ohne RETURN anhäufst. Dann läuft der Prozessorstack über und das kommt nicht so gut.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Nee, das kann echt nicht sein. Ein GOSUB wird zu einem JSR, ein RETURN zu einem RTS.

    Ja, das mit dem JSR und RTS klingt plausibel. Aber in meinem Programm kam es mir dennoch so vor. Nach langer Fehlersuche habe ich einfach mal spaßeshalber gosub...return durch zwei gotos ersetzt. Und dann funktionierte es.

    Hmm. Vielleicht habe ich noch etwas anderes verändert? Bin nicht sicher. Ist manchmal schwierig, die Fehler genau einzukreisen. Ich habe jetzt auch keine Beweise mehr vorliegen, die vor Gericht standhalten.

  • Das geht nur dann in die Hose, wenn du GOSUBs ohne RETURN anhäufst. Dann läuft der Prozessorstack über und das kommt nicht so gut.

    Bitte melde dich an, um diesen Anhang zu sehen.

    :bgdev

    Jau, läuft bis P=113...dann:emojiSmiley-95:

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

    Bitte melde dich an, um diesen Link zu sehen.

  • Ich glaube, ich habe dem Micro-Compiler nach hartem Kampf endlich das abgerungen, was ich wollte.

    Der eine Helper zum Fallen ist 525 Bytes groß. Und der andere zum Auflösen ist 906 Bytes groß.

    Ich denke mal die 906 Bytes lade ich nach $c000, was sowieso brachliegendes Land ist. Und den kleineren mit 525 Bytes schiebe ich den entsprechend vekleinerten Basic-Speicher.

    Nun ist mir aufgefallen, wenn ich so ein Teil mit load"blubs",8,8 reinlade und dann versuche ein BASIC-Programm einzugeben, dann sieht es so aus:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Was muss man denn hier jetzt noch wissen? ?(

  • Nun ist mir aufgefallen, wenn ich so ein Teil mit load"blubs",8,8 reinlade und dann versuche ein BASIC-Programm einzugeben, dann sieht es so aus:

    Bitte melde dich an, um diesen Anhang zu sehen.

    Was muss man denn hier jetzt noch wissen? ?(

    NEW, weil Basic davon ausgeht, dass Du den Speicher bis zur Ladeendadresse in Beschlag hast.

    ────────────────────────────────────────────────────────────
    Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.
    ────────────────────────────────────────────────────────────