Beiträge von Kosmas im Thema „80 x 50 Pixel im Textmodus malen“

    Also hier noch mal das Prg als 4-Zeiler.

    Super Idee, nur ein Array verwendet. Bin gar nicht drauf gekommen, dass das in diesem Fall geht.

    Definitiv das kürzeste Programm, alle Achtung! (Auch mit den Doppelpunkten. :smile:

    Trotzdem ist das von JeeK das bisher schnellste (auch wenn ich beim 4-Zeiler die überflüssigen Doppelpunkte entferne :smile:

    Immer mit der Ruhe. Er hat es sicher nur vergessen, da er es doch sonst immer macht. Und wenn das Interesse wirklich so groß ist, ist es schneller abgetippt, als sich hier noch so lange darüber. Schließlich kannst Du es jetzt doch ohne die umständliche Abtipperei von mir runterladen. ;)

    Ist doch in 2 Minuten abgetippt: (sogar mit den Doppelpunkten, deren Sinn ich immer noch nicht begreife, ist aber der Stil von BIF )

    Code
    10 :rem--80x50 pixel-demo
    11 :dimi,v,h,b,x,y,a(255):h=1:v=peek(648)*256::print"er“80 x 50:"
    12 :fori=.to15:readb:a(b)=i:a(i)=b:next
    13 :b=62:data32,126,124,226,123,97,255,236,108,127,225,251,98,252,254,160
    14 :y=11:forx=.to79:gosub16:next
    15 :x=21:fory=.to49:gosub16:next:end
    16 :i=v+x/2+20*(yandb):pokei,a(a(peek(i))or(h+(xandh))*(h+3*(yandh))):return

    Die Version von JeeK ist die bisher schnellste in Basic. Die zweite von BIF ist aber auch nur ein wenig langsamer.

    Die Version von Jeek lässt sich sicher auch in 10 Zeilen machen, wenn man auf Löschen/Invertieren/Abfragen und das Drumherum mit der Zeitmessung verzichtet.

    detlef: Ich meine mich an ein solchen Programm erinnern zu können, kann aber nirgendwo etwas finden. Hast Du Deine Version noch irgendwo?

    Es gibt ja auch ein Galaga, was im Textmodus mit diesen Zeichen arbeitet, das gibt es auch für den C64: Bitte melde dich an, um diesen Link zu sehen.

    Gerne kann man noch eine challenge draus machen, aber ich glaube, der Code von Neptun ganz ohne if ist der schnellste. Ich kann mir nicht vorstellen, dass es in Basic wesentlich besser geht.

    Die lange if-Abfrage hatte ich bei mir auch nochmal abgeändert. In meiner ersten Version sind es bis zu 16 Abfragen, also im Schnitt bei zufälligem Durchlauf 8 Abfragen. Durch Intervallschachtelungen lässt sich das auf immer genau 4 Abfragen ändern. Dadurch wird dieser Teil immerhin doppelt so schnell. Aber die Doppel-Array-Methode kommt ganz ohne if aus und ist damit noch um einiges schneller, verbraucht aber auch mehr Speicherplatz.

    Wenn der Zeichensatz anders aufgebaut wäre und die Zeichen in der richtigen Reihenfolge hintereinander stehen würden, bräuchte man gar kein Array und kein if.

    Mit "schöne Idee" meinte ich auch nicht, dass die Idee neu ist, sondern einfach, das ich es schön finde, das Problem mal wieder auszupacken, anzugehen und Lösungswegen zu suchen.

    Deine Lösung ist jedenfalls schön kurz! Die Idee mit dem 2. Array hatte ich auch, und der Threadstarteter hatte es auf der Todo-Liste - ich denke, in Basic wird es nicht wesentlich schneller gehen. Dein Programm ließe sich noch um entsprechende Zeilen zum Löschen und XOR erweitern:

    Code
    3 n=vr+int(x/2)+c*int(y/2):poken,z(t(peek(n))and15-h((xand1)+2*(yand1))):return
    4 n=vr+int(x/2)+c*int(y/2):n1=t(peek(n)):n2=h((xand1)+2*(yand1))
    5 poken,z((n1orn2)-(n1andn2)):return
    6 n=vr+int(x/2)+c*int(y/2):n1=t(peek(n)):n2=h((xand1)+2*(yand1))
    7 n=-((n1andn2)=n2):return

    gosub3 ist löschen, gosub4 invertieren, und gosub6 abfragen. Das Ergebnis steht in der Variablen n.

    Mittlerweile habe ich die Setz/Lösch/XOR/Abfrage ergänzt. Außerdem habe ich gemerkt, dass mein Programm nur schneller ist, wenn ab Zeile 12500 nicht durch zu viele ifs laufen muss. Dann ist es nämlich leider langsamer. Sorry für meine kühne Behauptung.

    Aber kürzer ist es allemal. Und für die Zeilen ab 12500 fällt mir vielleicht noch was ein.

    (Für ein "Gefällt mir" fehlt mir die Berechtigung .. bin zu neu hier)

    Papperlapapp. :smile:

    Mit der Pixelroutine wollte ich meinem Sohn etwas zum coden in die Hand geben.

    Damit kannst Du ihn locken? Cool!

    Aufgabenstellung wie ... mach mal eine Line-Funktion damit.

    Bresenham und so...^^

    Mich hats grad in den Fingern gejuckt, daher ist hier mal meine Version. Sie ist sogar etwas schneller als Deine. Allerdings muss ich 2 Felder vorinitialisieren, und ich kann nur Punkte setzen, nicht löschen oder abfragen. Die Variablen habe ich teilweise so wie Du genannt.

    Das geht sicher noch schneller, hier sind einige Basiccracks dabei. Bin mal gespannt, ob jemand schneller wird.

    Edit: Mist, in Zeile 100 soll eigentlich das Steuerzeichen für Bildschirm löschen rein. Habs eben mal per Hand im Code geändert.

    Schöne Idee! Das erste Programm sieht ja deutlich kürzer aus als das zweite, das zweite scheint tatsächlich wesentlich schneller zu sein. Leider aber auch fehlerhaft: wenn ich den ganzen Bildschirm zeilenweise fülle, erscheint bei der 2., 4. .6. usw. Zeile regelmäßige Fehlmuster. Muss mal eine eigene Version probieren. :wink:

    Irgendwo hatte ich mal eine Maschinenroutine dafür, und es gab mal ein "schnelles" Game of Live, ist aber schon lange her... Gab es zur Maschinenroutiene nicht mal einen Artikel in der 64'er?