home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nederland Interaktief Kinderen
/
NLeduca.bin
/
NLEDUCA
/
DOOLHOF
/
MAAKDOOL.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-05
|
15KB
|
476 lines
DEFINT A-Z
DIM hor(36, 36) 'horizontalen streepjes aan(1) uit(0)
DIM ver(36, 36) 'verticalen streepjes aan(1) uit(0)
DIM Loper(1000) 'GET / PUT witte vakje
DIM Dolen1$(100) 'doolhoven 1
DIM Dolen2$(100) ' 2
DIM Dolen3$(100) ' 3
DIM dolen$(100) 'lijst waarmee gewerkt wordt
DIM sleutels(36, 36)
DIM Sleutel(1000) 'GET / PUT Sleutel
DIM Rondje(1000) 'GET / PUT Rondje
GOSUB Begin
GOSUB LijstDol
verder1:
GOSUB HoofdMenu
IF SpelNivo = 4 THEN END
IF nieuw$ = "j" THEN
GOSUB NieuwDol
ELSE
GOSUB TonenLijst 'laat doolhof kiezen
GOSUB LeesDol 'inlezen doolhof
END IF
GOSUB Scherm 'scherm opbouwen
DO
woord$ = INKEY$
SELECT CASE woord$
CASE IS = omhoog$, omlaag$, Rechts$, Links$
GOSUB PijltjesToetsen
CASE "b"
GOSUB Boven
CASE "o"
GOSUB Onder
CASE "l"
GOSUB Links
CASE "r"
GOSUB Rechts
CASE F1$
GOSUB F1
CASE F2$
GOSUB F2
CASE F3$
GOSUB F3
CASE esc$
GOSUB bewaren
END SELECT
LOOP UNTIL woord$ = esc$ OR EindeSpel = 1
GOTO verder1
'------------------------------------------------------------------------
Begin:
REM ---------------Begin akties van het programma---------
SCREEN 9
COLOR 15, 5 'witte voorgrond, roze achtergrond
omhoog$ = CHR$(0) + CHR$(72)
omlaag$ = CHR$(0) + CHR$(80)
Links$ = CHR$(0) + CHR$(75)
Rechts$ = CHR$(0) + CHR$(77)
F1$ = CHR$(0) + CHR$(59)
F2$ = CHR$(0) + CHR$(60)
F3$ = CHR$(0) + CHR$(61)
esc$ = CHR$(27)
CLS
RETURN
'--------------------------------------------------------------------------
bewaren:
LOCATE 20, 1
INPUT "Doolhof bewaren (j/n)"; bewaren$
bewaren$ = LCASE$(bewaren$)
IF (bewaren$ <> "j") THEN
INPUT "U weet het zeker"; zeker$
zeker$ = LCASE$(zeker$)
IF (zeker$ <> "j") THEN
GOTO bewaren
ELSE
GOTO eindebewaren
END IF
END IF
IF (nieuw$ = "j") THEN
IF (SpelNivo = 1) THEN
AantDolen1 = AantDolen1 + 1
Dolen1$(AantDolen1) = DoolNaam$
END IF
IF (SpelNivo = 2) THEN
AantDolen2 = AantDolen2 + 1
Dolen2$(AantDolen2) = DoolNaam$
END IF
IF (SpelNivo = 3) THEN
AantDolen3 = AantDolen3 + 1
Dolen3$(AantDolen3) = DoolNaam$
END IF
END IF
IF (SpelNivo = 1) THEN BestandsNaam$ = DoolNaam$ + "." + "DO1"
IF (SpelNivo = 2) THEN BestandsNaam$ = DoolNaam$ + "." + "DO2"
IF (SpelNivo = 3) THEN BestandsNaam$ = DoolNaam$ + "." + "DO3"
ON ERROR GOTO SchrijfFout
OPEN "o", #3, BestandsNaam$
WRITE #3, BeginX, BeginY, "b"
WRITE #3, EindeX, EindeY, "e"
FOR i = 0 TO aantvakjes
FOR j = 0 TO aantvakjes
IF (hor(i, j)) = 1 THEN WRITE #3, i, j, "0"
IF (ver(i, j)) = 1 THEN WRITE #3, i, j, "1"
IF (sleutels(i, j)) = 1 THEN WRITE #3, i, j, "s"
NEXT j
NEXT i
WRITE #3, 9, 9, 9
CLOSE #3
ON ERROR GOTO 0
eindebewaren:
RETURN
'--------------------------------------------------------------------------
Boven:
IF hor(LoperX, LoperY) = 1 THEN
LINE (LoperX * LengteX + 171, LoperY * LengteY + 12)-STEP(LengteX - 2, 0), 0
hor(LoperX, LoperY) = 0
ELSE
LINE (LoperX * LengteX + 171, LoperY * LengteY + 12)-STEP(LengteX - 2, 0)
hor(LoperX, LoperY) = 1
END IF
RETURN
'--------------------------------------------------------------------------
F1:
PUT (LoperX * LengteX + 171, LoperY * LengteY + 13), Sleutel
IF (sleutels(LoperX, LoperY) = 1) THEN
sleutels(LoperX, LoperY) = 0
ELSE
sleutels(LoperX, LoperY) = 1
END IF
RETURN
'--------------------------------------------------------------------------
F2:
LINE (BeginX * LengteX + 172, BeginY * LengteY + 14)-STEP(LengteX - 4, LengteY - 4), 0, B
BeginX = LoperX
BeginY = LoperY
PUT (LoperX * LengteX + 171, LoperY * LengteY + 13), Loper 'Zet loper op oude plaats
LINE (BeginX * LengteX + 172, BeginY * LengteY + 14)-STEP(LengteX - 4, LengteY - 4), , B
PUT (LoperX * LengteX + 171, LoperY * LengteY + 13), Loper 'Zet loper op nieuwe plaats
RETURN
'--------------------------------------------------------------------------
F3:
PUT (EindeX * LengteX + 171, EindeY * LengteY + 13), Rondje
EindeX = LoperX
EindeY = LoperY
PUT (EindeX * LengteX + 171, EindeY * LengteY + 13), Rondje
RETURN
'--------------------------------------------------------------------------
HoofdMenu:
CLS
PRINT "Maak een keuze (1, 2, 3 of 4)"
PRINT ""
PRINT " 1 Spelnivo 1, doolhof 20 x 20"
PRINT " 2 Spelnivo 2, doolhof 27 x 27"
PRINT " 3 Spelnivo 3, doolhof 36 x 36"
PRINT " 4 Einde programma"
PRINT
INPUT SpelNivo
IF SpelNivo < 1 THEN GOTO HoofdMenu
IF SpelNivo > 4 THEN GOTO HoofdMenu
REM ---------- Maakt alles dezelfde ----------
IF SpelNivo = 1 THEN
aantvakjes = 20
AantDolen = AantDolen1
FOR i = 1 TO AantDolen1
dolen$(i) = Dolen1$(i)
NEXT i
END IF
IF SpelNivo = 2 THEN
aantvakjes = 27
AantDolen = AantDolen2
FOR i = 1 TO AantDolen
dolen$(i) = Dolen2$(i)
NEXT i
END IF
IF SpelNivo = 3 THEN
aantvakjes = 36
AantDolen = AantDolen3
FOR i = 1 TO AantDolen
dolen$(i) = Dolen3$(i)
NEXT i
END IF
IF (SpelNivo <> 4) THEN
INPUT "Een nieuw doolhof maken (j/n)"; nieuw$
IF nieuw$ = "J" THEN nieuw$ = "j"
IF (nieuw$ = "j") THEN
IF (AantDolen > 99) THEN
PRINT
PRINT "Er zijn al meer dan 99 doolhoven van nivo"; SpelNivo
PRINT "Druk op een toets"
WHILE INKEY$ = ""
WEND
GOTO HoofdMenu
END IF
ELSE
IF (AantDolen < 1) THEN
PRINT
PRINT "Er zijn (nog) geen doolhoven van nivo"; SpelNivo
PRINT "Druk op een toets"
WHILE INKEY$ = ""
WEND
GOTO HoofdMenu
END IF
END IF
END IF
RETURN
'--------------------------------------------------------------------------
LeesFout:
PRINT "Fout bij lezen "; BestandsNaam$
PRINT "Druk op een knop voor programma einde"
WHILE INKEY$ = ""
WEND
END
'--------------------------------------------------------------------------
LeesDol:
ON ERROR GOTO LeesFout
BestandsNaam$ = DoolNaam$ + ".do1"
IF SpelNivo = 1 THEN BestandsNaam$ = DoolNaam$ + ".do1"
IF SpelNivo = 2 THEN BestandsNaam$ = DoolNaam$ + ".do2"
IF SpelNivo = 3 THEN BestandsNaam$ = DoolNaam$ + ".do3"
OPEN "i", #1, BestandsNaam$
REM ------ lezen lijst ----------
GOSUB LegeTabellen
FOR i = 1 TO 4000 'REM lees max 4000 regels van doolhof
IF EOF(1) THEN GOTO SluitenLijst
INPUT #1, x, y, wat$
IF wat$ = "9" THEN GOTO SluitenLijst 'REM een 9 in kolom 3 geeft einde aan
SELECT CASE wat$
CASE "0"
hor(x, y) = 1
CASE "1"
ver(x, y) = 1
CASE "s"
sleutels(x, y) = 1
CASE "b"
BeginX = x: BeginY = y
CASE "e"
EindeX = x: EindeY = y
END SELECT
NEXT i
SluitenLijst:
CLOSE #1
ON ERROR GOTO 0
RETURN
'--------------------------------------------------------------------------
LegeTabellen:
FOR i = 0 TO aantvakjes 'REM zet tabellen op leeg
FOR j = 0 TO aantvakjes
hor(i, j) = 0
ver(i, j) = 0
sleutels(i, j) = 0
NEXT j
NEXT i
RETURN
'--------------------------------------------------------------------------
LijstDol:
REM ----------- Maken en lezen lijst .DO? files ------------
ON ERROR GOTO LeesFout
BestandsNaam$ = "DOL.DIR"
SHELL "dir *.do? > dol.dir"
OPEN "i", #2, "dol.dir"
FOR i = 1 TO 350
IF EOF(2) THEN GOTO EindeLijstDo
INPUT #2, regel$
LENGTE = INSTR(1, regel$, " ")
IF MID$(regel$, 10, 3) = "DO1" THEN
IF (AantDolen1 < 100) THEN
AantDolen1 = AantDolen1 + 1
Dolen1$(AantDolen1) = LEFT$(regel$, LENGTE - 1)
END IF
END IF
IF MID$(regel$, 10, 3) = "DO2" THEN
IF (AantDolen2 < 100) THEN
AantDolen2 = AantDolen2 + 1
Dolen2$(AantDolen2) = LEFT$(regel$, LENGTE - 1)
END IF
END IF
IF MID$(regel$, 10, 3) = "DO3" THEN
IF (AantDolen3 < 100) THEN
AantDolen3 = AantDolen3 + 1
Dolen3$(AantDolen3) = LEFT$(regel$, LENGTE - 1)
END IF
END IF
NEXT i
EindeLijstDo:
CLOSE #2
ON ERROR GOTO 0
RETURN
'--------------------------------------------------------------------------
Links:
IF ver(LoperX, LoperY) = 1 THEN
LINE (LoperX * LengteX + 170, LoperY * LengteY + 13)-STEP(0, LengteY - 2), 0
ver(LoperX, LoperY) = 0
ELSE
LINE (LoperX * LengteX + 170, LoperY * LengteY + 13)-STEP(0, LengteY - 2)
ver(LoperX, LoperY) = 1
END IF
RETURN
'--------------------------------------------------------------------------
NieuwDol:
INPUT "Welke naam (max 8 posities)"; DoolNaam$
IF (LEN(DoolNaam$) > 8) OR (LEN(DoolNaam$) < 1) THEN
SOUND 400, 1
GOTO NieuwDol
END IF
DoolNaam$ = UCASE$(DoolNaam$)
FOR i = 1 TO aandolen
IF (dolen$ = DoolNaam$) THEN
PRINT "Naam bestaat al"
GOTO NieuwDol
END IF
NEXT i
GOSUB LegeTabellen
BeginX = 0
BeginY = 0
EindeX = aantvakjes - 1
EindeY = aantvakjes - 1
RETURN
'--------------------------------------------------------------------------
Onder:
IF hor(LoperX, LoperY + 1) = 1 THEN
LINE (LoperX * LengteX + 171, (LoperY + 1) * LengteY + 12)-STEP(LengteX - 2, 0), 0
hor(LoperX, LoperY + 1) = 0
ELSE
LINE (LoperX * LengteX + 171, (LoperY + 1) * LengteY + 12)-STEP(LengteX - 2, 0)
hor(LoperX, LoperY + 1) = 1
END IF
RETURN
'--------------------------------------------------------------------------
PijltjesToetsen:
REM ---------- Testen of verplaatsing in gewenste richting is toegestaan ----
IF woord$ = omhoog$ THEN
loperynieuw = LoperY - 1
loperxnieuw = LoperX
END IF
IF woord$ = omlaag$ THEN
loperynieuw = LoperY + 1
loperxnieuw = LoperX
END IF
IF woord$ = Rechts$ THEN
loperxnieuw = LoperX + 1
loperynieuw = LoperY
END IF
IF woord$ = Links$ THEN
loperxnieuw = LoperX - 1
loperynieuw = LoperY
END IF
IF loperxnieuw < 0 OR loperxnieuw > aantvakjes - 1 THEN GOTO verplaatserror
IF loperynieuw < 0 OR loperynieuw > aantvakjes - 1 THEN GOTO verplaatserror
REM -------- Haal loper weg op oude plaats ----------
PUT (LoperX * LengteX + 171, LoperY * LengteY + 13), Loper 'Zet loper op oude plaats
REM -------- Zet loper op nieuwe plaats -------
LoperX = loperxnieuw
LoperY = loperynieuw
PUT (LoperX * LengteX + 171, LoperY * LengteY + 13), Loper 'Zet loper op nieuwe plaats
GOTO eindepijltjes
verplaatserror:
BEEP
eindepijltjes:
RETURN
'--------------------------------------------------------------------------
Rechts:
IF ver(LoperX + 1, LoperY) = 1 THEN
LINE ((LoperX + 1) * LengteX + 170, LoperY * LengteY + 13)-STEP(0, LengteY - 2), 0
ver(LoperX + 1, LoperY) = 0
ELSE
LINE ((LoperX + 1) * LengteX + 170, LoperY * LengteY + 13)-STEP(0, LengteY - 2)
ver(LoperX + 1, LoperY) = 1
END IF
RETURN
'--------------------------------------------------------------------------
Scherm:
REM ------- Scherm opbouwen ------------------------------
EindeSpel = 0
SCREEN , , 1 'werk op andere scherm
IF SpelNivo = 1 THEN
PSET (6, 7)
DRAW "d3 r1 u2 r4 d1 r1 d1 r1 u1 r1 u3 l1 u1 l1 d1 l1 d1 l4"
LINE (102, 102)-(119, 114), , BF
CIRCLE (210, 208), 7
PAINT (210, 208), 15, 15
LengteX = 21
LengteY = 16
END IF
IF SpelNivo = 2 THEN
PSET (4, 5)
DRAW "d3 r1 u2 r4 d1 r1 d1 r1 u1 r1 u3 l1 u1 l1 d1 l1 d1 l4"
LINE (102, 102)-(114, 110), , BF
CIRCLE (208, 206), 5
PAINT (208, 206), 15, 15
LengteX = 16
LengteY = 12
END IF
IF SpelNivo = 3 THEN
PSET (2, 4)
DRAW "d3 r1 u2 r4 d1 r1 d1 r1 u1 r1 u3 l1 u1 l1 d1 l1 d1 l4"
LINE (102, 102)-(110, 107), , BF
CIRCLE (206, 204), 3
PAINT (206, 204), 15, 15
LengteX = 12
LengteY = 9
END IF
GET (1, 1)-(20, 15), Sleutel
GET (101, 101)-(120, 115), Loper
GET (201, 201)-(220, 215), Rondje
CLS
SCREEN , , 0
CLS
FOR i = 0 TO aantvakjes
FOR j = 0 TO aantvakjes
x = 170 + i * LengteX
y = 12 + j * LengteY
PSET (x, y)
IF hor(i, j) = 1 THEN LINE (x, y)-(x + LengteX, y)
IF ver(i, j) = 1 THEN LINE (x, y)-(x, y + LengteY)
IF sleutels(i, j) = 1 THEN PUT (x + 1, y + 1), Sleutel
NEXT j
NEXT i
LoperX = BeginX
LoperY = BeginY
IF SpelNivo = 1 THEN
LINE (BeginX * LengteX + 172, BeginY * LengteY + 14)-STEP(17, 12), , B
END IF
IF SpelNivo = 2 THEN
LINE (BeginX * LengteX + 172, BeginY * LengteY + 14)-STEP(12, 8), , B
END IF
IF SpelNivo = 3 THEN
LINE (BeginX * LengteX + 172, BeginY * LengteY + 14)-STEP(8, 5), , B
END IF
PUT (BeginX * LengteX + 171, BeginY * LengteY + 13), Loper
PUT (EindeX * LengteX + 171, EindeY * LengteY + 13), Rondje
LOCATE 3, 1
PRINT " ESC = Stoppen";
LOCATE 5, 1
PRINT " Pijltjes Toetsen"
LOCATE 6, 1
PRINT " = Verschuiven"
LOCATE 8, 1
PRINT " b = lijntje boven"
PRINT " o = lijntje onder"
PRINT " l = lijntje links"
PRINT " r = lijntje rechts"
PRINT
PRINT " F1 = sleutel"
PRINT " F2 = beginpunt"
PRINT " F3 = eindpunt"
LOCATE 18, 1
PRINT "Doolhof: "; DoolNaam$
RETURN
'--------------------------------------------------------------------------
SchrijfFout:
PRINT "Fout bij schrijven "; BestandsNaam$
PRINT "Druk op een knop voor programma einde"
WHILE INKEY$ = ""
WEND
END
'--------------------------------------------------------------------------
TonenLijst:
REM ----------- Tonen lijsten, vragen om keuze --------------
TekleinOfTegroot:
PRINT : PRINT "Kies een doolhof:": PRINT
TEL = 0
FOR i = 1 TO AantDolen
TEL = TEL + 1
PRINT TAB((TEL - 1) * 15); i; dolen$(i);
IF TEL = 5 THEN TEL = 0
NEXT i
PRINT : PRINT
INPUT "Welk doolhof ....."; DOOLKEUZE
IF DOOLKEUZE > AantDolen THEN PRINT "Te groot": GOTO TekleinOfTegroot
IF DOOLKEUZE < 1 THEN PRINT "Te klein": GOTO TekleinOfTegroot
DoolNaam$ = dolen$(DOOLKEUZE)
tonenlijsteinde:
RETURN