QBASIC :-)

Locked
Message
Author
bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

QBASIC :-)

#1 Post by bakunin »

Hi!

Ja, ich habe auch mal in QBASIC programmiert. Es war sogar meine erste Sprache, doch alle schlechten Angewohnheiten habe ich mir wieder abtrainiert. Ich habe gerade ein paar alte Programme auf einer Diskette gefunden, deren Etikett schon etwas vergilbt war. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Das folgende Programm zeigt (glaube ich) einen herumspringenden Ball an. Ich weiß, dass ich damals sehr stolz darauf war. Daher möchte ich es nun der Allgemeinheit unter der GNU GPL zur Verfügung stellen. Hier ist der Code. Die Einrückungen fehlen im Original (natürlich) auch.

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
DEFINT A-Z
RANDOMIZE TIMER
DIM GrafikPuffer(1000)
SCREEN 9
Max.X = 625: Min.X = 0
Max.Y = 345: Min.Y = 0
SizeOfBall = 15
Start.X = 15
Start.Y = 15
CIRCLE (Start.X, Start.Y), SizeOfBall, 12
PAINT (Start.X, Start.Y), 6, 12
GET (Start.X - SizeOfBall, Start.Y - SizeOfBall)-(Start.X + SizeOfBall, Start.Y + SizeOfBall), GrafikPuffer
AktuellePosition.X = AltePosition.X = Start.X
AktuellePosition.Y = AltePosition.Y = Start.Y
Richtung.X = 1
Richtung.Y = 1
PSET (0, 0)
DRAW "d349r639u349l639"
DO
PUT (AltePosition.X, AltePosition.Y), GrafikPuffer
Inkrement.X = 5
IF AktuellePosition.X + Inkrement.X + 30 > Max.X THEN Richtung.X = -1: PLAY "<<<l32c>>>"
IF AktuellePosition.X - Inkrement.X < Min.Y THEN Richtung.X = 1: PLAY "<<<l32c>>>"
AktuellePosition.X = AktuellePosition.X + (Inkrement.X * Richtung.X)
Inkrement.Y = 5
IF AktuellePosition.Y + Inkrement.Y + 30 > Max.Y THEN Richtung.Y = -1: PLAY "<<l32c>>"
IF AktuellePosition.Y - Inkrement.Y < Min.Y THEN Richtung.Y = 1: PLAY "<<l32c>>"
AktuellePosition.Y = AktuellePosition.Y + (Inkrement.Y * Richtung.Y)
PUT (AktuellePosition.X, AktuellePosition.Y), GrafikPuffer
PLAY "p64"
AltePosition.X = AktuellePosition.X
AltePosition.Y = AktuellePosition.Y
LOOP UNTIL INKEY$ <> ""
CLS
</font><hr></pre></blockquote>

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: QBASIC :-)

#2 Post by marc »

Ochott, ich werd nostalgisch. Ich hab auch mit Qbasic angefangen vor fast 10 Jahren auf nem 286. Das waren noch Zeiten...
Die erste Änderung, die ich spontan machen würde, wäre
LOOP UNTIL INKEY$ <> ""
durch
LOOP UNTIL INKEY$ = CHR$(27)
zu ersetzen. So hab ich meine Programme immer beendet. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

Gruß
Marc

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: QBASIC :-)

#3 Post by bakunin »

Hi!

> Ochott, ich werd nostalgisch.

Das war mein Ziel. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

> Ich hab auch mit Qbasic angefangen vor fast 10 Jahren auf nem 286. Das waren noch Zeiten...

Bei mir dürften es 8 oder 9 Jahre sein und es war ein 386er. Den hatte ich sehr lange, danach kam der P166. Den habe ich heute noch und werde ihn noch eine Weile behalten. Nur die eine Festplatte verreckt langsam aber sicher und muss demnächst mal ausgewechselt werden.

> Die erste Änderung, die ich spontan machen würde, wäre
> LOOP UNTIL INKEY$ <> ""
> durch
> LOOP UNTIL INKEY$ = CHR$(27)
> zu ersetzen. So hab ich meine Programme immer beendet.

Mit Escape? Also ich finde es viel besser, wenn man eine beliebige Taste drücken kann. Also ich würde zuerst mal die unnötigen Zuweisungen aus der Schleife nach oben verschieben und die Zahl 30 ganz ordentlich durch (2 * SizeOfBall) ersetzen. Aber ich muss sagen, dass ich das Programm eigentlich noch problemlos verstehen kann.

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: QBASIC :-)

#4 Post by marc »

> Mit Escape?

Ja. Zu damaligen Zeiten war es doch üblich, daß DOS-Spielchen mit Escape beendet wurden. Ist halt Gewohnheitssache, und das Proggi wurde dann auch nicht aus Versehen beendet, wenn man mal an die Tastatur kam. ;)

