PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QBasic Frage



WinterStorm
29.07.2005, 20:11
Hallo,
ich hab mir vorgenommen basic zu lernen und bin dabei auf QBasic gestoßen
ich hab mir das jetzt angesehen und das ist ja nicht mal so schwer wie ich zunächst dachte, ich hab schon ein paar kleine programme geschrieben und ausgeführt zb. "hello world" und einen countdown und ein zahlen-rate spiel usw...
naja ich woltte fragen ob ich diese "programme" als *.exe dateien speichern kann :confused: denn sonst muss ich sie immer mit meinem editor öffnen und dann run drücken. also als *.bas datei kann ich es ja speichern aber ich möchts gern als *.exe datei wie schon gesagt....
dazu braucht man denk ich einen compiler oder?
wenn ja könnt ihr mir einen guten QBasic compiler empfehlen?
und habt gnade mit mir ich kenn mich noch nicht so gut aus :D

mfg
WinterStorm

Rolus
29.07.2005, 20:37
Ich denke hier (http://www.robsite.de/programme.php?prog=basiccompiler) findest du, was du suchst. Ich würd's zuerst mal mit RapidQ versuchen, ansonsten kannst du die anderen ja auch noch ausprobieren.

freundliche Grüße, Rolus

WinterStorm
30.07.2005, 00:17
hm,
das wäre glaub ich schon das richtige gewesen aber
ich glaube der download funzt nich ganz da steht wenn
ich auf den link klicke "Could not locate remote server", :(
weißt du wo ich vllt so etwas ähnliches herbekomme?
bitte.....

mfg

Rolus
30.07.2005, 11:35
Stimmt, der Link scheint absolut tot zu sein. Dann versuch's halt mal direkt mit dem guten, alten QuickBasic 4.5. Hier (http://www.antonis.de/qbdown/qbcompil.htm) kannst du ihn runterladen, direkt unter dem QBasic Interpreter.

freundliche Grüße, Rolus

Thoronador
30.07.2005, 18:01
QBasic? Das ist doch ein Witz, und schon lange nicht mhr zeitgemäß.
Wenn du ernsthaft programmiern willst, würde ich dir eine andere Sprache empfehlen, z.B. C/C++ oder Delphi.

WinterStorm
31.07.2005, 18:26
@Thoronador
nun ja ich weiß das die sprache vielleicht nicht mehr aktuell is aber ich bin zufällig darauf gestoßen und ich kann später sicher schnell leichter eine andere sprache lernen, wenn ich basic schon mal ein bisschen beherrsche oder? :D
und rolus ich hab mir da mal dieses QuickBasic runtergeladen, kannst du mir das ma kurz erklären?

mfg
WinterStorm

Rolus
31.07.2005, 18:45
Hm, was soll man da denn groß erklären?
Du entpackst erstmal die Zip-Datei. Wenn du die qb45.bat startest, solltest du in eine dos-editorähnliche Umgebung kommen. Dort kannst du dann über das Datei-Menü deine Programmcodes laden oder du schreibst gleich neue in das Textfenster. Über den Menüpunkt Ausführen kannst du deine Programme laufen lassen oder zu EXE Dateien kompilieren lassen (EXE Datei erstellen). Ist eigentlich recht einfach zu bedienen, zumal das Programm sogar auf deutsch ist. Naja, wenn noch was unklar ist, einfach nachfragen. :)

freundliche Grüße, Rolus

WinterStorm
31.07.2005, 19:23
hm...
sorry eigentlich hab ich mir ja vorgenommen nicht lästig zu sein
weil ich schon gesehen hab wie viele leute proggen lernen wollen
...
aber mit dem compiler werden 3 dateien erstellt eine *.bas eine *.exe
und eine *.obj aber wenn ich die *.bas datei öffne steht da bad file mode
und wenn ich die *.exe datei öffne steht das zwar da was ich "programmiert"
hab aber nur sehr kurz für ca 1 sekunde und das is sicher nich richtig so...
:confused:

Rolus
31.07.2005, 19:54
sorry eigentlich hab ich mir ja vorgenommen nicht lästig zu sein
weil ich schon gesehen hab wie viele leute proggen lernen wollen
Wieso solltest du lästig sein? Fragen stellen ist nie verkehrt.

aber mit dem compiler werden 3 dateien erstellt eine *.bas eine *.exe und eine *.obj
Ja, das ist auch richtig so. Die BAS Datei ist der Quelltext, die OBJ Datei ist dein kompilierter Quelltext und die EXE Datei dein gelinktes Programm. Ein kompilierter Quelltext muss nämlich in der Regel erst noch gelinkt werden, damit man ihn ausführen kann. Linken heißt, dass der Code in ein bestimmtes Format gebracht wird. Zum Beispiel nutzt Windows für die meisten ausführbaren Dateien das PE-Format (http://de.wikipedia.org/wiki/Portable_Executable). Aber das muss dich als Anfänger nicht sonderlich interessieren. Wichtig ist, dass es eine EXE Datei ist und man es ausführen kann.

aber wenn ich die *.bas datei öffne steht da bad file mode
Mit was öffnest du die BAS Datei? Mit Quickbasic 4.5 sollte das problemlos gehen, mit anderen Editoren nicht unbedingt. Das liegt daran, dass Quickbasic 4.5 keine normalen textbasierten BAS Dateien erstellt, sondern eigene. Wenn du normale textbasierte BAS Dateien erstellen willst, musst du das beim Speichern mit Quickbasic 4.5 einstellen (Speichern -> Format -> Text).

und wenn ich die *.exe datei öffne steht das zwar da was ich "programmiert"
hab aber nur sehr kurz für ca 1 sekunde und das is sicher nich richtig so...
Doch, das ist absolut richtig so. Das Programm macht nur das, was du ihm vorher gesagt hast. Mehr nicht. Deine Programmierumgebung hat wohl immer automatisch auf einen Tastendruck gewartet, bis sie dein Programm beendet hat. Ein eigenständiges Programm macht das nicht von alleine. Der passende Befehl nennt sich "SLEEP". Damit schläft dein Programm quasi solange bis der Benutzer eine Taste gedrückt hat.
Wenn du den Befehl an's Ende deines Programmes setzt, beendet sich das Programm also erst, wenn eine Taste gedrückt wurde. :)

freundliche Grüße, Rolus

WinterStorm
01.08.2005, 15:04
danke,
so ich hab da mal ein bisschen rumprobiert und
schau dir bitte mal das an
http:\\www.orpk.at.tf (http://www.orpk.at.tf)
lad dir mal das zweite runter und sag mir bitte was ich noch
verbessern könnte es ist aber leider noch nicht fertig... :D

mfg
WinterStorm

Rolus
01.08.2005, 15:42
Ist schon sehr nett, nur halt etwas kurz. :)
Aber solche Text-RPGs sind auch verdammt viel Arbeit, wenn man's wirklich lange machen will. Naja, ich würde auf jeden Fall immer Zurück-Möglichkeiten einbauen ([0] Zurueck). Außerdem werden die Eingaben nicht genau genug überprüft. Wenn ich z.B. am Anfang in der Stadt bin, gibt es Schmied [1] und Taverne [2]. Wenn ich jetzt aber 3 drücke, komme ich auch zum Schmied, d.h. Schmied ist die Standardaktion. Das solltest du umändern, sodass man nur durch die richtigen Ziffern zum richtigen Ort gelangt und sonst nichts passiert oder das Auswahlmenü erneut angezeigt wird. Ansonsten gefällt's mir gut.

freundliche Grüße, Rolus

WinterStorm
01.08.2005, 21:36
moin,
danke erst mal...
ich wollt das nur mal testen :)
aber kann man das auch so machen dass
man nur 1 drücken und dann nicht "entern" muss?
und das man wenn man zum bsp. schmied kommt
dann nicht überdem steht wo man vorher war
sondern so etwas wie ne neue seite kommt?
danke schon mal im voraus
und danke für den compiler bin recht zufrieden
damit *g*

mfg

Rolus
01.08.2005, 22:41
aber kann man das auch so machen dass
man nur 1 drücken und dann nicht "entern" muss?
Ja, das kann man machen. Und wahrscheinlich möchtest du jetzt auch noch wissen, wie man das machen kann .. ;)
Also, wenn der Benutzer eine Taste drückt, wird die Taste in der Variable INKEY$ gespeichert. Du schreibst dir also eine Schleife, die immer wiederholt wird. Und in dieser Schleife wertest du INKEY$ aus. Das machst du am besten mit einer Case-Verzweigung, die dich dann zum entsprechenden Ort führt. Hier (http://www.o-bizz.de/qbtuts/qb-kurs/#_Toc54421144) wird das recht schön erklärt. Naja, versuch's einfach mal und wenn es bei der Umsetzung Fragen gibt, einfach nachfragen.

und das man wenn man zum bsp. schmied kommt
dann nicht überdem steht wo man vorher war
sondern so etwas wie ne neue seite kommt?
Ja, das ist einfach. Der Befehl CLS löscht die aktuelle Bildschirmausgabe. Also sobald man z.B. zum Schmied kommt, führst du CLS aus und schon ist der alte Kram weg ..

freundliche Grüße, Rolus

WinterStorm
01.08.2005, 23:35
danke das mit dem cls funzt ja recht schön aber
die inkey schleife versteh ich nich...
also am besten wärs wenn du einfach mal den quellcode für so eine kleine
funktion reinschreiben würdest. :D
aber ich hab gar keine planung sorry...
außerdem bist du für mich ein
programmiergott :D
§danke §danke rolus :D
mfg

Rolus
02.08.2005, 11:37
Hm, na gut. Hier mal ein kleines Beispiel:

PRINT "[1]Schmied [2]Markt [3]Taverne [0]Beenden"
DO:
SELECT CASE INKEY$
CASE "0": END
CASE "1": GOTO LBLschmied
CASE "2": GOTO LBLmarkt
CASE "3": GOTO LBLtaverne
END SELECT
LOOP
Zuerst geben wir den Auswahltext aus. Dann beginnt die DO LOOP Schleife. Der Inhalt dieser Schleife wird also andauernd wiederholt. In der Schleife beginnen wir mit einer CASE Verzweigung welche die Variable INKEY$ (gedrückte Taste) analysiert. Wenn der Fall (case) eintritt, dass INKEY$ gleich "0" ist, wird das Programm beendet. Wenn INKEY$ gleich "1" ist wird zur Sprungmarke LBLschmied gesprungen und so weiter. Mit END SELECT hört die SELECT CASE Verzweigung dann auf und mit LOOP endet die Schleife. Die LBLs sind einfach normale Sprungziele, welche du halt irgendwo definieren musst. Ich hoffe das war einigermaßen verständlich erklärt. :)
PS: Danke für das Lob.

