QBasic Probleme mit der Übergabe von Variablen

Hallo,

ich habe ein kleines Programm, genauer gesagt einen Editor für das Spiel „Schiffe versenken“ geschrieben bzw. bin gerade dabei. Allerdings gibt es ein paar Probleme mit dem Übergeben einer Variable. Der Code ist in QBasic geschrieben und ich will die Variable mit der Information der Position (geht von 1 bis 225 da ich 15x15 Felder habe) an eine weitere Variable übergeben, wenn ich die Leertaste gedrückt habe und ihr einen Wert geben (1 = gesetzt, 0=leeres Feld). Ich habe mir das in etwa so gedacht, vr(gesetzt) = 1 wobei gesetzt die übergebene Position ist und der Wert 1 aussagen soll, dass sich auf dieser Position ein Teil eines Schiffes befindet. Allerdings kommt bei mir immer ein Fehler, sobald ich das 2. Feld setzen möchte. Ich hoffe hier sind ein paar begeisterte QBasic Programmierer, die mir helfen können.
Ich bitte die Leute, die C bzw. C++ anbeten und total gegen QBasic sind, sich ihren Post zu sparen, es sei denn er bringt mich weiter. Informationen ala lern doch C bringen mich nicht weiter.

hier der Quellcode:
URL=[http://www.skt-ev.de/schiffe.zip]http://www.skt-ev.d…]

ups hier geht ja garkein vb code :smile:

hier der Quellcode:
http://www.skt-ev.de/schiffe.zip

Hallo Stefan,

Allerdings kommt bei mir immer ein Fehler,
sobald ich das 2. Feld setzen möchte.

ich kenne mich zwar mit QBasic nicht aus, aber mit scheint, das Problem liegt bereits in der 1. Codezeile:

posi = 1
DIM vr(posi) 'Variable f?r alle Spielfelder (225 St.)

Damit hat vr die Größe 1, und der Zugriff auf vr(2) verursacht einen Fehler.

Gruß,
Ralf

1 Like

ich kenne mich zwar mit QBasic nicht aus, aber mit scheint,
das Problem liegt bereits in der 1. Codezeile:

Du hast natürlich recht, das hätte ich selbst auch sehen können/müssen. Ich habe die Variable auf einen Wert beschränkt. Das habe ich jetzt ganz billig gelöst, indem ich den Wert ganz hoch (auf 225) gesetzt habe und mit meinem Kästchen zum Schiffe setzen von der linken oberen Ecke in die rechte untere Ecke umgezogen bin (von Kästchen 1 auf Kästchen 225).

Dass ich meinen Code noch optimieren muss, ist mir bewusst, doch er funktioniert bereits und das ohne Fehler (habe jedenfalls keinen entdeckt). Doch jetzt kommt das nächste Problem. Ich will den Code natürlich compilieren, denn nicht jeder hat QBasic drauf und das ist äußerst umständlich, vorallem für Leute die damit nix am Hut haben. Bein Compilieren kommt allerdings folgender Fehler:

http://www.skt-ev.de/qbxfehler.JPG

Ich werde daraus nicht schlau aber ich weiss, dass ich andere Programme comilieren kann.

Hier der Code:

0
CLEAR , , 0

'-----------------------------------------------------
posi = 225
DIM vr(posi) 'Variable f?r alle Spielfelder (225 St.)
'Vorlage/Editor

vr(posi) = 0
'-----------------------------------------------------

'Variablen f?r Spielfeld
spx = 33
spy = 95
spcol = 15
abstx = 0
absty = 0
nr = 1

'Variablen zum Schiffe setzen
'vx = spx + 2
vx = 259
'vy = spy + 2
vy = 321
vcol = 4

'Variable, die ?berpr?ft, wieviele Schiffe schon gesetzt wurden
schiffe = 0

CLS
SCREEN 12

'Zeichnen des Spielfeldes
FOR c = 1 TO 15
COLOR 4
LOCATE nr + 6, 1: PRINT nr
nr = nr + 1
NEXT c
LOCATE 6, 6: PRINT „A B C D E F G H I J K L M N O“
COLOR 15
FOR a = 1 TO 15
FOR B = 1 TO 15
LINE (spx + abstx, spy + absty)-(spx + abstx + 16, spy + absty + 16), spcol, B
absty = absty + 16
NEXT B
absty = 0
abstx = abstx + 16
NEXT a

LINE (vx, vy)-(vx + 12, vy + 12), vcol, B 'Rechteck zum Zeichnen der Schiffe

DO
LOCATE 1, 1: PRINT posi, schiffe, vr(posi)
IF schiffe = 12 THEN GOSUB abfr 'wenn alle 3 Schiffe gesetzt wurden wird eine Abfrage gemacht
a$ = INKEY$
IF a$ „“ THEN GOSUB con
LOOP

con:
SELECT CASE a$
CASE CHR$(27)
END
CASE CHR$(0) + „P“ 'RUNTER
IF vy spy + 2 THEN
LINE (vx, vy)-(vx + 12, vy + 12), 0, B
vy = vy - 16
posi = posi - 15
LINE (vx, vy)-(vx + 12, vy + 12), vcol, B
END IF
CASE CHR$(0) + „M“ 'RECHTS
IF vx spx + 2 THEN
LINE (vx, vy)-(vx + 12, vy + 12), 0, B
vx = vx - 16
posi = posi - 1
LINE (vx, vy)-(vx + 12, vy + 12), vcol, B
END IF
CASE SPACE$(1)
'---------- funzt schonmal optimal dieser Code !!! ------------
IF schiffe = 0 OR schiffe = 3 OR schiffe = 7 THEN
IF vr(posi) = 0 THEN
schiffe = schiffe + 1
END IF
LINE (vx, vy)-(vx + 12, vy + 12), 2, BF
vr(posi) = 1
END IF
IF schiffe > 0 AND schiffe 3 AND schiffe 7 THEN
IF posi > 16 AND posi 31 AND posi 46 AND posi 61 AND posi 76 AND posi 91 AND posi 106 AND posi 121 AND posi 136 AND posi 151 AND posi 166 AND posi 181 AND posi 196 AND posi 1 AND posi 211 AND posi „j“ THEN GOTO 7

FILES „*.txt“

namedatei:
LOCATE 20, 1
PRINT " "
LOCATE 20, 1
INPUT „Name der Datei?“, in$

CLOSE
OPEN in$ + „.txt“ FOR OUTPUT AS #1

FOR i = 1 TO 225

PRINT #1, vr(i)

NEXT i

CLOSE
GOTO 999
RETURN

fehler:

SELECT CASE ERR
CASE 52 'Bad file name or number.

CASE 53 'File not found.
RESUME NEXT
CASE 57 'Device I/O error.
LOCATE 21, 1: PRINT „You should probably format the diskette.“
END
CASE 64 'Bad File Name.
LOCATE 21, 1: PRINT „The drive name you specified was not correct.“
RESUME namedatei
CASE 68 'Device unavailable.
LOCATE 21, 1: PRINT „The drive you named is unavailable.“
END
CASE 71 'Drive not ready.
LOCATE 21, 1: PRINT „The drive was not ready. Check the drive!“
END
CASE ELSE
LOCATE 21, 1: PRINT „An unexpected FATAL error has occurred.“
STOP

END SELECT
RETURN

999
INPUT „Wollen Sie weitere Schiffe setzen? [J/N]“; ab$
IF ab$ = „j“ OR ab$ = „J“ THEN GOTO 0
IF ab$ = „n“ THEN END ELSE GOTO 999

Ich habe mich nochmal rangemacht und meine erste Betaversion des Spiels fertiggestellt. Das Spiel hört auf den Namen SHIP - SHOT (sehr originell, ich weiss aber mir ist nix anderes eingefallen).
Ihr könnt es euch hier downloaden. Bei Interesse lad ich auch gerne den Quellcode hoch.

www.skt-ev.de/shipshot.zip