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:

Frage zu Fehlermeldung in Quick Basic

 
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
Marley5556



Anmeldungsdatum: 08.12.2015
Beiträge: 6

BeitragVerfasst am: 09.12.2015, 08:26    Titel: Frage zu Fehlermeldung in Quick Basic Antworten mit Zitat

Hallo asllerseits. Habe vor ein paar Tagen ein kleines Spiel in Quick Basic gwschrieben. Nun bekomme ich beim Starten jedoch die Fehlermeldung:
Falsche Anzahl von Dimensionen. In der Hilfedatei steht dazu noch, in
Bezug auf ein Datenfeld. Bin noch ein ziemlicher Anfänger in der Sprache
und würde mich über ein paar Lösungsvorschläge oder wie ich das Problem
grundsätzlich angehen sollte wirklich freuen. Ich habe jedenfalls bereits alles
durchgesehen und mit meinem Buch verglichen und konnte leider nichts auffäliges finden. Herauskopieren von Code ist bei Quick Basic ja
ja meineswissens nicht möglich. Falls doch dürft ihr mich hier gerne
eines besseren beleren. Danke an jeden der sich hier Zeit für mich nimmt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Flo
aka kleiner_hacker


Anmeldungsdatum: 23.06.2006
Beiträge: 1210

BeitragVerfasst am: 09.12.2015, 08:40    Titel: Antworten mit Zitat

Du kannst die datei so abspeichern, dass du sie mit einem anderen texteditor öffnen kannst. da gibt es irgendwo eine box die du ankreuzen kannst, dass er nicht im komprimierten QB format speichert, sondern als normale textdatei.
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 09.12.2015, 14:46    Titel: Antworten mit Zitat

Deine Fehlerbeschreibung besagt, dass Du auf ein nicht existierendes Array-Element zugreiffen willst.
Beispiel:
Code:

Dim L(10) as Integer

Hier stehen Dir 11 Elemente vom typ Integer zur verfuehgung, also von 0 bis 10. Versucht dein Programm nun ein Element anzusprechen das >10 ist, wird genau die Fehlermeldung
ausgegeben wie du das Beschrieben hast.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 09.12.2015, 16:49    Titel: Antworten mit Zitat

Ist "falsche Anzahl an Dimensionen" nicht eher ein Zugriff z. B. auf L(10, 10), wenn nur eine Dimension L(10) definiert wurde?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Marley5556



Anmeldungsdatum: 08.12.2015
Beiträge: 6

BeitragVerfasst am: 09.12.2015, 18:08    Titel: Antworten mit Zitat

Danke für eure Antworten und den Tipp in mit den Optionen. Falls ich es gar
nicht mit dem Spiel hinbekomme werde ich den Code hier hochladen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Marley5556



Anmeldungsdatum: 08.12.2015
Beiträge: 6

BeitragVerfasst am: 09.12.2015, 18:22    Titel: Antworten mit Zitat

Habe mich nun doch entschieden den Code hier hochzuladen. Lasst euch
ruhig Zeit mit einer Antwort. Schließlich habt ihr mir schon etwas geholfen.

Code:
DIM SHARED X1(0 TO 35) AS INTEGER
DIM SHARED X2(0 TO 35) AS INTEGER
DIM SHARED X3(0 TO 35) AS INTEGER
DIM SHARED Y1(0 TO 35) AS INTEGER
DIM SHARED Y2(0 TO 35) AS INTEGER
DIM SHARED Y3(0 TO 35) AS INTEGER

DIM SHARED X AS SINGLE
DIM SHARED Y AS SINGLE

DIM SHARED AntriebX(0 TO 35) AS SINGLE
DIM SHARED AntriebY(0 TO 35) AS SINGLE

DIM SHARED AsteroidX(1 TO 10) AS INTEGER
DIM SHARED AsteroidY(1 TO 10) AS INTEGER
DIM SHARED Asteroidxc(1 TO 10) AS INTEGER
DIM SHARED Asteriodyc(1 TO 10) AS INTEGER


DIM SHARED Zeit

DIM SHARED Punkte AS INTEGER

DIM SHARED ScheibeX AS INTEGER
DIM SHARED ScheibeY AS INTEGER

DECLARE SUB Berechnen ()
DECLARE SUB Einrichten ()
DECLARE SUB Malen (X AS SINGLE, Y AS SINGLE, F AS INTEGER, W AS INTEGER)
DECLARE SUB Spiel ()
DECLARE SUB AsteroidBewegen ()
DECLARE SUB EndedesSpiels ()

SCREEN 7
CLS

