 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 25.05.2008, 00:07 Titel: Call stoppen |
|
|
Hallo zusammen.
Ich habe folgendes Problem. Ich bastle gerade ein Programm mit Maussteuerung. Das sieht etwa so aus:
Bild
Call Mausinitialisierung
Mauskoordinaten:
..
..
select Case mouseb%
case 1:
...
end select
goto Mauskoordinaten
Mouseb% ist die linke Maustaste. Das heißt, dass das ganze in einer Schleife läuft bis die linke maustaste auf verschiedene Koordinaten gedrückt wird. Das ganze läuft super und ich hab schon eine komplettes Mausmenü in Qbasic(!).
Aber wenn ich nun weitergehe und z.b. Bilder anzeigen lasse, habe ich die Maus immernoch. Naja gut kann man ertragen wenn nicht irgendwo in der Mitte des Programmes der Fehler kommt: "Module level code too large".
Ich schätze mal, dass das Qbasic das ganze Programm als eine riesige Maussteuerung sieht und das ganze da drin irgendwann zu viel wird. Wie kann ich nun aber das Programm in verschiedene Zonen mit und verschiedene Zonen ohne Maus betreiben?
Und wenn ich bei jedem Mausmenü in dem Programm die Maus neu initialisiere, dann kommt der Fehler ja nicht mehr oder?
Vielen dank für die hilfe und im Vorraus:
Ich habe keine Lust auf Freebasic umzusteigen. Ich häng an dem alten Qbasic .
gruß T1m0 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 25.05.2008, 10:25 Titel: |
|
|
QBasic unterliegt halt als typische Real Mode-Applikation den typischen Beschränkungen vom Intel 8088-Prozessor wie seinerzeit beim ersten IBM-PC/XT, namentlich der 64 KB-Segmentierung.
Vermutlichlich ist Dein Code inzwischen so stark gewachsten, dass er eine solche 64 KB-Limite überschreitet. Damit Du aber den gesamten konventionellen Speicher nutzen kannst, solltest Du Deinen Code erst einmal in SUB/FUNCTIONs unterteilen und diese möglichst in separate Module unterbringen. Artikel dazu aus meiner Sammlung:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SUB-Unterprogramme.html
=> am besten einmal durcharbeiten, speziell Beispiel ganz am Schluss beachten.
Sonst für weitere Fragen am besten uns Deinen bisherigen Code veröffentlichen (vermutlich aufgrund des grösseren Umfangs besser als .BAS-Datei auf einen Webspace hochladen und Link posten statt direkt als Beitrag in CODE-Tags gepostet). _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 25.05.2008, 11:21 Titel: |
|
|
Hallo!
dreael hat Folgendes geschrieben: | Sonst für weitere Fragen am besten uns Deinen bisherigen Code veröffentlichen (vermutlich aufgrund des grösseren Umfangs besser als .BAS-Datei auf einen Webspace hochladen und Link posten statt direkt als Beitrag in CODE-Tags gepostet). |
fb:porticula NoPaste ist im Übrigen ideal, um QBASIC/FreeBASIC Quelltexte online zur Verfügung zu stellen. Da gibt's gleich ein praktisches Syntax Highlighting zur schnellen Übersicht.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 25.05.2008, 19:34 Titel: |
|
|
Hi und danke für die Antworten.
Die BAS Datei, habe ich hier für euch hochgeladen:
http://rapidshare.com/files/117552936/STAR3.BAS.html
Als Mausgrundprogramm, habe ich ein Beispielprogramm von Qbasic.de genommen, sowie das BMP Anzeige Programm.
Ich hoffe ihr könnt mir helfen, da ich unbedingt diese Fortsetzung meiner kleinen StarTrek Adventure Spiele in Maussteuerung haben will.
Ich hoffe der Quellcode macht euch keine Verwirrung aber ich denke für euch wird er primitiv aufgebaut sein. Nunja ich habe mir Qbasic selbst beigebracht und halte wenig von Kursen, ich wollte lieber alles alleine rausfinden. Demnach ist auch die Programmierung
gruß T1m0 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.05.2008, 19:37 Titel: |
|
|
sorry, aber rapidshare kannst du hier vergessen. ich hab's noch nie geschafft, eines der neuen captchas zu lösen, und bei anderen wird's ähnlich sein. wie von sebastian vorgeschlagen, solltest du lieber fb:porticula oder ein anderes nopaste-system (rafb.net z.B.) benutzen.. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 25.05.2008, 20:56 Titel: |
|
|
Zu Abenteuerspiele gibt es in meiner Sammlung einen extra Artikel:
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Abenteuerspiel.html
Und ansonsten habe ich in Deinem Code durchaus an einigen Stellen Dinge gesehen, die zu
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Anfaengerfehler.html
passen. Gerade ein Adventure dürfte sich hervorragend für ein Konzept eignen, bei dem das .BAS-Programm nur die Rolle eines Players einnimmt, während passend gestaltete Datendateien inkl. der .BMPs für die Bilder gewissermassen den Medien entspricht. So muss dann eigentlich nur immer die gerade aktuelle Szene nur in den Arbeitsspeicher geladen werden, der Rest wird fortlaufend ab Disk bei Bedarf geholt. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 25.05.2008, 23:36 Titel: |
|
|
Damit es alle anschauen können: http://t1m0.bplaced.net/STAR3.BAS
Ich weiß das der Code ein Anfängercode ist und es macht mir nichts aus, mich als solcher zu bezeichnen. Aber allein etwas zu erschaffen, wo man hinterher sagen kann: "Das war ich, das habe ich gemacht" ist für mich unbeschreibbar toll.
Ich weiß das der "professionelle" Code besser geeignet ist aber wenn ihr mir erlaubt, so überlasst mir den Spaß, beim Alten zu bleiben. Außerdem ist mir der neue viel zu kompliziert.
Daten abspeichern? Keine schlechte Idee. Das hatte ich auch ehrlich gesagt mit Spielständen usw. vor aber wie zum Hänker, schaffe ich es, die Maus zu deaktivieren. Den Call Mouseinit Dings zu stoppen, sodass ich nicht fortlaufend im Programm eine Maus besitze? Wegen der länge der BAS Dateien mache ich mir keine sorgen. Der Chain Befehl und Textdateien voller Variablen verschaffen mir da schon sicherheit.
Nun Meine Herren, ich danke euch für die Antworten bereits.
Habt ihr eine Idee?
gruß T1m0 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 28.05.2008, 15:04 Titel: |
|
|
Hier ist es komplett:
http://t1m0.bplaced.de/StarTrek.rar
Bitte in den Qbasic ordner entpacken, damit der ordner DATA beim Starten im Qbasic Verzeichnis vorhanden ist. Sonst gibts keine Bilder.
Das ist der neuste Code, bei dem der Fehler auftrat. Löscht man das allerletzte Menüsystem der Maus ganz unten, funktioniert das Programm. Und hey, bitte nicht lachen auch wenns kindisch aussieht
gruß T1m0 |
|
Nach oben |
|
 |
