Collab: Entwicklung eines TSB-Puzznic-Klons

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

  • Habe ich mal gemacht. Ist sicher nicht optimal, weil ich die Strukturen aus C im Prinzip nur stumpf nach BASIC übertragen habe, aber geht schon...

    Dein Programm stellt nur die Map dar? Oder kann man da auch irgendwas bewegen? Ich hab's jetzt nicht hingekriegt. Weder mit Cursor-Tasten noch mit Joy2.

    EDIT: Ah. Schon gut. Ich hab's rausgefunden. Man muss Space drücken, damit es losgeht.

    Ich sehe hier einfach keine "Vereinfachung" für den armen Kerl. ;)

    Was soll ich nur tun? :cry

  • Mal abgesehen davon, dass mir so ein, mit einem normalen Compiler kompiliertes, Programm in TSB nichts nützt, funktioniert auch die Spiel-Logik nicht richtig.

    Wenn man Herz 1 um ein Feld nach rechts schiebt, dann löst sich nur Herz 1 und Herz 2 auf.

    Es müssen sich aber die Herzen 1+2+3 auflösen.

    Eigentlich bin ich ganz froh darüber. Ich hatte schon das unangenehme Gefühl, dass mir hier jemand mit der Programmierung zuvor gekommen ist.

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Ich hatte schon das unangenehme Gefühl, dass mir hier jemand mit der Programmierung zuvor gekommen ist.

    Ich bin nach wie vor noch an einer TSB-Lösung dran. :bgdev

    Nur meint im Moment meine komplette Umwelt, ich sollte "Erstmal was anderes tun!" ;(

  • Mal abgesehen davon, dass mir so ein, mit einem normalen Compiler kompiliertes, Programm in TSB nichts nützt, funktioniert auch die Spiel-Logik nicht richtig.

    Wenn man Herz 1 um ein Feld nach rechts schiebt, dann löst sich nur Herz 1 und Herz 2 auf.

    Ja, kann sein. Das ist ja ein Port des C-Programms. Weil ich aber den Levelaufbau nicht ganz richtig portiert zu haben scheine, ist die Situation in dem Level beim C-Programm anders (und deswegen kann ich diese Situation da nicht testen...). Entweder ist das da schon falsch oder ich habe im Port was vergurkt. Aber darum ging es auch gar nicht. Es ging darum, die Array-Geschichte so ganz grob in BASIC abzubilden, um zu schauen, wie das läuft...

    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.

  • ... und jeder Spielzug weniger als 15 Sekunden dauert ...

    Ich kann ja noch paar Pausen einbauen! :D


    Im Ernst: Ich schau einfach mal, was geht. Wegwerfen kann man es ja dann immer noch. :whistling:

    Weißt du noch (ist ja schon paar Tage her), was in deinem Programm die Prozeduren "fallenz" und "fallenq" voneinander unterscheidet?

    Mir würde ja eine Prozedur "faulenzen" gut gefallen. :)

  • Die Array-Geschichte läuft doch auch gut? Dass der initiale Bildaufbau in TSB schneller ist, liegt ja daran, dass dort der MAP-ASM-Helper benutzt wird, während das in der Version aus #278 (der MOSpeed-Port des C-Programms) händisches gePOKE ist. Das ist natürlich ein unfairer Vergleich an der Stelle.

    Aber der Fallen/Auflösen-Krams läuft kompiliert doch okay, wenn auch deutlich langsamer als in der llvm-mos-C-Variante. (übrigens, da kein Full Scan gemacht wird, könnte man das auch für z.B. ein 24x24-Spielfeld benutzen)

    In reinem BASIC ist das natürlich schnarchlahm, ja, aber in unkompiliertem BASIC und speziell TSB mit seinen noch langsameren IFs (nicht übelnehmen bitte) kann man da halt wenig machen.

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

  • Im Ernst: Ich schau einfach mal, was geht. Wegwerfen kann man es ja dann immer noch. :whistling:

    Weißt du noch (ist ja schon paar Tage her), was in deinem Programm die Prozeduren "fallenz" und "fallenq" voneinander unterscheidet?

    Wegwerfen? Niemals. Ich rahme jedes deiner Programme ein und hänge es mir ins Wohnzimmer.

    Fallenz lässt den gezogenen Stein in der Zielspalte runterfallen. Und fallenq lässt die Steine in der Quellspalte herunterfallen, falls nötig.

    Z=Ziel, Q=Quelle.

  • Weil ich aber den Levelaufbau nicht ganz richtig portiert zu haben scheine

    Irgendwas ist noch kaputt, auch wenn ich den Level im C-Programm so baue wie in der BASIC-Version, werden die Steine in der C-Version korrekt aufgelöst. Aber wie Du schon sagtest, das ist hier nicht so recht der Punkt.

    Vielleicht muss man doch mal ran und für Omega und den Rest der unüberschaubar großen BASIC/TSB-Community ein "kleines ASM-Helper-bauen"-Dings basteln.

    Eine Website, in die man Code (C? BASIC? Was anderes?) reinpastet, die das kompiliert und direkt mit konfigurierbarer Startadresse baut? ;)

    Andererseits hätten Snoopy und Omega in der Zeit, die man zum Bauen dieses Tools braucht, schon dreimal ausreichend viel C gelernt, um einfach das ganze Programm darin zu schreiben (wenn man partout direkt auf dem C64 bleiben will: Es gibt Bitte melde dich an, um diesen Link zu sehen.). Was irgendwie viel mehr Sinn macht. Aber ich bin ja schon ruhig. ;)

    In reinem BASIC ist das natürlich schnarchlahm, ja, aber in unkompiliertem BASIC und speziell TSB mit seinen noch langsameren IFs (nicht übelnehmen bitte) kann man da halt wenig machen.

    Ah dazu nochmal: Natürlich bekommt man die reine BASIC/TSB-Variante noch mit den üblichen Tricks schneller (kurze Variablennamen, häufig benutzte Variablen zuerst deklarieren, keine Integer-Variablen benutzen, Code kompaktieren) plus man müsste das Offset-Gefummel optimieren (statt ständig *40/*80 die Offsets über die Schleifen mitziehen und nur +40/+80 machen und so weiter) und eben wieder den MAP-Helper benutzen. Ist halt echt was für Masochisten. :)

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

    Einmal editiert, zuletzt von 1570 (21. Februar 2024 um 15:01)

  • Irgendwas ist noch kaputt, auch wenn ich den Level im C-Programm so baue wie in der BASIC-Version, werden die Steine in der C-Version korrekt aufgelöst. Aber wie Du schon sagtest, das ist hier nicht so recht der Punkt.

    Ja, da war noch was falsch. Jetzt sollte es stimmen...:whistling:

  • EgonOlsen71  1570 Eure Version(en) scheinen jetzt zu funktionieren. Obwohl das Ziehen der Spielsteine sehr umständlich ist. Immer nur ein Feld ziehen zu dürfen, ist nicht sehr komfortabel. Und ganz allgemein gesagt: Einen C-Compiler oder sonstigen Compiler zu benutzen ist ja schön und gut. Aber mein Ziel ist es, eine Version des Spiels mit TSB zu entwickeln. Mit möglichst wenig Maschinensprache im Gepäck. Bisher hat mir keiner der gezeigten Ansätze dabei weitergeholfen.

    Die Sache mit dem Micro-Compiler hätte ich ganz nett gefunden. Wenn der nicht so einen Quark produzieren würde.

  • Die Sache mit dem Micro-Compiler hätte ich ganz nett gefunden.

    Der ist halt genausowenig TSB wie per MOSpeed kompiliertes BASIC oder per llvm-mos kompiliertes C.

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

  • Der ist halt genausowenig TSB wie per MOSpeed kompiliertes BASIC oder per llvm-mos kompiliertes C.

    Das ist wohl wahr. Aber er liefert relativ kleine Maschinenprogramme und die Startadresse ist frei wählbar. Das könnte man in ein TSB-Programm einbinden, wenn man es geschickt anstellt. In meiner TSB-Umsetzung des Spiels brauche ich nur ganz wenig Maschinensprache. Vielleicht in dem Verhältnis TSB-zu-Maschinensprache 98:2.

    Aber wenn in den Micro-Compiler-Programmen noch nicht einmal eine simple AND-Verknüpfung funktioniert, dann sehe ich nicht, wie das gehen soll. Auf gewisse Regeln, wie die boolsche Algebra, muss man sich verlassen können.

  • So eng darf man das nicht sehen.
    Ich würd das so ungefähr machen

    Code
    120 if a>63 and a<97 then c=-1
    125 if b=32 then d=-1
    130 if c and d then magic

    wobei zeile 120 wahrscheinlich auch das AND wieder vor dem größer und kleiner evaluiert.


    also dann

    Code
    120 if a<63 then 140
    122 if a>97 then 14O

    C zu setzen sollte man sich dann ganz sparen können, zeile 125 prüft nur noch b=32.

    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

    Einmal editiert, zuletzt von Goodwell (21. Februar 2024 um 21:11)

  • Aber mein Ziel ist es, eine Version des Spiels mit TSB zu entwickeln. Mit möglichst wenig Maschinensprache im Gepäck. Bisher hat mir keiner der gezeigten Ansätze dabei weitergeholfen.

    Hmm, das sehe ich nicht so. Es wurden hier min. zwei unterschiedliche Ansätze (TSB hin oder her) probiert (Fullscan, Array) und meine Erkenntnis wäre jetzt: Beide sind in reinem BASIC zu langsam. Ich glaube ehrlich gesagt nicht, dass da noch was kommt, das so viel besser ist, dass es performant funktioniert. Weiterhin weißt du jetzt, wie man Speicher in TSB freischaufeln kann, um ggf. Maschinensprachecode abzulegen. Du hast einen Compiler für Mini-BASIC an die Hand bekommen, den man nutzen könnte, um das zu wuppen, wenn du nicht so AND-fixiert wärst...;)

    Das sind doch alles Dinge, die vorher nicht da waren. Also wenn es dir nicht geholfen hat, dann ist das schade. Ich fand es jedenfalls bereichernd.

    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.

  • So eng darf man das nicht sehen.
    Ich würd das so ungefähr machen

    Tatsächlich? Dann würdste dich wundern.

    Sollte ich erwähnen, dass das kompilierte Programm nicht funktioniert?

    Bitte melde dich an, um diesen Anhang zu sehen.

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Sorry Omega

    Hab das nur am Handy getippt.
    Und ich hab den Beitrag noch überarbeitet, entspricht nicht ganz dem Code im Screenshot

    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
  • Das sind doch alles Dinge, die vorher nicht da waren. Also wenn es dir nicht geholfen hat, dann ist das schade. Ich fand es jedenfalls bereichernd.

    Ja, du hast recht. Der Thread war bisher durchaus lehrreich. Das sollte man nicht unterschätzen und ich will auch nicht undankbar erscheinen. Leider bin ich meinem Ziel, ein hochkarätiges Spiel zu entwickeln, das die Massen begeistert und den Hau-den-Lukas durch die Decke schießen lässt, noch nicht wirklich näher gekommen.