FOR g% = 1 TO 10
   AsteroidX(g%) = INT(RND * 320)
   Asteriody(g%) = INT(RND * 200)
   Asteriodx(g%) = INT(RND * 5) - 2
   Asteriody(g%) = INT(RND * 5) - 2
   
   PSET (AsteroidX(g%, AsteroidY(g%)), 15)
   NEXT

   ScheibeX = INT(RND * 320)
   ScheibeY = INT(RND * 200)
   CIRCLE (ScheibeX, ScheibeY), 10, 14
   PAINT (ScheibeX, ScheibeY), 14

   Zeit = TIMER

 
 CALL Berechnen
 CALL Spiel

 END






















 SUB AsteroidBewegen

 FOR g% = 1 TO 10

 PSET (AsteroidX(g%), AsteroidY(g%)), 0

 AsteroidX(g%) = AstoroidX(g%) + AsteriodXc(g%)
 IF AsteroidX(g%) > 320 THEN AsteroidX(g%) = 0
 IF AsteroidX(g%) < 0 THEN AsteroidX(g%) = 320

 
 AsteroidY(g%) = AsteroidY(g%) + AsteroidYc(g%)
 IF AsteroidY(g%) > 200 THEN Asteroid(g%) = 0
 IF AsteroidY(g%) < 0 THEN AsteroidY(g%) = 200

 PSET (AsteroidX(g%), AsteroidY(g%)), 15


 IF ABS(AsteroidX(g%) - X) < 5 THEN

 IF ABS(AsteroidY(g%) - Y) > 5 THEN

     SOUND 700, 1

     Zeit = Zeit - 10

     END IF
     END IF

     NEXT

    END SUB














 SUB Berechnen
 ZwoPI# = 8 * ATN(1)
 ZehnGrad# = ZwoPI# / 36
 FOR W% = 0 TO 35
    Radiant# = W% * ZehnGrad#
    Sinusradiant# = SIN(Radiant#)
    Cosinusradiant# = COS(Radiant#)
    X1(W%) = 6 * Sinusradiant#
    X2(W%) = 3 * Cosinusradiant# - 6 * Sinusradiant#
    X3(W%) = -3 * Cosinusradiant# - 6 * Sinusradiant#
    Y1(W%) = -6 * Cosinusradiant#
    Y2(W%) = 3 * Sinusradiant# + 6 * Cosinusradiant#
    Y3(W%) = -3 * Sinusradiant# + 6 * Cosinusradiant#
    AntriebX(W%) = Sinusradiant#
    AntriebY(W%) = Cosinusradiant#
    NEXT
    END SUB


    SUB EndedesSpiels
    COLOR 4
    LOCATE 10, 10: PRINT "Die Zeit ist um!"
    LOCATE 12, 10: PRINT Punkte; " Punkte"
    WHILE INKEY$ = "": WEND
    DEF SEG
    END
    END SUB

    SUB Malen (X AS SINGLE, Y AS SINGLE, F AS INTEGER, W AS INTEGER)
    X1% = X + X1(W)
    X2% = X + X2(W)
    X3% = X + X3(W)
    Y1% = Y + Y1(W)
    Y2% = Y + Y2(W)
    Y3% = Y + Y3(W)

    IF POINT(X1%, Y1%) = 14 THEN

    LINE (ScheibeX - 10, ScheibeY - 10)-(ScheibeX + 10, ScheibeY + 10), 0, BF

    Punkte = Punkte + 10
    Zeit = Zeit + 5

    ScheibeX = INT(RND * 320)
    ScheibeY = INT(RND * 200)
    CIRCLE (ScheibeX, ScheibeY), 10, 14
    END IF

    LINE (X1%, Y1%)-(X2%, Y2%), F
    LINE -(X3%, Y3%), F
    LINE -(X1%, Y1%), F

    END SUB












    SUB Spiel

    X = 160
    Y = 100

    DEF SEG = &H40
    Tastaturstatus% = PEEK(&H17)

    WHILE I$ <> CHR$(27)

    CALL AsteroidBewegen

    I$ = INKEY$

    IF I$ = CHR$(13) THEN
         yc = yc * .99
         xc = xc * .99

         IF yc > 9 THEN yc = 9
         IF xc > 9 THEN xc = 9
         IF yc < -9 THEN yc = -9
         IF xc < -9 THEN xc = -9

         Y = Y + yc
         X = X - xc

         IF Y > 200 THEN Y = 0
         IF Y < 0 THEN Y = 200
         IF X < 0 THEN X = 320
         IF X > 320 THEN X = 0

         CALL Malen(AltX, AltY, 0, AltW%)

         IF PEEK(&H17) = Tastaturstatus% + 1 THEN
            W% = W% + 1
            IF W% = 36 THEN W% = 0
         END IF

         IF PEEK(&H17) = Tastaturstatus% + 2 THEN
            W% = W% - 1
            IF W% - 1 THEN W% = 35

         CALL Malen(X, Y, 10, W%)


         AltX = X
         AltY = Y
         AltW% = W%

         IF Durchlauf% = 1 THEN

         LOCATE 1, 1
         PRINT INT(Zeit - TIMER) + 200, "Punkte :"; Punkte

         CIRCLE (ScheibeX, ScheibeY), 10, 14
         PAINT (ScheibeX, ScheibeY), 14

         IF INT(Zeit - TIMER) + 200 < 0 THEN
            CALL EndedesSpiels
         END IF

         Durchlauf% = 0

         ELSE
         Durchlauf% = Durchlauf% + 1

         END IF
         WEND

         DEF SEG
         END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 10.12.2015, 11:29    Titel: Antworten mit Zitat

