|
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 |
Marley5556
Anmeldungsdatum: 08.12.2015 Beiträge: 6
|
Verfasst am: 09.12.2015, 09:26 Titel: Frage zu Fehlermeldung in Quick Basic |
|
|
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 |
|
|
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 09.12.2015, 09:40 Titel: |
|
|
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 |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 09.12.2015, 15:46 Titel: |
|
|
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 |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4601 Wohnort: ~/
|
Verfasst am: 09.12.2015, 17:49 Titel: |
|
|
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 |
|
|
Marley5556
Anmeldungsdatum: 08.12.2015 Beiträge: 6
|
Verfasst am: 09.12.2015, 19:08 Titel: |
|
|
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 |
|
|
Marley5556
Anmeldungsdatum: 08.12.2015 Beiträge: 6
|
Verfasst am: 09.12.2015, 19:22 Titel: |
|
|
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 |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1213 Wohnort: Ruhrpott
|
Verfasst am: 10.12.2015, 12:29 Titel: |
|
|
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 |
|
|
Elor
Anmeldungsdatum: 12.07.2013 Beiträge: 205 Wohnort: Konstanz
|
Verfasst am: 10.12.2015, 12:54 Titel: |
|
|
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 |
|
|
Marley5556
Anmeldungsdatum: 08.12.2015 Beiträge: 6
|
Verfasst am: 10.12.2015, 18:41 Titel: |
|
|
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 |
|
|
|
|
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.
|
|