Hallo Besucher, der Thread wurde 1,2k mal aufgerufen und enthält 7 Antworten

letzter Beitrag von Plus4_fan am

Enter im Programm

  • Hallo,


    vielleicht kann mir einer von euch helfen, danke schonmal im vorraus.
    Ist es möglich im Programm selbst ein Enter abzusetzen "Basic 3.5"?


    Kurze Beschreibung, ich wollte mir das Programmieren etwas vereinfachen und habe deshalb ein Programm geschrieben, welches mir das erstellen von Grafiken erleichtern soll. Das Programm spuckt fertige "Draw"-Zeilen aus mit Zeilennummer (Zeile1030) es wäre nur schön wenn ich nach der autogenerierten Zeile ein Enter absetzen könnte, damit diese gleich Bestandteil des Programms wird.


    Wer es mal testen möchte (es ist weit von einer Fertigstellung entfernt) einfach starten der Pfeil wird mit den Cursortasten gesteuert und nachdem Space gedrückt wurde, wird nach jedem weiteren Space eine Linie hinzugefügt. Zeile 1990 ist ein Beispiel eines bereits erstellen Codes, mit Run1990 kann man sich das Bild ansehen.


    Hier mal der Quellcode:


    5 X=19:Y=19:A=0:B=0:C=0:D=0:O=0:U=1990
    10 GRAPHIC2,1
    51 DRAW,13,13 TO15,15
    52 DRAW,10,10 TO10,15
    53 DRAW,10,10 TO15,10
    54 DRAW,10,15TO15,10
    59 SSHAPEC$,9,9,16,16
    61 DRAW0,13,13TO15,15
    62 DRAW0,10,10 TO10,15
    63 DRAW0,10,10 TO15,10
    64 DRAW0,10,15TO15,10
    70 GSHAPEC$,X ,Y ,0
    80 GETA$
    85 IF A$=CHR$(157)THENX=X-1:GSHAPEC$,X,Y,0
    86 IF A$=CHR$( 29)THENX=X+1:GSHAPEC$,X,Y,0
    87 IF A$=CHR$(145)THENY=Y-1:GSHAPEC$,X,Y,0
    88 IF A$=CHR$( 17)THENY=Y+1:GSHAPEC$,X,Y,0
    90 IF A$=CHR$(32)ANDO=1THENC=X:D=Y:DRAW,A,B TO C,D:O=0:I$=STR$(C):J$=STR$(D):GOSUB1000
    92 IF A$=CHR$( 32)ANDO=0THENA=X:B=Y:O=1:H$=STR$(A):G$=STR$(B)
    100 GOTO 80
    1000 REM DRAW ZEILE
    1020 U=U+10:U$=STR$(U)
    1030 R$=U$+" DRAW,"+H$+","+G$+" TO "+I$+","+J$
    1050 PRINT R$
    1060 RETURN
    1990 GRAPHIC1,1
    2000 DRAW, 140, 35 TO 116, 99
    2010 DRAW, 116, 99 TO 174, 99
    2020 DRAW, 174, 99 TO 195, 81
    2030 DRAW, 195, 81 TO 141, 33
    2040 DRAW, 141, 33 TO 171, 97

  • Ein laufendes Programm soll sich selbst per Laufzeit verlängern: das wird wohl nicht klappen.


    Ich verwende kein Basic und bin auch entsprechend ungeübt. Ich würde die einzelnen Werte für Draw und einen Schleifenzähler in den Speicher schreiben. Nachher holst Du es per PEEK wieder heraus und lässt es anzeigen.

  • Das Programm zeigt jetzt schon die Drawzeilen an, ich verlasse dann einfach aus dem Grafikmodus, gehe in die generierten Zeilen und drücke jeweils Enter, allerdings geht das bis max. 15 - 17 Zeilen. Ja klar im Notfall mache ich das eben so (geht immer noch schneller als konventionell), ich hatte eben die Hoffnung das man mit ein paar Tricks das automatisieren könnte ;) .


    Deine Idee klingt gut, hab nur keinen Schimmer wie das mache cbmhardware.

  • Das Programm zeigt jetzt schon die Drawzeilen an, ich verlasse dann einfach aus dem Grafikmodus, gehe in die generierten Zeilen und drücke jeweils Enter, allerdings geht das bis max. 15 - 17 Zeilen.

    Es gibt den Direkt- und den Programm-Modus. Im Programm-Modus hat man keinen Direkt-Modus und daher kann das kaum klappen.




    Deine Idee klingt gut, hab nur keinen Schimmer wie das mache cbmhardware.


    Im Prinzip ist das nur eine Datentabelle. Der Tape-Buffer bietet z.B. 192 freie Bytes. Da kannst Du ab dezimal 819 einzelne Bytes speichern. Du brauchst dann vier Variablen zum Aufnehmen der einzelnen Draw-Parameter und schreibst diese mit Poke linear in den Speicher. Bei jedem Space-Drücken erhöhst Du zusätzlich einen Zähler, damit Du am Ende feststellen kannst, wie oft 4 Bytes in den Speicher geschrieben wurden.
    Nachher holst Du diese 4 Byte-Blöcke so oft der Zähler erhöht wurde ab 819 wieder aus dem Speicher und bestückst Draw damit.




    In Assembler könnte ich das so fallen lassen. Basic ist für mich eine Qual. ;)

  • Hat der C16/Plus4 keinen Tastaturpuffer den man wie beim C64 manipulieren kann?

    This. Die Anzahl der Zeichen im Puffer auf Maximum POKEn, dann den Puffer mit 13 (Carriage Return) vollPOKEn, dann werden nach END die entsprechenden Tastendrücke simuliert.


    EDIT: Im Augenblick löscht der Pfeil das Bild. Das kannst Du verhindern, indem Du bei GSHAPE den Modus 4 (XOR) benutzt. Dann muss man beim Bewegen aber zweimal GSHAPE ausführen: Einmal zum Löschen der alten Position, einmal zum Anzeigen der neuen.

  • Es gibt den Direkt- und den Programm-Modus. Im Programm-Modus hat man keinen Direkt-Modus und daher kann das kaum klappen.

    Ich hätte mich besser ausdrücken sollen, ich breche Programm natürlich ab, wechsle in den Textmodus und bestätige die erzeugten Zeilen mit Enter (also nicht im Programm selbst) und das klappt.

  • EDIT: Im Augenblick löscht der Pfeil das Bild. Das kannst Du verhindern, indem Du bei GSHAPE den Modus 4 (XOR) benutzt. Dann muss man beim Bewegen aber zweimal GSHAPE ausführen: Einmal zum Löschen der alten Position, einmal zum Anzeigen der neuen.


    Ja ich weiß, hatte ich nur noch nicht umgesetzt, trotzdem danke :) .