Was mir gerade noch auffällt...
PLAY "p64" als Delay zu nutzen, ist ne gute Idee. Da wär ich nicht drauf gekommen.
Delays hab ich meistens mittels
FOR i% TO 10000: NEXT i%
gebastelt, wobei die 10000 dann der gewünschten Geschwindigkeit angepaßt wird, oder vorher berechnet wird abhängig von der Geschwindigkeit des jeweiligen Rechners.
Das Feld GrafikPuffer ist mit 1000 zu groß dimensioniert. Die Formel zur Berechnung der Größe steht irgendwo in der Qbasic-Hilfe... Hab gerade mal ein bißchen ausprobiert. 300 klappt auch noch.
Warum hast Du eigentlich Screen 9 benutzt? Für grafische Spielereien bietet sich doch 13 eher an, bzw. 12 wenn mans "hochauflösend" will.

Ich muß gerade an mein letztes Quickbasic-Programm zurückdenken, bevor ich mit Basic aufgehört habe. 50kb reinster Spaghetti-Code. Strukturierte Programmierung war noch ein Fremdwort. Auf nem Notizzettel alle Zahlen für die Goto-Sprünge notiert (das waren einige) um noch halbwegs einen Überblick zu haben, dann noch ebensoviele GoSubs und Subs. Das Genick gebrochen hat dem Programm letztendlich der enorme Speicherverbrauch, es ließ sich wegen zu vielen Variablen und Feldern nicht mehr starten...

Gruß
Marc

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: QBASIC :-)

#5 Post by bakunin »

Hi, Marc!

Da fällt mir ein, dass ich zwei Varianten dieses Programmes geschrieben hatte. Eines war eine Art Breakout, nur ohne Blöcke zum kaputtmachen. Man musste eben den Ball so lange wie möglich oben halten. Die Bewegung der Plattform war aber ziemlich abgehackt. Die zweite Variante enthielt Schwerkraft und auch die Seitwärtsbewegung wurde mit der Zeit langsamer! Ich hatte ziemlich lange ausprobiert, was passiert, wenn ich die Startparameter verändere (vermutlich mehrere Tage <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle"> ). Es gab aber glaube ich ein Problem, wenn die Geschwindigkeit zu hoch war und der Ball an eine Wand kam. Hmmm... die beiden Varianten zu kombinieren wäre cool.

> Ist halt Gewohnheitssache, und das Proggi wurde dann auch nicht aus Versehen beendet, wenn man mal an die Tastatur kam.

Musste man sich nicht auf die damaligen Tastaturen mit seinem ganzen Gewicht stemmen, damit ein Tastendruck als solcher erkannt wurde? <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

> Was mir gerade noch auffällt...
> PLAY "p64" als Delay zu nutzen, ist ne gute Idee. Da wär ich nicht drauf gekommen.

Man hat aber ganz leise ein leichtes Knacken gehört glaube ich. Lag aber vermutlich an den damaligen PC-Speakern.

> Delays hab ich meistens mittels
> FOR i% TO 10000: NEXT i%
> gebastelt, wobei die 10000 dann der gewünschten Geschwindigkeit angepaßt wird oder vorher berechnet wird abhängig von der Geschwindigkeit des jeweiligen Rechners.

Ja, aber das Berechnen war mir zu aufwendig. (D.h. ich hatte keine Lust, das erstmal vernünftig zu skalieren)

> Das Feld GrafikPuffer ist mit 1000 zu groß dimensioniert. Die Formel zur Berechnung der Größe steht irgendwo in der Qbasic-Hilfe... Hab gerade mal ein bißchen ausprobiert. 300 klappt auch noch.

Ja, ich habe damals keine Ahnung davon gehabt, was diese Zahlen bedeuten und habe halt geraten. *g*

> Warum hast Du eigentlich Screen 9 benutzt? Für grafische Spielereien bietet sich doch 13 eher an, bzw. 12 wenn mans "hochauflösend" will.

War 13 nicht eine extrem niedrige Auflösung (320 x Irgendwas), die dafür 256 Farben hatte? Da sah der Ball so richtig ekelig pixelig aus. Was 12 war, weiß ich jetzt nicht genau, war das nicht mehr als die 640 x 480 von SCREEN 9, dafür monochrom?

> Ich muß gerade an mein letztes Quickbasic-Programm zurückdenken, bevor ich mit Basic aufgehört habe. 50kb reinster Spaghetti-Code. Strukturierte Programmierung war noch ein Fremdwort. Auf nem Notizzettel alle Zahlen für die Goto-Sprünge notiert (das waren einige) um noch halbwegs einen Überblick zu haben, dann noch ebensoviele GoSubs und Subs. Das Genick gebrochen hat dem Programm letztendlich der enorme Speicherverbrauch, es ließ sich wegen zu vielen Variablen und Feldern nicht mehr starten...

Ja, ich habe hier noch einige Sachen, die ich lieber nicht vorzeige. Ein Codestück hatte ich offenbar per Copy-Paste in einige Programme eingefügt, aber der Code ist absolut blödsinnig:

100 CLS
wort$ = "Ein beliebieger Text"
lang = LEN(wort$)
CLS
IF lang > 80 THEN PRINT " NOCHMAL EINGEBEN": FOR t = 1 TO 3999: NEXT t: GOTO 100

Aber es gab Leute, die haben richtig gute Sachen in QBASIC gemacht. Es gab da mal ein Spiel, bei dem man (mit der Maus! Die Mausroutinen habe ich hier sogar noch <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle"> ) Spiegel in eine 2D-Landschaft setzen musste, an denen dann ein Ball abprallt und er musste das Ziel erreichen. War ein richtig gut gemachtes Denkspiel. Sowas hätte ich gerne wieder, resp. eine freie Version davon. :)

Cheers,
GNU/Wolfgang

PS: Kannst du mal testen, was das da macht? (Einrückungen hinzugefügt ;) )

<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
SCREEN 9
DO
FOR a = 1 TO 640
IF INKEY$ <> "" THEN 1
IF a = 1 THEN b% = 2
LINE (320, 0)-(a, 300), b%
FOR w = 1 TO 100: NEXT w
NEXT a
FOR a = 1 TO 640
IF INKEY$ <> "" THEN 1
IF a = 1 THEN b% = 10
LINE (320, 0)-(a, 300), b%
FOR w = 1 TO 100: NEXT w
NEXT a
LOOP
1
</font><hr></pre></blockquote>

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: QBASIC :-)

