Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Call stoppen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 25.05.2008, 00:07    Titel: Call stoppen Antworten mit Zitat

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 lächeln.

gruß T1m0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 25.05.2008, 10:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 25.05.2008, 11:21    Titel: Antworten mit Zitat

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. zwinkern

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 25.05.2008, 19:34    Titel: Antworten mit Zitat

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 lächeln

gruß T1m0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 25.05.2008, 19:37    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 25.05.2008, 20:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 25.05.2008, 23:36    Titel: Antworten mit Zitat

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. lachen

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 28.05.2008, 10:21    Titel: Antworten mit Zitat

@T1m0: Wäre es evtl. möglich, das ganze Projekt (es braucht noch .BMP-Dateien) als .ZIP-Datei auf Deinen Webspace hochzuladen, damit wir es ausprobieren und Dein Problem nachvollziehen können?

Sonst zum Thema Maus weiss ich nur so viel dazu: Du musst mit INT 33h/AX=0002h den Mauszeiger ausblenden, danach kannst Du nach Belieben zeichnen/Text mit PRINT ausgeben, anschliessend mit INT 33h/AX=0001h den Mauszeiger wieder einblenden.

Test/Demoprogramm zum Thema Mausprogrammierung von mir dazu:

http://beilagen.dreael.ch/QB/MAUSDEMO.BAS

Und ansonsten zwei praktische QB-Anwendungen mit Maus:

http://beilagen.dreael.ch/QB/mini_des.zip
http://beilagen.dreael.ch/QB/MALPROG2.ZIP
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 28.05.2008, 15:04    Titel: Antworten mit Zitat

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 lachen

gruß T1m0
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
b3ast



Anmeldungsdatum: 27.04.2008
Beiträge: 34

BeitragVerfasst am: 28.05.2008, 19:44    Titel: Antworten mit Zitat

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. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.05.2008, 19:47    Titel: Antworten mit Zitat

"quellcode to large"...nett happy

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 28.05.2008, 20:14    Titel: Antworten mit Zitat

ich benutze 7.1
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 28.05.2008, 20:19    Titel: Antworten mit Zitat

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 happy
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 28.05.2008, 21:35    Titel: Antworten mit Zitat

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ß zwinkern 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
Benutzer-Profile anzeigen Private Nachricht senden
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 28.05.2008, 23:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 29.05.2008, 10:59    Titel: Antworten mit Zitat

Ü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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
T1m0



Anmeldungsdatum: 24.05.2008
Beiträge: 19

BeitragVerfasst am: 29.05.2008, 22:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz