QBasic Probleme mit der Übergabe von Variablen

Von: , Frage gestellt am Mi, 23. Apr 2008

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.

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

5 Antworten zu dieser Frage

    • Antwort von nach einer Stunde 1 hilfreich
      Re^2: QBasic Probleme mit der Übergabe von Variabl

      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

      • Antwort von nach 3 Stunden 0 hilfreich
        Re^3: QBasic Probleme mit der Übergabe von Variabl

        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).

        • Antwort von nach 3 Tagen 0 hilfreich
          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

          • Antwort von nach 3 Tagen 0 hilfreich
            Re^5: QBasic Probleme mit der Übergabe von Variabl

            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

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!