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