Re^4: QBasic Probleme mit der Übergabe von Variabl
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 < 321 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) + "H" 'HOCH
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 < 259 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 CHR$(0) + "K" 'LINKS
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 OR schiffe > 3 AND schiffe < 7 OR schiffe > 7 THEN
IF posi > 16 AND posi < 30 OR posi > 31 AND posi < 45 OR posi > 46 AND posi < 60 OR posi > 61 AND posi < 75 OR posi > 76 AND posi < 90 OR posi > 91 AND posi < 105 THEN
IF vr(posi - 1) = 1 OR vr(posi + 1) = 1 OR vr(posi - 15) = 1 OR vr(posi + 15) = 1 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
END IF
IF posi > 106 AND posi < 120 OR posi > 121 AND posi < 135 OR posi > 136 AND posi < 150 OR posi > 151 AND posi < 165 OR posi > 166 AND posi < 180 OR posi > 181 AND posi < 195 OR posi > 196 AND posi < 210 THEN
IF vr(posi - 1) = 1 OR vr(posi + 1) = 1 OR vr(posi - 15) = 1 OR vr(posi + 15) = 1 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
END IF
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IF posi > 1 AND posi < 15 THEN
IF vr(posi - 1) = 1 OR vr(posi + 1) = 1 OR vr(posi + 15) = 1 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
END IF
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IF posi > 211 AND posi < 225 THEN
IF vr(posi - 1) = 1 OR vr(posi + 1) = 1 OR vr(posi - 15) = 1 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
END IF
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IF posi = 16 OR posi = 31 OR posi = 46 OR posi = 61 OR posi = 76 OR posi = 91 OR posi = 106 OR posi = 121 OR posi = 136 OR posi = 151 OR posi = 166 OR posi = 181 OR posi = 196 THEN
IF vr(posi + 1) = 1 OR vr(posi - 15) = 1 OR vr(posi + 15) = 1 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
END IF
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IF posi = 30 OR posi = 45 OR posi = 60 OR posi = 75 OR posi = 90 OR posi = 105 OR posi = 120 OR posi = 135 OR posi = 150 OR posi = 165 OR posi = 180 OR posi = 195 OR posi = 210 THEN
IF vr(posi - 1) = 1 OR vr(posi - 15) = 1 OR vr(posi + 15) = 1 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
END IF
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
IF posi = 1 THEN
IF vr(posi + 15) = 1 OR vr(posi + 1) = 1 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
END IF
IF posi = 15 THEN
IF vr(posi - 1) = 1 OR vr(posi + 15) = 1 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
END IF
IF posi = 211 THEN
IF vr(posi + 1) = 1 OR vr(posi - 15) = 1 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
END IF
IF posi = 225 THEN
IF vr(posi - 1) = 1 OR vr(posi - 15) = 1 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
END IF
END IF
'--------------------------------------------------------------
END SELECT
RETURN
abfr:
LOCATE 3, 1: INPUT "Alle Schiffe wurden gesetzt, ist ihre Eingabe richtig? [J/N] "; fr$
IF fr$ = "j" OR fr$ = "J" THEN GOSUB weiter
IF fr$ = "n" THEN GOTO 0 ELSE GOSUB abfr
weiter:
CLS
LOCATE 1, 2: PRINT vr(1); vr(2); vr(3); vr(4); vr(5); vr(6); vr(7); vr(8); vr(9); vr(10); vr(11); vr(12); vr(13); vr(14); vr(15)
LOCATE 2, 2: PRINT vr(16); vr(17); vr(18); vr(19); vr(20); vr(21); vr(22); vr(23); vr(24); vr(25); vr(26); vr(27); vr(28); vr(29); vr(30)
LOCATE 3, 2: PRINT vr(31); vr(32); vr(33); vr(34); vr(35); vr(36); vr(37); vr(38); vr(39); vr(40); vr(41); vr(42); vr(43); vr(44); vr(45)
LOCATE 4, 2: PRINT vr(46); vr(47); vr(48); vr(49); vr(50); vr(51); vr(52); vr(53); vr(54); vr(55); vr(56); vr(57); vr(58); vr(59); vr(60)
LOCATE 5, 2: PRINT vr(61); vr(62); vr(63); vr(64); vr(65); vr(66); vr(67); vr(68); vr(69); vr(70); vr(71); vr(72); vr(73); vr(74); vr(75)
LOCATE 6, 2: PRINT vr(76); vr(77); vr(78); vr(79); vr(80); vr(81); vr(82); vr(83); vr(84); vr(85); vr(86); vr(87); vr(88); vr(89); vr(90)
LOCATE 7, 2: PRINT vr(91); vr(92); vr(93); vr(94); vr(95); vr(96); vr(97); vr(98); vr(99); vr(100); vr(101); vr(102); vr(103); vr(104); vr(105)
LOCATE 8, 2: PRINT vr(106); vr(107); vr(108); vr(109); vr(110); vr(111); vr(112); vr(113); vr(114); vr(115); vr(116); vr(117); vr(118); vr(119); vr(120)
LOCATE 9, 2: PRINT vr(121); vr(122); vr(123); vr(124); vr(125); vr(126); vr(127); vr(128); vr(129); vr(130); vr(131); vr(132); vr(133); vr(134); vr(135)
LOCATE 10, 2: PRINT vr(136); vr(137); vr(138); vr(139); vr(140); vr(141); vr(142); vr(143); vr(144); vr(145); vr(146); vr(147); vr(148); vr(149); vr(150)
LOCATE 11, 2: PRINT vr(151); vr(152); vr(153); vr(154); vr(155); vr(156); vr(157); vr(158); vr(159); vr(160); vr(161); vr(162); vr(163); vr(164); vr(165)
LOCATE 12, 2: PRINT vr(166); vr(167); vr(168); vr(169); vr(170); vr(171); vr(172); vr(173); vr(174); vr(175); vr(176); vr(177); vr(178); vr(179); vr(180)
LOCATE 13, 2: PRINT vr(181); vr(182); vr(183); vr(184); vr(185); vr(186); vr(187); vr(188); vr(189); vr(190); vr(191); vr(192); vr(193); vr(194); vr(195)
LOCATE 14, 2: PRINT vr(196); vr(197); vr(198); vr(199); vr(200); vr(201); vr(202); vr(203); vr(204); vr(205); vr(206); vr(207); vr(208); vr(209); vr(210)
LOCATE 15, 2: PRINT vr(211); vr(212); vr(213); vr(214); vr(215); vr(216); vr(217); vr(218); vr(219); vr(220); vr(221); vr(222); vr(223); vr(224); vr(225)
SLEEP
'Ausgabe in Datei
LOCATE 20, 1
7
INPUT "Ausgabe in Datei? (j/n)", in$
IF in$ = "n" THEN END
IF in$ <> "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