b3ast
Anmeldungsdatum: 27.04.2008 Beiträge: 34
|
Verfasst am: 28.05.2008, 19:44 Titel: |
|
|
ich muss bei mir den halben quellcode löschen, sonst startet das prog nicht, da kommt immer der fehler "quellcode to large" oder so. dann funzt das menü aber ich hab halt keine maus.  |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.05.2008, 19:47 Titel: |
|
|
"quellcode to large"...nett
wahrscheinlich benutzt du QBasic 1.1 und nicht QuickBasic 4.5... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 28.05.2008, 20:14 Titel: |
|
|
ich benutze 7.1 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 28.05.2008, 20:19 Titel: |
|
|
jo, PDS und QB4.5 sind ziemlich gleich... es ging eher darum, was er benutzt - nämlich höchstwahrscheinlich das sehr beschärnkte qbasic 1.1  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
Verfasst am: 28.05.2008, 21:35 Titel: |
|
|
Mit QB4.5 und QB7.1 PDS wird bei deinem geposteten Quellcode immer die Fehlermeldung "Modul-Ebenen-Code zu groß" angezeigt. Durch Aufteilen deines Quellcodes in mehrere Module (deine Quelldatei ist ~130Kb groß und QB kann (afaik) nur Dateien bis 64Kb compilieren) kann man diesen Fehler beheben. Wenn ich das Programm also in 3 Module aufteile, und einigen Code in SUBs verschiebe läuft das Programm einwandfrei. Ich habe mir deinen Quellcode noch nicht näher angesehen, da er sehr verwirrend aufgebaut ist (viele GOTOs und GOSUBs, ...), es funktioniert aber toll.
Ich empfehle dir vor dem zeichnen von Grafiken auf den Bildschirm den Mauszeiger auszublenden (in deinem Programm mit dem Befehl Code: | vsmouse "hide", 0, 0, 0, 0 | ) und nach dem zeichnen der Grafik diesen wieder einzublenden (mit Code: | vsmouse "show", 0, 0, 0, 0 | ).
Beachte: Wenn du die Funktion "hide" zweimal hintereinander aufrufst, wird der Mauszeiger auch erst beim zweiten Aufruf von "show" wieder sichtbar!
Ich habe dir meine Abänderung (= Aufteilung) deines Programms unter http://swurzinger.sw.funpic.de/files/startrek.zip hochgeladen. Dies soll aber NICHT als Vorlage dienen, da ich (weil ich die Struktur des Programmes nicht näher kenne) einfach IRGENDWELCHE Teile des Programms in andere Dateien ausgelagert habe. So wird das Programm noch weit unübersichtlicher. Die Aufgabe liegt also bei dir, die passendsten Programmteile auszulagern. Viel Spaß und Erfolg!
Ich persönlich finde das Spiel bis jetzt schon sehr gut gelungen und freue mich auf die Fertigstellung!
LG, St_W _________________ Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken) |
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 28.05.2008, 23:08 Titel: |
|
|
Hi, danke für deine Hilfe
Ich werde in Zukunft versuchen das ganze mehr aufzuteilen. Hast du eine Idee, wie ich es schaffen könnte, dass bei der Mausauswahl im Hintergrund sich was bewegt? z.b. zischende Rohre oder sprühende Funken. Bis jetzt hab ich nämlich nur ein Standbild.
gruß T1m0 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 29.05.2008, 10:59 Titel: |
|
|
Übrigens gestern wieder einmal selber etwas im Amiga-Emulator ge-"game"-t: Altes Adventure hervorgekramt, welches ein Engländer programmiert hat. Als wichtige Anregung für Dich: Er hat dort ein recht schönes Konzept mit Raum-Textdateien entwickelt, bei dem er eine sehr einfache, eigene Scriptsprache gebaut hat, mit welcher er Aktionen/Handlungsmöglichkeiten beschreiben kann, so dass gewissermassen das .EXE wirklich nur wie ein Medienplayer arbeitet.
Sein Adventure ist von der Benützung her übrigens voll an die bekannten Lucasfilm (heute LucasArts)-Adventures angelehnt. Der "Medienplayer" der letzteren Adventures ist übrigens die bekannte SCUMM-Engine.
@T1m0: Ein wirklich signifikante Verbesserung Deines Programms wäre von dem her die Entwicklung einer sehr stark vereinfachten SCUMM-ähnlichen Engine, wie es dieser Engländer auch gemacht hat. Mit einer solchen lassen sich übrigens auch die Speicherprobleme erfolgreich lösen.
Wir können Dir sonst bei der Papier und Bleistift-Konzeption etwas helfen. Bereits einmal als eine erste Anregung: Die Orte wie bis jetzt als .BMP-Hintergrundbilder, zusätzlich eine Raumdatei mit dem selben Namen, aber separater Endung. Könnte einen Inhalt wie folgt besitzen:
Code: | # Küche KUECHE.TXT
WAY {
ScreenCoords = 12,34,100,50
MouseOverLabel = "Ausgang"
Target = HOF.TXT
Cond = None
}
WAY {
ScreenCoords = 150,34,180,50
MouseOverLabel = "Kammertüre"
Cond = F11 ! "Türe ist verklemmt, da komme ich nicht hin"
Target = KAMMER.TXT
}
ITEM {
ScreenCoords = 180,40,200,50
MouseOverLabel = "Herdplatte"
USE_ACTION {
G14 : "Ich habe die Pfanne draufgestellt." => F14 = 1
G12 ! "Stelle ich lieber nicht drauf. Der Kunststoff würde sofort schmelzen".
}
ITEM {
ScreenCoords = 160,30,180,40
MouseOverLabel = "Schalter"
USE_ACTION {
F15 : "Der Herd ist jetzt wieder ausgeschaltet." => F15 = 1
!F15 : "Schalter betätigt. Der Herd ist eingeschaltet." => F15 = 0
}
LOOKING_DESC {
Comment = "Eine Küche mit Elektroherd. Scheint aus den 50er-Jahren" \
"zu stammen. Ausserdem hängt die Decke herunter. Hoffentlich stürzt" \
"das Haus nicht gleich über meinem Kopf zusammen."
} |
d.h. Du definierst eine eigene Syntax, für welche Du in QB eine entsprechende Dateieinleseroutine programmierst, welche diese auswertet und die notwendigen (Feld-)Variablen setzt, so dass als Beispiel der Mauszeiger auch tatsächlich beim Bewegen die entsprechenden Texte ins Bild einblendet, wenn der Spieler mit der Maus auf einen Gegenstand fährt.
Noch ein gut gemeinter Profitipp, damit die Gegenstandverwaltung konzeptionell einfach bleibt: Statt mit Zustandsvariablen bei einzelnen Gegenständen herumhantieren lieber ein neuer Gegenstand erzeugen. Beispielsweise Gegenstand "leerer Blumentopf" und "Beutel mit Erde" definieren, und wenn der Spieler "Benutzer Beutel mit Erde mit leerer Blumentopf" klickt, lässt Du verwaltungstechnisch diese beiden Gegenstände einfach "verschwinden" und machst daraus ein völlig neuer Gegenstand "gefüllter Blumentopf".
Im Interesse von Einfachheit der Umsetzung für Dich würde ich beispielsweise auf Gespräche ("Rede mit") vollständig verzichten, weil die ganze Sache mit der Dialogführung/Gesprächsverlauf, Flags setzen usw. ein umfangreicheres Subprojekt für sich gäbe. => Lege Dich also auf möglichst wenige, aber genügend mächtige Grundfunktionalitäten für diese Adventure-Engine fest und programmiere dafür diese vollständig aus.
/edit: Inzwischen das Ganze einmal kurz ausprobiert:
St_W hat Folgendes geschrieben: | Ich persönlich finde das Spiel bis jetzt schon sehr gut gelungen und freue mich auf die Fertigstellung! |
=> da kann ich mich voll anschliessen! d.h. was die Kreativität betrifft, wirklich 1a und braucht sich überhaupt nicht hinter einem LucasFilm-Adventureklassiker zu verstecken. :-))
Da wäre es wirklich schön, wenn der Software-Design dem kreativen Teil ebenbürtig wäre, d.h. Dein Spielkonzept ruft geradezu nach einer derartigen QB-"SCUMM Lite"-Engine... ;-) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
T1m0

Anmeldungsdatum: 24.05.2008 Beiträge: 19
|
Verfasst am: 29.05.2008, 22:01 Titel: |
|
|
Das hört sich gut an und wenn ich drüber nachdenke, denke ich, dass es durchaus positive Seiten haben wird. (z.b. jederzeit veränderbar, auch manuell und Schnell!).
Ich denke ich werde das Programm splitten. Das was ich bisher geschrieben habe, will ich nicht so einfach jetzt komplett umändern. Von daher wird der zweite Teil etwas "fortgeschrittener".
Wer weiß vielleicht entwickle ich ja für euch eine Adventure Engine. Aber das soll dann bitte ins Qbasic Handbuch aufgenommen werden *g*
gruß T1m0 |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|