Posts by Omega

    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.

    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.

    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

    Ich würde mich ja gerne drauf einlassen. Aber wenn noch nicht einmal ein einfacher logischer Ausdruck wie "C=1 AND B=32" richtig übersetzt wird. Was soll man da machen? Ich wüsste nicht, wie man das noch weiter aufteilen soll.


    In meinem Beispiel:

    C=1 ist FALSE.

    B=32 ist TRUE.

    FALSE AND TRUE ist, nach meiner Kalkulation, FALSE.


    Es ist zum Verzweifeln.

    EgonOlsen71: Ich habe nochmal mit dem Micro-Compiler experimentiert. Wenn ich diesen Programmcode kompiliere, dann gibt mir das Programm "hallo" aus.

    Irgendwie habe ich den Eindruck, dass man sich bei dem Compiler auf rein gar nichts verlassen kann. Hast du eine Idee, warum diese simple Logik nicht funktioniert?

    Der Heap ist Teil des Basic-Speichers (der besteht aus: Programm, Variablenspeicher, Array-Speicher und eben Heap).

    Es wurde bisher immer davon gesprochen, dass der Heap eingeschränkt wird. Diese Ausdrucksweise finde ich verwirrend und falsch. Ich würde es eher so ausdrücken, dass der Basic-Speicher eingeschränkt wird. Und der Basic-Interpreter nimmt sich dann soviel Heap wie eben noch vom Basic-Speicher-Kuchen da ist.

    Und dann habe ich noch eine Frage dazu: Kann man diesen Effekt auch wieder rückgängig machen?


    Nehmen wir an, ich möchte ein anderes Programm nachladen, das wieder den vollen Basic-Speicher zur Verfügung haben soll.

    Reicht es dann wenn ich d!poke 55,32768:clr benutze? Oder kracht's dann im System?

    Ich habe da noch einmal eine Frage zu der Heap-Thematik:

    Wenn ich mit d!poke 55,30270:clr den String-Heap einschränke, dann steht mir der Bereich von 30720-32768 ($7800-$8000) für lustige Sachen zur Verfügung.

    Ich habe das mal in TSB ausprobiert.


    Vor dem poke habe ich 30717 Bytes frei. Nach dem poke habe ich in Basic/TSB nur noch 28219 Bytes frei.

    Wie kommt das? Wenn ich von den ursprünglichen 30717 Bytes 2 KBytes abziehe (-2048 Bytes) dann müsste ich noch 28669 Bytes frei haben.


    Und überhaupt: Mit diesem Poke schränkt man in erster Linie den verfügbaren Basic-Speicher ein. Und nicht den Heap. Oder?


    PS.: Ich werde niemals Kibibyte sagen. Auch nicht unter Folter.

    Wo sind die guten alten Zeiten hin, in denen man von Omega noch echte 100%ige Öko BASIC-Ware bekommen hat? ;(

    Eigentlich hat es die noch nie gegeben. Selbst in meinem Sprite-Editor ist eine kleine Maschinenroutine von petrus (Gott hab ihn selig) drin.


    EDIT: Und wenn man jetzt so einen Micro-Compiler wie den von EgonOlsen71 benutzt, dann kann man zumindest mit Fug und Recht behaupten, dass alles in Basic geschrieben wurde.

    Dann ist es kein reines TSB-Programm mehr. Dann ist es nur noch ein Starter fürs Maschinencodeprogramm! :cry:

    Das sehe ich nicht so. Das Fallen und Auflösen sind eigentlich sehr simple Algorhitmen wenn man systematisch jedes Feld prüft. Der Teil des Programms, der in TSB geschrieben ist und die Spielzüge ermöglicht, ist größer und komplexer.

    Aber warum wollt ihr das Fallen unbedingt in Assembler? Das ist doch so bereits schnell genug? Nur der Plopp-Check macht doch das Problem, oder was übersehe ich da?

    Das Fallen, das bisher in meinem TSB-Programm drin ist, betrifft nur die Startspalte und die Zielspalte. Nach dem Auflösen von Steinen fallen aber noch mehr Steine, auch aufgrund möglicher Kettenreaktionen.

    Lösen sich 3 Steine nur in einer Reihe auf oder auch im rechten Winkel?

    Sie lösen sich auch im rechten Winkel auf. Es kann auch sein, dass sich vier Steine auf einmal auflösen. Ich habe dazu mal eine technische Zeichnung angefertigt.

    Grundsätzlich kann man sagen: Wenn sich gleiche Spielsteine horizontal oder vertikal berühren, dann lösen sie sich auf. Diagonal zählt nicht. Glasblöcke lösen sich nie auf.

    Sind mehr als 3 Steine eines Symbols auf dem Feld?

    Das kann absolut sein und ist auch wahrscheinlich.

    1570: Deine Lösung scheint mir derzeit am besten durchdacht. Könntest du das Fallen und Auflösen der Teile mal auskoppeln, damit ich es per SYS in das TSB-Programm einbauen kann? Am besten wäre es im Bereich von $c000-$c3f7. In der Zwischenzeit ruhe ich mich ein bisschen aus. Das Spieleentwickeln ist doch anstrengender als ich dachte. :zzz:

    Ich habe noch weiter nachgedacht: Wenn ich stattdessen d!poke 55,31744:clr nehme. Dann habe ich den Bereich von 31744-32768 zur Verfügung. Also die Hälfte (=1024 Bytes). So könnte man ja den Heap gerade so viel verkleinern, wie man es eben braucht. Unglaublich! Ob da schon mal jemand drauf gekommen ist? :P

    Also ich habe mir den Post von EgonOlsen71 durchgelesen und nochmal eingehend nachgedacht.

    Wenn ich am Anfang von meinem TSB-Programm d!poke 55,30720:clr eingebe, dann stehen mir folgende größere Bereiche für MS zur Verfügung:

    Code
    1. 30720-32768 ($7000-$8000) = 2048 Bytes
    2. 49152-50167 ($c000-$c3f7) = 1015 Bytes

    Und wenn ich den Heap um 2 KB verkleinere, dann macht das nicht viel aus?

    Habe ich das jetzt richtig verstanden?

    Die Zielgruppe ist Omega ... So doof wie er manchmal tut, ist er zum Glück gar nicht...

    Stimmt nicht. Ich bin viel doofer. Juhuuu! Aus dem Weg! :freude

    Ich hab für Deine schwachen Augen nochmal genau Dein Szenario aus #150 unten angehängt. Schaust Du genau hin, siehst Du, dass sich die beiden "RSTU"-Ringe obendrauf aufgelöst haben. Die "ABCD"s sind Glasblöcke und lösen sich nicht auf (siehe #1).

    Oh, entschuldige. Du hast recht. Meine neue Brille ist schuld. :emojiSmiley-102:

    Ja stimmt, auf Godot bezog ich mich auch nicht. Ich hatte den Ton anderer Texte und Konversationen zum Thema im Ohr...

    Die Garbage-Collection kommt!!! Flieht alle in den Schutzbunker. Waaaaah! :schreck!:

    1570: Bei deiner Variante lösen sich die Teile nicht auf. Es ging hier aber auch nicht um das Erstellen eines Puzznic-Klons auf jede erdenkliche Weise. Sondern in Basic. Oder genauer gesagt mit TSB. Wenn MS verwendet wird, dann darf es nur <1KB sein. (Von $c000-$c3f7). Oder man benutzt den Heap als Ablageort. Das weiß aber nur GoDot wie das geht. Und er verrät es keinem. :P

    Endurion: Ich seh nur, dass zwei Teile runterfallen. Ob da jetzt die komplette Logik für einen Puzznic-Klon drin ist, weiß ich nicht.

    Dem Link auf meine VDCBasic-Seite folgen und lesen! =O

    Hast du das auch in einfacher? Was genau muss ich machen, wenn ich ein 1,5KB großes MS-Programm in den Heap laden will?


    Und dann stelle ich mir noch die Frage: Wenn man die Größe des Heaps reduziert. Ist es dann nicht so, dass Mr. Garbage-Collection alle 30 Sekunden zu Besuch kommt? Man muss ja auch bedenken, dass ich trotz der eingebundenen MS-Routinen noch ein normales TSB-Programm ablaufen lassen möchte.