#6 Post by marc »

Nabend.

> Man hat aber ganz leise ein leichtes Knacken gehört glaube ich. Lag aber vermutlich an den damaligen PC-Speakern.

Ach daher kommt das. Das ist bei heutigen Speakern immer noch <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">

> War 13 nicht eine extrem niedrige Auflösung (320 x Irgendwas), die dafür 256 Farben hatte?

Yep, aber der 13er-Modus ist der schnellste Modus, weil er im Grafikspeicher glaube ich genau 64kb belegt hat. Hab ich zumindest mal gelesen, aber wußte nicht, wie ich das ausnutzen konnte...

> Was 12 war, weiß ich jetzt nicht genau, war das nicht mehr als die 640 x 480 von SCREEN 9, dafür monochrom?

640x480 und 16 Farben. Der Hammer in fortgeschrittener Grafiktechnik... Hat die damaligen Monitore voll ausgereizt ;)

> Aber es gab Leute, die haben richtig gute Sachen in QBASIC gemacht.

Ich sag nur www.qbasic.com <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">

> Es gab da mal ein Spiel, bei dem man (mit der Maus! Die Mausroutinen habe ich hier sogar noch)

Int &H33 <img src="http://www.pl-forum.de/UltraBoard/Images/Happy.gif" border="0" align="middle">
Hab die Mausroutinen für meine Programme damals aus dem "Qbasic-Buch" von Data Becker abgetippt. Allerdings haben mir die ganzen Zahlenkollonnen nicht allzuviel gesagt.

> Spiegel in eine 2D-Landschaft setzen musste, an denen dann ein Ball abprallt und er musste das Ziel erreichen. War ein richtig gut gemachtes Denkspiel. Sowas hätte ich gerne wieder, resp. eine freie Version davon. :)

Die Basic-Spiele, die wir damals pausenlos gezockt haben, waren Gorilla und Nibbles. Farblich und funktional aber etwas angepaßt...
> PS: Kannst du mal testen, was das da macht? (Einrückungen hinzugefügt ;) )

Das zeichnet ein Dreieck mit einzelnen Linien von links nach rechts abwechselnd in hell- und dunkelgrün. Sieht mit viel Phantasie aus wie eine drehende Pyramide.
Ich glaube, ich muß bei mir auch mal nach alten Disketten suchen...
Gruß
Marc

bakunin
Posts: 597
Joined: 16. Aug 1999 6:44
Location: Lorsch (Südhessen)
Contact:

Re: QBASIC :-)

#7 Post by bakunin »

Hi, Marc!

> Ach daher kommt das. Das ist bei heutigen Speakern immer noch

Oh. :)

>> War 13 nicht eine extrem niedrige Auflösung (320 x Irgendwas), die dafür 256 Farben hatte?
> Yep, aber der 13er-Modus ist der schnellste Modus, weil er im Grafikspeicher glaube ich genau 64kb belegt hat. Hab ich zumindest mal gelesen, aber wußte nicht, wie ich das ausnutzen konnte...