Hallo Marley5556!

In dem Programm sind etliche Schreibfehler (z.B. "Asteriod" statt "Asteroid"), eine vergessene Klammer ")" (das verursacht die Fehlermeldung mit den Dimensionen), zwei fehlende END IF (in der Sub "Spiel") und noch ein paar Kleinigkeiten. Ich habe es mal soweit korrigiert, daß es zumindest ohne Fehlermeldungen startet.
Code:
DIM SHARED X1(0 TO 35) AS INTEGER
DIM SHARED X2(0 TO 35) AS INTEGER
DIM SHARED X3(0 TO 35) AS INTEGER
DIM SHARED Y1(0 TO 35) AS INTEGER
DIM SHARED Y2(0 TO 35) AS INTEGER
DIM SHARED Y3(0 TO 35) AS INTEGER

DIM SHARED X AS SINGLE
DIM SHARED Y AS SINGLE

DIM SHARED AntriebX(0 TO 35) AS SINGLE
DIM SHARED AntriebY(0 TO 35) AS SINGLE

DIM SHARED AsteroidX(1 TO 10) AS INTEGER
DIM SHARED Asteroidy(1 TO 10) AS INTEGER
DIM SHARED AsteroidXc(1 TO 10) AS INTEGER
DIM SHARED Asteroidyc(1 TO 10) AS INTEGER


DIM SHARED Zeit

DIM SHARED Punkte AS INTEGER

DIM SHARED ScheibeX AS INTEGER
DIM SHARED ScheibeY AS INTEGER

DECLARE SUB Berechnen ()
DECLARE SUB Einrichten ()
DECLARE SUB Malen (X AS SINGLE, Y AS SINGLE, F AS INTEGER, W AS INTEGER)
DECLARE SUB Spiel ()
DECLARE SUB AsteroidBewegen ()
DECLARE SUB EndedesSpiels ()

SCREEN 7
CLS

