 |
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 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 24.03.2008, 22:05 Titel: problem beim kompilieren |
|
|
hallole
ich hab ein problem mit meinem ersten kleine spielchen
wenn ich des mit quickbasic 4.5 in ne exe datei umgewandelt habe
und dann ausführe zeigt des mir an das der
irgendeine adresse net findet
wenn ichs direkt aus qbasic oder quickbasic rausstarte klappt´s perfekt
hat irgenjm. ne ahnung woran des liegt bzw. kanns mal kurz bei sich testen
gruß Jan |
|
Nach oben |
|
 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 24.03.2008, 22:06 Titel: |
|
|
So hier nun des hammers übel Programm^^:
Code: |
DECLARE SUB pause ()
DECLARE SUB gameover (pkt%)
DECLARE SUB plattform ()
DECLARE SUB hinten ()
DECLARE SUB kreis (x%, y%)
SCREEN 12
DIM SHARED bild%(201)
DIM SHARED bild2%(290)
DIM SHARED r%
DIM SHARED f%(4)
DIM SHARED gesch%
r% = 10
x% = 320
y% = 240
xp% = 320
yp% = 385
xr% = 1
yr% = -1
lvl% = 1
pkt% = 0
gesch% = 100
kreis 320, 240
plattform
hinten
PUT (xp%, yp%), bild2%, PSET
PUT (x%, y%), bild%, PSET
LOCATE 27, 5
PRINT "Der Ball darf nicht in den roten Bereich "
LOCATE , 5
PRINT "Bewege die Plattform links und rechts mit den Pfeiltasten, Ende = ESC"
SLEEP
DO
'-----kugel verschieben-----
x% = x% + xr%
y% = y% + yr%
'-----taste$ = Eingabe der Tastaur---
taste$ = INKEY$
SELECT CASE taste$
'------Plattform verschieben-----
CASE IS = CHR$(0) + CHR$(75)
xp% = xp% - 10
IF xp% < 20 THEN xp% = 20
CASE IS = CHR$(0) + CHR$(77)
xp% = xp% + 10
IF xp% > 520 THEN xp% = 520
CASE ELSE
END SELECT
PUT (xp%, yp%), bild2%, PSET
'------einlesen der Farben um den Kreis-----
f%(1) = POINT(x% + (r% + 16), y%)
f%(2) = POINT(x% - (r% - 8), y%)
f%(3) = POINT(x%, y% + (r% + 16))
f%(4) = POINT(x%, y% - (r% - 8))
'----testen ob Kreis etwas berhrt-----
IF f%(1) = 1 OR f%(2) = 1 THEN xr% = -xr%
IF f%(3) = 1 OR f%(4) = 1 THEN yr% = -yr%
IF f%(3) = 4 THEN gameover pkt%
'----einfgen des Kreises
PUT (x%, y%), bild%, PSET
'-----kleine Kunstpause-----
pause
'------Punktestabd erh”hen und berprfen----------
pkt% = pkt% + 1
IF pkt% = 30000 THEN
CLS
LOCATE 10, 8: PRINT "Winner"
CALL gameover(pkt%)
END IF
'-----zirkulieren bis ESC taste gedrckt wird-----
LOOP UNTIL taste$ = CHR$(27)
gameover pkt%
SUB gameover (pkt%)
CLS
LOCATE 10, 10
PRINT "Drck die Eingabetaste"
DO: LOOP UNTIL INKEY$ = CHR$(13)
LOCATE 10, 10
PRINT "Erreichte Punkte: "; pkt%
SLEEP
END
END SUB
SUB hinten
'Dieser Sub zeichnet den hintergrund
CLS
LINE (16, 12)-(624, 468), 1, B
PAINT (7, 6), 1, 1
LINE (0, 400)-(640, 400), 1
PAINT (300, 410), 4, 1
LINE (17, 400)-(623, 400), 4
END SUB
SUB kreis (x%, y%)
'Dieser Sub zeichnet einen Kreis und l„dt ihn in bild%
CIRCLE (x%, y%), r%, 2
PAINT (x%, y%), 2, 2
GET (x% - r% - 2, y% - r% - 2)-(x% + r% + 2, y% + r% + 2), bild%
CLS
END SUB
SUB pause
FOR i% = 1 TO gesch%
FOR t% = 1 TO gesch%
NEXT t%
NEXT i%
END SUB
SUB plattform
'Dieser Sub zeichnet die Bewegliche Plattform und liest sie in Bild2% ein
LINE (300, 395)-(380, 385), 1, BF
GET (290, 395)-(390, 385), bild2%
END SUB
|
|
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 24.03.2008, 22:24 Titel: |
|
|
Hi,
ich habe deinem Beitrag mal [ Code ]-Tags hinzugefügt zum besseren Lesen deines Programmes.
Da ich in deinem Programm keine Dateizugriffe entdecke kann es sich bei dem Adressen-Fehler eigentlich nur um das Fehlen der Brun45.exe handeln.
Du hast in dem "EXE Datei erstellen"-Dialog die Möglichkeit entweder eine Exe zu erstellen die die brun45.exe benötigt oder eine Exe zu erstellen die selbstständig läuft.
Setze in diesem Dialog das Kreuz bei "selbstständige exe" und kompiliere die Datei noch einmal. Danach sollte es dann funktionieren.
Falls es doch eher eine Windowsfehlermeldung ala "Adressenkonflikt" etc. sein sollte, dann bitte die Fehlermeldung posten, da diese natürlich mehr aussagt als "zeigt des mir an das der irgendeine adresse net findet".
MFG A.K. _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 24.03.2008, 22:42 Titel: |
|
|
thx für die schnelle antwort
ich hatte den haken bei selbständige exedatei
Ich arbeite unter Windows XP
Des is die Vollständige fehlermeldung(oder die ausgeschrieben form
von(zeigt des mir an das der irgendeine adresse net findet^^):
Code: | Unzulässiger Funktionaufruf in Modul Pong(so heißt mein Programm)
an Adresse 0736:0538 |
|
|
Nach oben |
|
 |
A.K.

Anmeldungsdatum: 02.05.2005 Beiträge: 467 Wohnort: HH
|
Verfasst am: 24.03.2008, 23:18 Titel: |
|
|
hm,
das machts natürlich schwerer.
Kannst du in deinem Programm noch eine kleine Funktion einbauen die überprüft ob deine y%-Koordinate wirklich immer innerhalb des Bildschirms ist?
Gerade bei den Put/Get-Anweisungen kann dies oft zu Problemen führen.
Ich kann das Programm momentan leider nicht testen da ich am falschen Rechner sitze.
MFG A.K. _________________
http://forum.IconSoft.de
http://www.pnpbb.de - hol dir jetzt dein eigenes kostenloses Forum *NEU* |
|
Nach oben |
|
 |
wolfjuli
Anmeldungsdatum: 06.03.2008 Beiträge: 50
|
Verfasst am: 24.03.2008, 23:20 Titel: |
|
|
Ich hab mir deinen Quellcode gerade nicht ganz genau durchgelesen, aber du kannst den Fehler wie folgt ermitteln:
Q(uick)BASIC mag es überhaupt nicht, wenn
1. Zwei mal die selbe Variable in verschachtelten FOR-Schleifen verwendet wird:
Code: | FOR a = 1 to 2
FOR a = 1 to 2
NEXT a
NEXT a |
2. Wenn du eine ON ERROR-Anweisung innerhalb eines IF-Blocks stehen Code: | hast:
IF a = 1 then
ON ERROR GOTO 20
END IF |
Wenn beides nicht in deinem Programm vorkommt, kannst du deinen Fehler wie folgt erruieren:
die erste Hex-Zahl (0736 in deinem Fall) sagt den "Namen" der SUB aus, d.h. du nimmst die FOR-Schleife die ich in Punkt 1 beschrieben habe, und fügst sie in eine SUB ein und kompilierst es. Der Compiler gibt dir einen Fehler (nämlich "FOR-Schleifenvariable bereits vergeben") aus, mit der Adresse. Sollten diese zwei Adressen jetzt übereinstimmen, weißt du in welcher SUB der Fehler liegt.
Die Zweite HEX-Zahl (0538 in deinem Fall) sagt die Zeilenummer (oder so ähnlich ) aus. Leider blicke ich bei dem System nicht ganz durch, wie der Compiler nummeriert. Damit du aber dem Fehler auf die schliche kommst, musst du vor den Befehlen, die dir suspekt vorkommen, die FOR-Schleife einfügen. Sollte sich irgendwann die Zeilenummer deines bisherigen Fehlers ändern, hasst du den Fehler gefunden.
Ich weiß ist recht kompliziert und zeitaufwändig. Wenn dir aber an dem Prog was liegt, dann probiers aus.
LG
Julian _________________ Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.03.2008, 00:10 Titel: |
|
|
Zitat: | Q(uick)BASIC mag es überhaupt nicht, wenn (...) |
Ein kurzer Blick auf das Listing zeigt, dass beides nicht auftaucht.
wolfjuli hat Folgendes geschrieben: | Die Zweite HEX-Zahl (0538 in deinem Fall) sagt die Zeilenummer (oder so ähnlich ) aus. Leider blicke ich bei dem System nicht ganz durch, wie der Compiler nummeriert. Damit du aber dem Fehler auf die schliche kommst, musst du vor den Befehlen, die dir suspekt vorkommen, die FOR-Schleife einfügen. Sollte sich irgendwann die Zeilenummer deines bisherigen Fehlers ändern, hasst du den Fehler gefunden. |
Das sind Speicheradressen. Nichts weiter. -_-
Nach kurzer zeit ist klar: das GET / PUT ist schuld. also mal schön nach jedem SUB-Aufruf einen breakpoint ( ) gesetzt und geschaut, was passiert. In deiner sub Kreis wird beim ersten aufruf das bild an einer position außerhalb des SCREEN-bereichs geGETet (-12, -12). _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
wolfjuli
Anmeldungsdatum: 06.03.2008 Beiträge: 50
|
Verfasst am: 25.03.2008, 00:20 Titel: |
|
|
Zitat: | Ein kurzer Blick auf das Listing zeigt, dass beides nicht auftaucht. |
Sry, wenn ich dir da wiederspreche. Jan91 hat als aller erstes gepostet:
Zitat: | wenn ich des mit quickbasic 4.5 in ne exe datei umgewandelt habe (...) |
_________________ Alles sollte so einfach wie möglich gemacht werden, aber nicht einfacher. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.03.2008, 00:24 Titel: |
|
|
Sry, wenn ich dir widerspreche (und zwar ohne e vor dem i), aber du liegst vollkommen falsch. Weder verschachtelte FOR-Schleifen mit gleicher varable noch ein einziges ON ERROR tauche auf. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 25.03.2008, 18:13 Titel: |
|
|
so der fehler hat mit dem Sub kreis zu tun
ich versteh nur nicht wieso der put befehl bei -12, -12 sein soll
bzw köntesch mir mal kurz sagen was ich ändern muss. _________________ Wer Rechtschreibfehler findet darf sie behalten. |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 25.03.2008, 20:43 Titel: |
|
|
Jojo hat Folgendes geschrieben: | In deiner sub Kreis wird beim ersten aufruf das bild an einer position außerhalb des SCREEN-bereichs geGETet (-12, -12). |
ehm, wie kommst du darauf oO?
die sub wird mit de parametern 320,240 aufgerufen
also wird von 320-10-2=308|240-10-2=228 bis 320+20+2=342|240+20+2=262 geGETet...
und ich schätze, 308|228 bis 342|262 liegt noch im screen-12-bereich...
was sein könnte, was ich schon öfter bemerkt habe...
wenn man die größe des arrays das die bilder aufnehmen soll nach qb's formel errechnet, funzt das manchmal (ziemlich oft bis immer bei mir sogar ) nicht...
wie wärs wenn du das bild-array einfach mal größer DIMst?
wenn du keinen akuten arbeitsspeichermangel hast, nimm mal das doppelte xD da kann man nix falsch machen...
und dann immer kleiner ranarbeiten
was evtl sein könnte, dass qb es nich leiden kann wenn du in unterschiedl. programmteilen die selbe variable benutzt, aber das ist eher unwahrscheinlich...
wie wärs wenn du in SUB kreis mal statische, dh vor dem compilen eingegebene koordinaten einprogrammierst?
kann das an XP liegen? wenn ja: dosbox.sourceforge.net
jojo: wehe es lag nicht an sub kreis, da schreib ich nen halbemn roman...  _________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 25.03.2008, 21:30 Titel: |
|
|
die bild arrays hab ich schon vorher vergrößert
is mir jetzt auch egal ich sch*** jetzt auf des programm
trotzdem danke an alle die sich die mühe gemacht haben _________________ Wer Rechtschreibfehler findet darf sie behalten. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.03.2008, 21:42 Titel: |
|
|
Flo: ich hab einfach nen PRINT-befehl eingefügt und das programm einfach kompiliert und ausgeführt. dann kam da -12,-12 raus. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 25.03.2008, 21:45 Titel: |
|
|
und falls ihr es mir immer noch nicht glaubt:
Code: | SUB kreis (x%, y%)
'Dieser Sub zeichnet einen Kreis und l„dt ihn in bild%
CIRCLE (x%, y%), r%, 2
PAINT (x%, y%), 2, 2
LOCATE 12, 1
PRINT "x=", x% - r% - 2
PRINT "y=", y% - r% - 2
GET (x% - r% - 2, y% - r% - 2)-(x% + r% + 2, y% + r% + 2), bild%
CLS
END SUB |
Das einfügen. Funktioniert im Runtime-Modus okay, im kompilierten Modus mit BRUN ist der Ball unsichtbar und im kompilierten Modus ohne BRUN stürzt das Programm ab und zeigt die Koordinaten an. Ich wette, es liegt an den Variablennamen... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
jan91
Anmeldungsdatum: 24.03.2008 Beiträge: 6
|
Verfasst am: 29.03.2008, 17:14 Titel: |
|
|
hab noch n bissle rumprobiert und es tut jetzt
ich vermute es lag an dem Sub auffruf "kreis 320,240"
hab ich jetzt abgeändet in "kreis x%,y%"
jetzt tut´s auf jeden fall
danke an alle die geantwortet haben
gruß jan _________________ Wer Rechtschreibfehler findet darf sie behalten. |
|
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.
|
|