freundliche Grüße, Rolus

WinterStorm
04.08.2005, 22:42
hi,
naja das funktioniert jetzt zwar aber wenn ich
bei goto den pfad angebe und den pfad dann zb.
pfad:
print " hallo"
schreib dann blinkt das ständig kann mann das nicht ausstellen?
den das wäre ja schon etwas lästig oder?

mfg
WinterStorm

Rolus
05.08.2005, 12:47
Wieso blinkt das? Hast du da eventuell irgendwas in die Schleife geschrieben? Also in der Tastaturschleife sollte keine Print-Ausgabe stehen. Du musst erst die Ausgabe machen und dann die Schleife ausführen. Zur Not poste einfach mal den entsprechenden Code-Abschnitt, damit man sehen kan, wo das Problem liegt.

freundliche Grüße, Rolus

WinterStorm
05.08.2005, 15:41
also ich wollte ein billiges 2d spiel machen und
hab das mal probiert jetzt hab ich den fehler aber schon gefunden warum das nicht gegangen is, denn ich hab das so gemacht:
select case inkey$
case "0": end
case "1": goto text
das ist ja noch gegangen aber als ich
dann hinschrieb:
case else
goto anfang
und dann hat es wahrscheinlich immer
goto anfang ausgeführt auch ohne etwas zu drücken offensichtlich
hab ich da irgendetwas falsch gemacht... :D
aber jetz funzt es ja... :)

kann man eigentlich ein bild einfügen und dann
daneben eine print oder andere funktion ausführen?
übrigens hab ich mal ein kleins 2d demo gemacht...
homepage (http://www.orpk.at.tf)
meine icq nummer: 223483139

mfg
WinterStorm