Ja, klingt logisch, aber was nutzt mir die Geschwindigkeit, wenn es nix aussieht?

>> Was 12 war, weiß ich jetzt nicht genau, war das nicht mehr als die 640 x 480 von SCREEN 9, dafür monochrom?
> 640x480 und 16 Farben. Der Hammer in fortgeschrittener Grafiktechnik... Hat die damaligen Monitore voll ausgereizt ;)

Kann es sein, dass der bei mir nicht funktionierte und ich ihn daher nicht benutzt hatte? Nein halt, ich hatte dann ja mal ein Kistenschiebespiel in Assembler programmiert, in dem ich glaube ich genau diesen Modus verwendet hatte. Das Spiel war richtig cool, und das allerbeste war, dass NT hängenblieb, als ich es irgendwann mal auf einem PC in der Schule durchgespielt hatte. *g* Ich befürchte aber, dass ich das nicht mehr habe.

> Hab die Mausroutinen für meine Programme damals aus dem "Qbasic-Buch" von Data Becker abgetippt. Allerdings haben mir die ganzen Zahlenkollonnen nicht allzuviel gesagt.

Ah, daher kommt der Code. Ich wusste nie, woher der ursprünglich stammt. Unter was für einer Lizenz steht der denn?

> Die Basic-Spiele, die wir damals pausenlos gezockt haben, waren Gorilla und Nibbles. Farblich und funktional aber etwas angepaßt...

Ja, ich habe natürlich auch meine eigenen Nibbles-Levels gebastelt. Aber theoretisch hätte man den Code vermutlich nicht mal anpassen dürfen. Gemacht hat's logischerweise trotzdem jeder. Nett von MS, sowas auszuliefern.

> > PS: Kannst du mal testen, was das da macht? (Einrückungen hinzugefügt ;) )
> Das zeichnet ein Dreieck mit einzelnen Linien von links nach rechts abwechselnd in hell- und dunkelgrün. Sieht mit viel Phantasie aus wie eine drehende Pyramide.

Cool, man kann es also doch als Pyramide erkennen. ;) Ich kann mir aber nicht vorstellen, wie das aussieht.

> Ich glaube, ich muß bei mir auch mal nach alten Disketten suchen...

Hehe, die meisten davon werden wohl halb kaputt sein. Jedenfalls ist das bei meinen alten Disketten so. Selbst die Windows für Workgroups 3.11 Disketten sind zu drei Vierteln kaputt. (Kann man da Ersatz anfordern? *g*)

Cheers,
GNU/Wolfgang

marc
Posts: 444
Joined: 20. Apr 2001 23:31
Location: Arnsberg

Re: QBASIC :-)

#8 Post by marc »

> Ah, daher kommt der Code. Ich wusste nie, woher der ursprünglich stammt. Unter was für einer Lizenz steht der denn?

Hab gerade nochmal in das Buch geschaut. Lizenz wäre übertrieben. Kurz gesagt, Du darfst angucken, abtippen, selber nutzen. Für alles andere vorher den Autor fragen.
Wobei ich bezweifle, daß das bei so alten Sachen heute überhaupt noch jemanden interessiert, wenn man so etwas ungefragt weitergibt.
> Cool, man kann es also doch als Pyramide erkennen. ;) Ich kann mir aber nicht vorstellen, wie das aussieht.

Ich will Dich jetzt auch nicht dazu ermuntern, bei Dir DOS oder Win draufzumachen, um das auszuprobieren. <img src="http://www.pl-forum.de/UltraBoard/Images/Wilk.gif" border="0" align="middle">
Ich sitze derzeit bei meinem Vater am Rechner. Der hat noch ne Win98-Partition (bin gerade am Umstellen ;) und da hab ich mir eben Qbasic ausm Netz geladen, sonst hätt ichs auch nicht ausprobieren können.

> Selbst die Windows für Workgroups 3.11 Disketten sind zu drei Vierteln kaputt. (Kann man da Ersatz anfordern? *g*)

Du willst nicht wirklich Ersatz haben? ;)

Auch wenn dieser kleine Rückblick recht lustig war, muß ich doch sagen, daß ich mich heute ärgere, weil ich damals mit QBasic programmiert und nicht mit einer anderen Sprache wie C angefangen habe. Qbasic läßt sich ja heutzutage ehrlich gesagt zu nix mehr gebrauchen, und das war daher eigentlich verschenkte Zeit...

Gruß
Marc

panthera

Re: QBASIC :-)

#9 Post by panthera »

kleiner nachtrag:

http://www.xbasic.org/

Rossi

Re: QBASIC :-)

#10 Post by Rossi »

Ich bin strikt dagegen, das sich irgendetwas _ohne_ Zeilennummerierung Basic nennen darf. But then again "Phantom Menace" darf sich ja auch "Star Wars" nennen.

Locked