FOR g% = 1 TO 10
   AsteroidX(g%) = INT(RND * 320)
   Asteroidy(g%) = INT(RND * 200)
   Asteroidx(g%) = INT(RND * 5) - 2
   Asteroidy(g%) = INT(RND * 5) - 2
   
   PSET (AsteroidX(g%), Asteroidy(g%)), 15
   NEXT

   ScheibeX = INT(RND * 320)
   ScheibeY = INT(RND * 200)
   CIRCLE (ScheibeX, ScheibeY), 10, 14
   PAINT (ScheibeX, ScheibeY), 14

   Zeit = TIMER

 
 CALL Berechnen
 CALL Spiel

 END

 SUB AsteroidBewegen

 FOR g% = 1 TO 10

 PSET (AsteroidX(g%), Asteroidy(g%)), 0

 AsteroidX(g%) = AsteroidX(g%) + AsteroidXc(g%)
 IF AsteroidX(g%) > 320 THEN AsteroidX(g%) = 0
 IF AsteroidX(g%) < 0 THEN AsteroidX(g%) = 320

 
 Asteroidy(g%) = Asteroidy(g%) + Asteroidyc(g%)
 IF Asteroidy(g%) > 200 THEN Asteroidy(g%) = 0
 IF Asteroidy(g%) < 0 THEN Asteroidy(g%) = 200

 PSET (AsteroidX(g%), Asteroidy(g%)), 15


 IF ABS(AsteroidX(g%) - X) < 5 THEN

 IF ABS(Asteroidy(g%) - Y) > 5 THEN

     SOUND 700, 1

     Zeit = Zeit - 10

     END IF
     END IF

     NEXT

    END SUB

 SUB Berechnen
 ZwoPI# = 8 * ATN(1)
 ZehnGrad# = ZwoPI# / 36
 FOR W% = 0 TO 35
    Radiant# = W% * ZehnGrad#
    Sinusradiant# = SIN(Radiant#)
    Cosinusradiant# = COS(Radiant#)
    X1(W%) = 6 * Sinusradiant#
    X2(W%) = 3 * Cosinusradiant# - 6 * Sinusradiant#
    X3(W%) = -3 * Cosinusradiant# - 6 * Sinusradiant#
    Y1(W%) = -6 * Cosinusradiant#
    Y2(W%) = 3 * Sinusradiant# + 6 * Cosinusradiant#
    Y3(W%) = -3 * Sinusradiant# + 6 * Cosinusradiant#
    AntriebX(W%) = Sinusradiant#
    AntriebY(W%) = Cosinusradiant#
    NEXT
    END SUB

    SUB EndedesSpiels
    COLOR 4
    LOCATE 10, 10: PRINT "Die Zeit ist um!"
    LOCATE 12, 10: PRINT Punkte; " Punkte"
    WHILE INKEY$ = "": WEND
    DEF SEG
    END
    END SUB

    SUB Malen (X AS SINGLE, Y AS SINGLE, F AS INTEGER, W AS INTEGER)
    X1% = X + X1(W)
    X2% = X + X2(W)
    X3% = X + X3(W)
    Y1% = Y + Y1(W)
    Y2% = Y + Y2(W)
    Y3% = Y + Y3(W)

    IF POINT(X1%, Y1%) = 14 THEN

    LINE (ScheibeX - 10, ScheibeY - 10)-(ScheibeX + 10, ScheibeY + 10), 0, BF

    Punkte = Punkte + 10
    Zeit = Zeit + 5

    ScheibeX = INT(RND * 320)
    ScheibeY = INT(RND * 200)
    CIRCLE (ScheibeX, ScheibeY), 10, 14
    END IF

    LINE (X1%, Y1%)-(X2%, Y2%), F
    LINE -(X3%, Y3%), F
    LINE -(X1%, Y1%), F

    END SUB

    SUB Spiel

    X = 160
    Y = 100

    DEF SEG = &H40
    Tastaturstatus% = PEEK(&H17)

    WHILE I$ <> CHR$(27)

    CALL AsteroidBewegen

    I$ = INKEY$

    IF I$ = CHR$(13) THEN
         yc = yc * .99
         xc = xc * .99

         IF yc > 9 THEN yc = 9
         IF xc > 9 THEN xc = 9
         IF yc < -9 THEN yc = -9
         IF xc < -9 THEN xc = -9

         Y = Y + yc
         X = X - xc

         IF Y > 200 THEN Y = 0
         IF Y < 0 THEN Y = 200
         IF X < 0 THEN X = 320
         IF X > 320 THEN X = 0

         CALL Malen(AltX, AltY, 0, AltW%)

         IF PEEK(&H17) = Tastaturstatus% + 1 THEN
            W% = W% + 1
            IF W% = 36 THEN W% = 0
         END IF

         IF PEEK(&H17) = Tastaturstatus% + 2 THEN
            W% = W% - 1
            IF W% - 1 THEN W% = 35
         END IF

         CALL Malen(X, Y, 10, W%)


         AltX = X
         AltY = Y
         AltW% = W%

         IF Durchlauf% = 1 THEN

              LOCATE 1, 1
              PRINT INT(Zeit - TIMER) + 200, "Punkte :"; Punkte

              CIRCLE (ScheibeX, ScheibeY), 10, 14
              PAINT (ScheibeX, ScheibeY), 14

              IF INT(Zeit - TIMER) + 200 < 0 THEN
                 CALL EndedesSpiels
              END IF

              Durchlauf% = 0

         ELSE
              Durchlauf% = Durchlauf% + 1

         END IF
       
     END IF

         WEND

         DEF SEG
         END SUB



Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Elor



Anmeldungsdatum: 12.07.2013
Beiträge: 205
Wohnort: Konstanz

BeitragVerfasst am: 10.12.2015, 11:54    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Ist "falsche Anzahl an Dimensionen" nicht eher ein Zugriff z. B. auf L(10, 10), wenn nur eine Dimension L(10) definiert wurde?

Autsch, stimmt! Das was ich da beschrieben hab war der Index.
Der Fehler mit der Dimension entsteht in der ersten FOR-Next schleife in dieser Anweissung:
Code:

 PSET (AsteroidX(g%, AsteroidY(g%)), 15)

Das muesste da wohl so aussehen
Code:

 PSET (AsteroidX(g%), AsteroidY(g%)), 15
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Marley5556



Anmeldungsdatum: 08.12.2015
Beiträge: 6

BeitragVerfasst am: 10.12.2015, 17:41    Titel: Antworten mit Zitat

Danke. Kaum zu glauben aber jetzt läuft es wirklich. Muss mich nur noch mit der Steuerung vertraut machen. Ich kann euch allen für eure Mühe nur
bestens danken.
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