Hallo Besucher, der Thread wurde 19k mal aufgerufen und enthält 103 Antworten

letzter Beitrag von dr.nolle am

BASIC-Programme - "wirbleibenzuhause"

  • Für alle, die nicht unbedingt an einem Wettbewerb teilnehmen wollen, sondern in diesen Zeiten "Zuhause" einfach "nur mal so" was in BASIC programmiert haben, ist dieser Thread gedacht.


    Einfach die BASIC-Programme hier einstellen und mehr nicht. ;)


    -------------------------------------------------------


    ich mache mal den Anfang mit einem BASIC-Zehnzeiler, der veranschaulichen soll, wie schnell exponentielles Wachstum ist.


    Es wird von einer infizierten Person ausgegangen.


    Gefragt wird nach dem Verbreitungsfaktor.


    Dieser bedeutet hier im Programm: 2 bedeutet, dass jeder Infizierte jeden Tag 2 neue Personen infiziert. Und diese am nächsten Tag wiederum jeder 2 usw. Es sind auch nicht ganze Zahlen wie z.B 1.5 oder 0.5 möglich.


    Angezeigt wird das Wachstum an Infizierten innerhalb 21 Tagen.



    Ich habe das Programm am Mega65 (genauer: Nexys-Board) in BASIC geschrieben, es läuft aber ohne Veränderung auch auf dem C64, C128, Plus 4 und mit Einschränkungen am VC20 (alle in VICE probiert).



    Angehängt habe ich das BASIC-Programm als gepacktes D64-Image und D81-Image (für Mega65).


    Viel Vergnügen beim Ausprobieren! :)


    Code
    1. 10 rem exponentielles wachstum
    2. 20 print "S=== exponentielles wachstum ==="
    3. 30 let an=1 : rem anzahl gleich 1
    4. 40 print " eingabe verbreitungsfaktor ";
    5. 50 input fa
    6. 60 for k=2 to 21
    7. 70 ve=an*fa
    8. 80 an=an+ve
    9. 90 print k,an
    10. 100 next k

    Anmerkung: Das "S" in Zeile 20 ist das Steuerzeichen (in VICE mit SHIFT+POS1) zum Löschen des Bildschirms (siehe das "inverse Herz" im Screenshotlisting).

  • Wer die Ästhetik von Mathematik liebt, hier eins der vielen kleinen Beispiele aus dem Buch "Spiele mit Computergrafik" von Norbert Treitz. Dazu braucht man Simons' Basic (und viel Zeit!) Das Programm malt um 11 zufällig gesetzte Punkte konzentrische Kreise (bei der Hälfte des Abstandes zum nächsten Punkt um diesen dann). Man kann die Anzahl der Punkte ändern (in 120, hier sind es 11 Punkte: 0 bis 10, wenn es mehr sein sollen, beachten, dass dann x() und y() geDIMt werden müssen) und die Dicke der Kreise auch (in 200: der Teiler 3 legt die Dicke fest, je größer desto dicker).


    Code
    1. 120 hires1,0:fori=0to10
    2. 130 y(i)=200*rnd(1):x(i)=320*rnd(1)
    3. 140 next
    4. 150 forx=0to319:fory=0to199:r=1e6:fori=0to10
    5. 180 r1=sqr((x-x(i))*(x-x(i))+(y-y(i))*(y-y(i)))
    6. 190 ifr1<rthenr=r1
    7. 200 next:plotx,y,r/3and1:next:next
    8. 210 do null

    Das DO NULL in der letzten Zeile ist TSB-Syntax, einfach durch WAIT198,1 ersetzen, wenn man TSB nicht hat. Ansonsten sind nur zwei Befehle anzupassen für andere Basic-Versionen: HIRES in Zeile 120 (schaltet die Grafik ein) und PLOT in Zeile 200 (setzt einen Punkt an x,y in der Farbe, die der dritte Parameter angibt, hier 0-aus oder 1-an)


    Hier ein Beispiel-Ergebnis:



    Arndt

  • Wer die Ästhetik von Mathematik liebt, hier eins der vielen kleinen Beispiele aus dem Buch "Spiele mit Computergrafik" von Norbert Treitz. [...] Hier ein Beispiel-Ergebnis:

    Das sieht klasse aus! Falls jemand nicht genug von den konzentrischen Kreisen bekommt und die Wartezeit beim Berechnen des nächsten HiRes-Bildes zu lang wird, der kann sich dieselbe Ästhetik in Bewegung auch mal hier anschauen: https://www.shadertoy.com/view/WsscRX

    Der Algorithmus ist derselbe wie im BASIC-Programm.

  • der kann sich dieselbe Ästhetik in Bewegung auch mal hier anschauen

    Das ist ja cool! Wow! 8\|


    Ich könnte aus dem Buch noch mehr dieser kleinen Proggies hochladen. Soll ich? (Ein paar sind auch schon im C64-Wiki, z.B. unter dem Stichwort TEST ein schönes!)


    Arndt

  • Hehe…, ok.


    Hier das Programm zum Erzeugen einer Milchstraße:


    Code
    1. 100 hires1,0
    2. 110 forx=1to160:fory=-100to99
    3. 120 w=atn(y/x):r=sqr(x*x+y*y)
    4. 130 h=.5+.5*(sin(2*w+log(r)*10))
    5. 140 ifh<rnd(1)then160
    6. 150 plot160-x,100+y,1:plot159+x,99-y,1
    7. 160 next:next
    8. 170 do null

    Und der Screenshot dazu:



    :-)


    Arndt

  • Heute mal was anderes. Ich hab mal vor ewigen Zeiten in der 64'er ein paar Tricks veröffentlicht, das Programm hier basiert auf einem Kernel-SYS zum Verschieben von Speicher ($b688, gehört zur Stringverwaltung) und speichert den aktuellen Textbildschirm ab, in diesem Falle viermal, inklusive der Farben. Man braucht also 8 KB freien Speicher dafür (hier ab $5000). Wenn man sich auf zwei Screens beschränkt, reicht natürlich auch der $C000-Bereich aus.


    Erstmal das Programm:


    Der SYS ist in der letzten Zeile und braucht als Parameter das Ziel der Verschiebung (Variable Z in 2100), die Quelle (Variable Q in 2110) und die Länge des Verschiebe-Chunks. Da der SYS aus der Stringverwaltung kommt, kann er nur maximal 255 Bytes bearbeiten (Variable AN) und die Routine muss deshalb mehrfach aufgerufen werden (aus Zeile 1900 heraus), je Screen und Farbe viermal. Braucht man die Farbe gar nicht (weil eh alles in einer Farbe auf dem Bildschirm steht), kann man sich die Zeilen 26 und 71 sparen, ebenso die Variablen Z2 und Q2 (Zeile 16). Das spart natürlich auch Speicher. Ach so, die Zeilen 35 und 36 tauschen Quell- und Zieladresse aus für die "Rückgewinnung".


    Das Programm schreibt jeweils einen ganzen Screen mit einer Zahl voll (1..4) und wartet dann auf eine Eingabe, mit der man einen der Screens wieder anzeigen kann.


    :-)


    Arndt

  • Irgendwie kommen Programme mit Grafik besser an? ;-)


    Hier also wieder was mit Grafik (und daher auch für Simons' Basic, lässt sich aber leicht anpassen): Eine Kugel, um die sich ein Schriftzug windet.


    Die Neigung der Kugel steuert man mit dem Wert bei VV in Zeile 100. Wenn der negativ wird, sieht man die Kugel von unten, bei PI/2 sieht man genau von oben auf den Nordpol. Wie üblich dauert das Programm seine Zeit, selbst unter Warp im Emulator...


    Einen Screenshot mit dem VV-Wert oben haben wir auch parat:



    Der Bannertext muss für den Befehl CHAR im Bildschirmcode vorliegen, daher wird er in Zeile 105 einfach auf den Textscreen gePRINTet und später dort per PEEK ausgelesen (Zeile 120). Die beiden CIRCLEs kommen im Originalprogramm (siehe Post #2) nicht vor, auch die Strukturierung mit LOOP nicht, da war mehr Spaghetti... "DO null" ist TSB, einfach mit wait198,1 ersetzen.


    Arndt

  • Hier das Programm zum Erzeugen einer Milchstraße...

    Wie bereits per PM besprochen find ich diese 2D Algorithmen auch extrem nett zum rumspielen. Genaugenommen seit dem Zeitpunkt (meiner Teenagerjahre) wenn man in Simons Basic mal was mit Grafik (aber kein Spiel und ohne Sprites) machen wollte. Da ich mich grad mit Amiblitz (hiess früher Blitzbasic) am Amiga beschäftige hab ich die "Milchstrasse" mal auf die Schnelle in dieser Sprache umgesetzt.

    Details: Hab das Programm flexibel gemacht und kann wahlweise in 2 oder 4 Farben und in Lores (320x256) oder Hires (640x256) rendern. Wobei ich nicht die volle Höhe verwende sondern meist nur bis 200 oder 240 oder so. Der Anhang ist 640x240 mit 4 Farben.

  • Gefällt mir richtig gut !

    Ist zwar Simon's Basic und nicht Basic 10 ;-) aber beim Durchlesen der Posts habe ich gesehen, dass dies wohl relativ einfach auch auf dem MEGA65 zu realisieren wäre.

    Wie Snoopy sagte, wenn ihr interresante Basic Listings habt, zeigt sie !

  • Fand ich auf YouTube (BASIC V2):


  • Hallo,

    habe das Programm von Arndt mit den konzentrischen Kreisen mal

    für C64-Basic angepasst:


    Die Zahl der Kreise wird in Zeile 20 bei n=.. eingetragen. Das Programm dürfte schneller

    sein, als das Original.


    Hier noch eine erweiterte Version von mir, ebenfalls in C64-Basic.

    Das Programm nutzt vier Farben und erzeugt eine Animation. Die Zahl der

    Kreise kann in Zeile 80 geändert werden (n=..) . Die Farben der Kreise

    stehen in Zeile 90.


    KreiseMC.jpg


    Gruss,


    Neptun