home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Between Heaven & Hell 2
/
BetweenHeavenHell.cdr
/
100
/
23
/
dunmap.bas
< prev
next >
Wrap
BASIC Source File
|
1985-03-24
|
5KB
|
153 lines
10 'DUNMAP 'DRAW THE DUNGEON MAP
20 DEFINT A-Z
30 DIM S(10,2)
40 SCREEN 3
50 KEY OFF
60 WIDTH 20
70 COLOR 1,4
80 CLS
90 LOCATE 4,1
100 PRINT " THE"
110 LOCATE 7,1
120 PRINT " MAP"
130 'KILL TIME
140 SV.TIME! = TIMER + 5
150 IF TIMER < SV.TIME! THEN GOTO 150
160 'PRINT MENU
170 SCREEN 0
180 WIDTH 40
190 COLOR 0,2,2
200 CLS
210 LOCATE 3,1
220 PRINT " THE MAP"
230 PRINT: PRINT: PRINT:
240 PRINT "WARNING! THIS PROGRAM WILL ERASE"
245 PRINT "AND REPLACE"
250 PRINT "DUNGEON MAPS REQUIRED FOR PLAY"
260 PRINT "DO YOU WANT TO CONTINUE (Y/N)?"
270 GOSUB 780 'GET REPLY
280 IF REPLY$<>"Y" THEN CHAIN "MENU"
290 INPUT "ENTER MAP NUMBER ",MNO$
300 LET F$="DUNMAP"+MNO$
310 OPEN F$ FOR OUTPUT AS #1
320 PRINT "FIRST DRAW THE ROOM. WHEN FINISHED TYPE E"
330 PRINT "THEN NUMBER THE ROOMS AND TYPE E"
340 PRINT "ALL ROOMS MUST BE RECTANGULAR"
350 PRINT "THERE CAN BE 1-9 ROOMS "
360 PRINT "THE BOTTOM RIGHT MUST BE CLOSED"
370 PRINT " (WALL OR DOOR)"
380 PRINT "THE ENTRANCE MUST BE ON LEFT SIDE"
390 PRINT "NUMBER ROOMS BY LEVEL OF "
400 PRINT "DIFFICULTY"
410 LOCATE 25,1: PRINT "HIT ANY KEY TO CONTINUE";
420 GOSUB 780 'GET REPLY
430 GOSUB 450
440 GOTO 1020
450 'DRAW THE MAP
460 V=2: H=2
470 C=219
480 CLS
490 LOCATE 25,1: PRINT "W=WALL,D=DOOR,SPACE=ERASE";
500 LOCATE 2,2
510 SV.H=POS(0): SV.V=CSRLIN
520 PRINT CHR$(94);
530 LOCATE 2,2
540 'GET COMMANDS
550 IF REPLY$ = " " OR REPLY$ = "S" OR REPLY$ = "D" OR REPLY$ = "W" THEN GOTO 580
560 SV.H=POS(0): SV.V=CSRLIN
570 PRINT CHR$(94);
580 GOSUB 780
590 IF REPLY$ = " " THEN C=32: GOTO 540
600 IF REPLY$ = "D" THEN C=179: GOTO 540
610 IF REPLY$ = "W" THEN C=219: GOTO 540
620 IF REPLY$ = CHR$(30) THEN V=V-1
630 IF REPLY$ = CHR$(31) THEN V=V+1
640 IF REPLY$ = CHR$(28) THEN H=H+1
650 IF REPLY$ = CHR$(29) THEN H=H-1
660 IF H> 38 THEN V=V+1: H=2
670 IF H<2 THEN V=V-1: H=38
680 IF V<2 THEN V=23
690 IF V>23 THEN V=2
700 LOCATE SV.V,SV.H
710 IF C = 179 AND (REPLY$ = CHR$(28) OR REPLY$ = CHR$(29)) THEN C=196
720 IF REPLY$ = "E" THEN C=32
730 PRINT CHR$(C);
740 LOCATE V,H
750 IF REPLY$ = "E" THEN GOSUB 1070: GOSUB 890: GOTO 770
760 GOTO 540
770 RETURN
780 'GET COMMAND
790 REPLY$ = INKEY$
800 IF REPLY$ = "" THEN GOTO 790
810 IF LEN(REPLY$) = 1 THEN GOTO 880
820 IF LEFT$(REPLY$,1) <> CHR$(0) THEN GOTO 790
830 REPLY$=RIGHT$(REPLY$,1)
840 IF ASC(REPLY$) = 72 THEN REPLY$ = CHR$(30): GOTO 880
850 IF ASC(REPLY$) = 80 THEN REPLY$ = CHR$(31): GOTO 880
860 IF ASC(REPLY$) = 77 THEN REPLY$ = CHR$(28): GOTO 880
870 IF ASC(REPLY$) = 75 THEN REPLY$ = CHR$(29): GOTO 880
880 RETURN
890 'WRITE OUT MAP
900 S=1: CT=1: SV.C=32
910 FOR V=1 TO 24
920 FOR H = 1 TO 40
930 C=SCREEN(V,H)
940 IF C=25 THEN S(S,1) = V: S(S,2) = H: SMAX=S: S=S+1
950 IF C = SV.C THEN CT=CT+1: GOTO 980
960 WRITE #1,CT,SV.C
970 SV.C = C: CT=1
980 NEXT H
990 NEXT V
1000 WRITE #1,CT,SV.C
1010 RETURN
1020 'END OF JOB
1030 CLS
1040 WRITE #1,9999,9999
1050 CLOSE
1060 END
1070 'NUMBER THE ROOMS
1080 LOCATE 25,1
1090 PRINT SPACE$(38);
1100 LOCATE 25,1:
1110 PRINT "ENTER NUMBER AT UPPER LEFT OF EACH ROOM";
1120 LOCATE 1,2
1130 V=1: H=2
1140 'MOVE AND MARK
1150 SV.H = POS(0)
1160 SV.V = CSRLIN
1170 SV.C = SCREEN(SV.V,SV.H)
1180 PRINT CHR$(94)
1190 GOSUB 780
1200 IF REPLY$ > "0" AND REPLY$ < ":" THEN SV.C = ASC(REPLY$): GOSUB 1370: H = H+1
1210 IF REPLY$ = CHR$(30) THEN V=V-1
1220 IF REPLY$ = CHR$(31) THEN V=V+1
1230 IF REPLY$ = CHR$(28) THEN H=H+1
1240 IF REPLY$ = CHR$(29) THEN H=H-1
1250 IF H> 39 THEN V=V+1: H=2
1260 IF H<2 THEN V=V-1: H=38
1270 IF V<1 THEN V=24
1280 IF V>24 THEN V=1
1290 LOCATE SV.V,SV.H
1300 PRINT CHR$(SV.C);
1310 IF REPLY$ = "E" THEN GOTO 1340 'END
1320 LOCATE V,H
1330 GOTO 1140
1340 'END OF ROOMS
1350 WRITE #1,9999
1360 RETURN
1370 'GET CORD OF ROOM
1380 SV.ULV = V: SV.ULH = H
1390 CV=V:CH=H
1400 'FIND RIGHT SIDE
1410 CH=CH+1
1420 IF SCREEN(CV,CH) <> 219 AND SCREEN(CV,CH) <> 179 THEN GOTO 1400
1430 CH=CH-1
1440 'FIND BOTTOM
1450 CV=CV+1
1460 IF SCREEN(CV,CH) <> 219 AND SCREEN(CV,CH) <> 196 THEN GOTO 1440
1470 CH=CH+2
1480 SV.ULV=SV.ULV-1
1490 WRITE #1,SV.ULV,SV.ULH,CV,CH
1500 LOCATE V,H
1510 RETURN