Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- DECLARE SUB piples (h$)
- DECLARE SUB cube (s$(), n1, n2, n3, n4, m$, m1$, m2$)
- DECLARE SUB sets (s$, s1$, n2, mx)
- DECLARE SUB scrn (s$, s1$, n2, ff)
- DECLARE SUB cph (n1, n2)
- DECLARE SUB sy (m$, m1$, n)
- DECLARE SUB road (LOC$(), locx, locy, ddd$, nn)
- DECLARE SUB tree (LOC$(), locx, locy, d$, n)
- DECLARE SUB wr (h$, d$, x, y)
- DECLARE SUB hous (h$, f, r)
- DECLARE SUB wrh (h$, find$, lx, door, fin)
- DECLARE SUB opr (n, c$, n1, n2)
- DECLARE SUB prs (LOC$(), locx, locy, xx, yy, nx1, nx2, ny1, ny2, posx, posy, x, y, lll, col9)
- DECLARE SUB sp (n)
- DECLARE SUB sex (sex1, h1$, n2$, sx$)
- DECLARE SUB setwr (h$, n, d$, n1, n2)
- DECLARE SUB say (n$, n1$, n2$)
- DECLARE SUB wrl (u, d, l, r, c, LOC$(), locx, locy)
- DECLARE SUB sety (s$(), s1$, x, y, n, mx)
- RANDOMIZE TIMER
- CLEAR 2000000
- CLS
- col8 = 7
- DIM mon$(12), days(12)
- year = 679: mont = 3: day = 22
- min = 59: hour = 11: sec = 100
- DATA "Tetorus","Norhus","Mandra","Gorgad","Andrida","Ereston","Fongus","Rohus","Dearit","Cripfon","Kripos","Standor"
- DATA 26,25,26,26,25,26,25,26,26,25,26,26
- DATA 3,9,5,10,12,15,13
- FOR i = 1 TO 12: READ mon$(i): NEXT i
- FOR i = 1 TO 12: READ days(i): NEXT i
- FOR i = 1 TO 7: READ soon(i): NEXT i
- sw = 1
- SCREEN 0
- CLS
- NAME$ = "Jim"
- sex1 = 1
- GOTO m101
- locgen: nn1 = 2
- locx = 180
- locy = 60
- DIM LOC$(locy)
- FOR i = 1 TO locx: loc11$ = loc11$ + ".": NEXT i
- FOR j = 1 TO locy: LOC$(j) = loc11$: NEXT j
- npip = INT((RND * (locx * locy / 80)) + (locx * locy / 80))
- DIM pp$(npip, 3)
- mag = INT(((npip / 8)) / (RND * 2 + 4)) + 2
- DIM mg$(mag, nn1)
- taw = INT(npip / 60) + 1
- DIM tw(taw, nn1)
- hot = INT(((npip / 12)) / (RND * 2 + 5)) + 1
- DIM ht$(hot, nn1)
- hos = INT(npip / 4)
- DIM hs$(hos, nn1)
- enm = INT(npip * (RND * .5)) + 1
- DIM en$(enm, 2)
- itm = INT((npip / 5) * (RND * 2 + 2)) + 1
- ' DIM item$(itm, nn1)
- hra = INT(RND * 1.99): IF hra = 1 THEN DIM hram(5)
- cas = INT(RND * 1.99): IF cas = 1 THEN DIM casi(5)
- kld = INT(npip / (RND * 2 + 8))
- DIM kld$(kld)
- IF npip > 150 THEN wall = INT(RND * 1.99) + 4: GOTO wrwall
- IF npip > 120 THEN wall = INT(RND * 2.99) + 2: GOTO wrwall
- IF npip > 100 THEN wall = INT(RND * 2.99): GOTO wrwall
- IF npip > 70 THEN wall = INT(RND * 1.99): GOTO wrwall
- GOTO endwr
- m101: lll = 0
- posx = 1: posy = 1
- hp = 20
- GOSUB locgen
- DATA 2, -1, 5, -1, 7, 1, 10, 1
- nx1 = 16: nx2 = 79: ny1 = 4: ny2 = 22
- DIM kys(10), pr(20)
- s$ = ".": col = 8
- FOR i = 1 TO 20
- pr(i) = INT(RND * 100.99): NEXT i
- FOR i = 1 TO 4: READ ky1: READ kys(ky1): NEXT i
- n$ = "@"
- m100: wsh1 = INT(wsh / 60): wsh2 = (wsh / 60 - wsh1) * 60
- zhd1 = INT(zhd / 60): zhd2 = (zhd / 60 - zhd1) * 60
- nzet = -1.039: wsh = 462 - nzet: zhd = 1182 + nzet
- x = INT(RND * 40) + 26: y = INT(RND * 10) + 9
- dd$ = CHR$(SCREEN(y, x)): IF dd$ <> "." THEN GOTO m100
- COLOR 15
- LOCATE y, x: PRINT n$
- ink: sec = sec + 1: IF sec = 10001 THEN GOSUB status: sec = 1: min1 = min1 + 1: min = min + 1: IF min = 60 THEN min = 0: hour = hour + 1: IF hour = 24 THEN hour = 0: day = day + 1: min1 = 0: min2 = 0: min3 = 0: min4 = 0: min5 = 0: wsh = wsh + nzet: wsh1 = INT(wsh / 60): wsh2 = (wsh / 60 - wsh1) * 60: col8 = 1: zhd = zhd - nzet: zhd1 = INT(zhd / 60): zhd2 = (zhd / 60 - zhd1) * 60: IF day = days(mont) + 1 THEN mont = mont + 1: day = 0: IF mont = 13 THEN mont = 1: year = year + 1
- IF hour = wsh1 AND min = INT(wsh2) AND sec = 2 THEN min2 = min1: gg = 1
- min3 = min1 - min2: IF min3 / 10 = INT(min3 / 10) AND gg = 1 AND sec = 1 THEN col8 = col8 + 1: GOSUB prscr: IF min3 > 40 THEN gg = 0
- IF hour = zhd1 AND min = INT(zhd2) AND sec = 2 THEN min4 = min1: zz = 1
- min5 = min1 - min4: IF min5 / 10 = INT(min5 / 10) AND zz = 1 AND sec = 2 THEN col8 = col8 - 1: GOSUB prscr: IF min5 > 40 THEN zz = 0
- IF hour = wsh1 + 3 AND min = INT(wsh2) AND sec = 2 THEN col8 = 7: GOSUB prscr
- IF hour = zhd1 + 2 AND min = INT(zhd2) AND sec = 2 THEN col8 = 1: GOSUB prscr
- IF monh = 6 OR monh = 12 AND day = 22 THEN nzet = -nzet
- a$ = INKEY$
- IF a$ = "q" THEN END
- IF a$ = "s" THEN RUN
- IF LEN(a$) = 2 THEN a1$ = RIGHT$(a$, 1): a1 = ASC(a1$) ELSE GOTO ekey
- IF a1 = 72 OR a1 = 80 THEN dy = kys(a1 - 70)
- IF a1 = 75 OR a1 = 77 THEN dx = kys(a1 - 70)
- ekey: IF a$ = "" THEN GOTO ink
- xx1 = x + dx1: yy1 = y + dy1
- xx = x + dx: yy = y + dy
- s1$ = s9$: s9$ = CHR$(SCREEN(yy, xx))
- IF dx <> 0 OR dy <> 0 THEN s8$ = CHR$(SCREEN(yy, xx))
- IF s9$ >= "0" AND s9$ <= "9" THEN GOSUB opros: GOTO g00
- IF a$ = "w" THEN sw = -sw
- IF sw = -1 THEN LOCATE 1, 1: PRINT " s8:" + s8$ + "s:" + s$ + " s9:" + s9$ + " ss:" + ss$ + " s1:" + s1$ + " a:" + a$ + " "
- IF s9$ = "+" OR s9$ = "#" OR s9$ >= "@" AND s9$ <= "Z" OR s9$ >= "a" AND s9$ <= "z" OR s9$ > "Ї" THEN dx = 0: dy = 0: IF ld = 0 THEN ld = 1: PLAY "n0l64": hp = hp - .01: 'CALL sy("rg s n", so$, pr(1)): LOCATE 1, 1: PRINT name$ + ": " + so$: GOSUB status
- IF s9$ = " " THEN dx = 0: dy = 0: ON locnn GOSUB endho
- g00: IF s8$ = "<" AND a$ = "<" THEN ador = 1: ON locnn GOSUB hofl: ador = 0
- IF s8$ = ">" AND a$ = ">" THEN ador = -1: ON locnn GOSUB hofl: ador = 0
- IF s8$ = "+" AND a$ = "o" THEN ON locnn GOSUB hodoor
- IF dx <> 0 OR dy <> 0 THEN ld = 0
- IF xx < nx1 OR xx > nx2 THEN lll = 1: GOSUB prscr: lll = 0: dx = 0
- IF yy < ny1 OR yy > ny2 THEN lll = 2: GOSUB prscr: lll = 0: dy = 0
- LOCATE y, x: COLOR soon(col8): PRINT s$
- x = x + dx: y = y + dy
- IF dx <> 0 OR dy <> 0 THEN : ss$ = s$
- s$ = CHR$(SCREEN(y, x))
- LOCATE y, x: COLOR 15: PRINT n$
- dx1 = dx: dx = 0: dy1 = dy: dy = 0
- ink2: GOTO ink
- wrwall: IF wall = 5 THEN nn$ = "±": nnr = 0: GOTO begwr
- IF wall = 4 THEN nn$ = "°": nnr = .08: GOTO begwr
- IF wall = 3 THEN nn$ = "І": nnr = .18: GOTO begwr
- IF wall = 2 THEN nn$ = "І": nnr = .35: GOTO begwr
- IF wall = 1 THEN nn$ = "^": nnr = .56: GOTO begwr
- begwr: FOR i = 1 TO locy
- lx = INT(RND * 1.99) + 2: nn1$ = nn$
- IF RND < nnr THEN IF RND < nnr THEN nn1$ = "^": ELSE nn1$ = "."
- CALL sets(LOC$(i), nn1$, lx, locx)
- lx1 = INT(RND * 1.99) + 2: nn2$ = nn$
- IF RND < nnr THEN IF RND < nnr THEN nn2$ = "^": ELSE nn2$ = "."
- CALL sets(LOC$(i), nn2$, locx - lx1, locx)
- NEXT i
- FOR i = 1 TO locx
- nny1 = 1: nn1$ = nn$
- IF RND > .5 THEN nny1 = 2
- IF RND < nnr THEN IF RND < nnr THEN nn1$ = "^": ELSE nn1$ = "."
- CALL sets(LOC$(nny1), nn1$, i, locx)
- nny2 = locy
- IF RND > .5 THEN nny2 = locy - 1:
- nn2$ = nn$
- IF RND < nnr THEN IF RND < nnr THEN nn2$ = "^": ELSE nn2$ = "."
- CALL sets(LOC$(nny2), nn2$, i, locx)
- NEXT i
- CALL wrl(6, 3, 4, 5, 0, LOC$(), locx, locy)
- endwr: ' „ Ћ ђ Ћ ѓ €
- CH$ = CHR$(249): CH$ = CH$ + CH$ + CH$ + CH$ + CH$ + CH$
- 'ch$ = "ъъъъъъ"
- 'CALL road(loc$(), locx, locy, CH$, .35)
- IF hra = 0 THEN GOTO en
- LET magx = 10 + INT((RND * 2.99) / 2) * 2
- LET magy = 6
- sym$ = "О": 's12$ = CHR$(ASC("A"))
- CALL cube(LOC$(), magx, magy, locx, locy, "І", sym$, "І")
- hs$(1, 1) = "n" + sym$ + s12$
- en: ' ‹ ћ „ €
- FOR j = 1 TO npip
- CALL piples(pp$(i, 1))
- NEXT j
- ' Њ Ђ ѓЂ ‡ € Ќ ›
- FOR j = 1 TO mag
- LET magx = INT(((RND * 5) + 4) / 2) * 2
- LET magy = 2: s12$ = CHR$(ASC("A") + j - 1)
- sym$ = "1"
- CALL cube(LOC$(), magx, magy, locx, locy, "±", sym$, s12$)
- mg$(j, 1) = "n" + sym$ + s12$
- NEXT j
- ' ’ Ђ ‚ … ђ Ќ ›
- FOR j = 1 TO taw
- LET magx = 6: s12$ = CHR$(ASC("A") + j - 1)
- LET magy = 2
- sym$ = "5"
- CALL cube(LOC$(), magx, magy, locx, locy, "Ы", sym$, s12$)
- tw$(j, 1) = "n" + sym$ + s12$
- NEXT j
- ' Ћ ’ … ‹ €
- FOR j = 1 TO hot
- LET magx = 8: s12$ = CHR$(ASC("A") + j - 1)
- LET magy = 4
- sym$ = "2"
- CALL cube(LOC$(), magx, magy, locx, locy, "°", sym$, s12$)
- ht$(j, 1) = "n" + sym$ + s12$
- NEXT j
- ' „ Ћ Њ Ђ
- FOR j = 1 TO hos
- LET magx = 4
- LET magy = 2
- sym$ = "0": s12$ = CHR$(ASC("!") + j - 1)
- CALL cube(LOC$(), magx, magy, locx, locy, "°", sym$, s12$)
- hs$(j, 1) = s12$
- CALL hous(hs$(j, 2), INT(RND * 3) + 2, INT(RND * .35) + .65)
- NEXT j
- xnn1: CALL tree(LOC$(), locx, locy, CHR$(6), .25)
- CALL tree(LOC$(), locx, locy, CHR$(5), .2)
- CALL tree(LOC$(), locx, locy, CHR$(24), .2)
- CALL tree(LOC$(), locx, locy, ",", .45)
- col9 = 15
- GOSUB prscr
- RETURN
- prscr: IF locnn <> 0 THEN ON locnn GOSUB opros11: RETURN
- CLS
- GOSUB status
- IF no = 0 THEN CALL prs(LOC$(), locx, locy, xx, yy, nx1, nx2, ny1, ny2, posx, posy, x, y, lll, soon(col8))
- RETURN
- endg:
- RUN
- opros: ON VAL(s9$) + 1 GOSUB opros1
- RETURN
- opros1: PRINT xx, yy, dx, dy
- nh$ = CHR$(SCREEN(yy + dy, xx + dx + dx))
- PRINT " "; nh$
- FOR i = 1 TO hos
- IF hs$(i, 1) = nh$ THEN ri = i: GOTO opros11
- NEXT i
- opros11: CLS : GOSUB status
- COLOR soon(col8)
- CALL wrh(hs$(ri, 2), "", lx, door, fin)
- locnn = 1
- ox = x - dx: oy = yy - dy
- s09$ = s9$
- x = lx - 1: y = 8
- RETURN
- endho: IF sec < sec1 THEN CALL sp(2): RETURN
- x = ox: y = oy: s9$ = s09$: locnn = 0
- CLS
- GOSUB status
- CALL prs(LOC$(), locx, locy, xx, yy, nx1, nx2, ny1, ny2, posx, posy, x, y, lll, soon(col8))
- RETURN
- hofl: LOCATE 1, 1
- IF ador = 1 THEN CALL sex(sex1, " бЇгбвЁ«бп", " бЇгбвЁ« бм", sx$): ELSE CALL sex(sex1, " Ї®¤п«бп", " Ї®¤п« бм", sx$)
- CALL sp(3)
- CALL wrh(hs$(ri, 2), "f", g12, g13, fin): IF g12 < 2 AND ador = 1 THEN g12 = 2: GOTO hhhh
- CALL wrh(hs$(ri, 2), "r", g13, g14, fin): IF g12 > g13 AND ador = -1 THEN g12 = g13: GOTO hhhh
- CALL setwr(hs$(ri, 2), 2, "f", g12 + (-ador), 0)
- flor1$ = " ўлиҐ."
- IF ador = 1 THEN flor1$ = " Ё¦Ґ."
- PRINT " " + NAME$ + sx$ + " нв ¦Ґ¬ "; flor1$
- COLOR soon(col8): find$ = ""
- hhhh: CALL wrh(hs$(ri, 2), find$, lx, door, fin)
- s$ = find$: s8$ = find$
- RETURN
- hodoor: CALL sex(sex1, " pushed", " pushed", sx$)
- LOCATE 1, 1: CALL sp(3)
- door1: PRINT " " + NAME$ + sx$ + " door";
- IF door = 1 THEN CALL say(", and door opened.", ", and door was open.", ", and door opened."): GOTO ll4
- IF door = 2 THEN IF RND < .9 THEN CALL say(" door didn't open", " door didn't open", " door didn't open"): PLAY "n12l64": ELSE CALL sp(3): door = 1: GOTO door1
- IF door = 3 THEN CALL say(", but door was lock.", ", but door was lock.", ", but door was lock.")
- ll4: COLOR soon(col8)
- CALL wrh(hs$(ri, 2), "d", g12, g13, fin)
- IF door = 1 THEN CALL setwr(hs$(ri, 2), fin, "d", 0, 0): PLAY "n12l64"
- CALL wrh(hs$(ri, 2), "", lx, door, fin)
- status: COLOR 13
- LOCATE 7, 3: PRINT "HP:"; INT(hp)
- 'LOCATE 4, 3: PRINT "px:"; posx
- 'LOCATE 5, 3: PRINT "py:"; posy
- 'LOCATE 6, 3: PRINT "ly:"; locy
- LOCATE 4, 3: PRINT year; " year"
- LOCATE 5, 3: PRINT mon$(mont) + ","; day; " ";
- LOCATE 6, 3: PRINT hour; ":"; min; " "
- COLOR soon(col8)
- RETURN
- dx = 1
- rn = RND:
- IF rn < .2 THEN dx = -1
- IF nx < lk AND rn < .9 THEN dy = 1: ELSE IF ny > 1 THEN dy = -1
- IF nx < lk2 AND rn < .99 THEN dy = 0: ELSE IF rn < .5 THEN dy = -1 ELSE dy = 1
- IF nx > lk2 AND rn < .8 AND ny > 2 THEN dy = -1: ELSE IF nx > locx - 4 THEN dy = 1
- IF ny + dy < 1 THEN dy = 0
- IF ny > 1 AND nx = locx THEN dy = -1: dx = -1
- nx = nx + dx: ny = ny + dy
- LOCATE 4, 5: PRINT nx, ny:
- hx = INT(nx / 5) + 2: hy = INT(ny / 2) + 2
- LOCATE hy, hx: PRINT "±"
- FOR i = 1 TO 1100: NEXT i
- IF nx < 1 THEN nx = 0
- IF nx > locx THEN nx = locx
- IF ny + m(1) > locy THEN ny = locy - m(1)
- m1 = m(1)
- IF dy = -1 THEN s$ = "/" ELSE s$ = "\": IF dy = 0 THEN s$ = " "
- 's$ = "!"
- IF dx = -1 THEN m1 = 1
- CALL sety(LOC$(), s$, nx, ny, m1, locx)
- SUB cph (n1, n2)
- IF INT(RND * 100.99) < n1 THEN n2 = 1
- IF INT(RND * 100.99) > n1 THEN n2 = 2
- END SUB
- SUB cube (s$(), n1, n2, n3, n4, m$, m1$, m2$)
- m1: nnn = 0: nnn1 = 0
- LET n5 = INT((RND * (n3 - (n1 + 2))) / 2) * 2: IF n5 < 3 THEN GOTO m1
- LET n6 = INT((RND * (n4 - (n2 + 2))) / 2) * 2 + 1: IF n6 < 3 THEN GOTO m1
- LET wx = INT(RND * 3.99) + 1
- CALL scrn(s$(n6), d$, n5, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6), d$, n5 + n1 + 1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 - 1), d$, n5 + n1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6), d$, n5 - 1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 - 1), d$, n5, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + n2 + 1), d$, n5, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + n2), d$, n5 - 1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + n2), d$, n5 + n1 + 1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + n2 - 1), d$, n5 + n1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + 1), d$, n5 + 1, 1)
- IF d$ <> "." THEN GOTO m1
- CALL scrn(s$(n6 + n2 + 1), d$, n5 + n1 + 1, 1)
- IF d$ <> "." THEN GOTO m1
- ' CALL scrn(s$(n6 + n2 + 1), d$, n5, 1)
- ' IF d$ <> "." THEN GOTO m1
- FOR i = 1 TO n1
- s1$ = s1$ + m$: ON wx GOTO m2, m3, m4, m5
- m0: NEXT i: s1$ = s1$ + m$: IF nnn1 <> 1 THEN s5$ = s5$ + m$
- FOR i = n6 TO n6 + n2
- s2$ = LEFT$(s$(i), n5): s3$ = RIGHT$(s$(i), n3 - n5 - n1)
- IF wx = 1 AND i = n6 THEN s$(i) = s2$ + s5$ + s3$: GOTO m10
- IF wx = 2 AND i = n6 + n2 THEN s$(i) = s2$ + s5$ + s3$: GOTO m10
- IF wx = 3 AND i = n6 + INT(n2 / 2) THEN s$(i) = s2$ + s5$ + s3$: GOTO m10
- IF wx = 4 AND i = n6 + INT(n2 / 2) THEN s$(i) = s2$ + s5$ + s3$: GOTO m10
- s$(i) = s2$ + s1$ + s3$
- m10: NEXT i
- GOTO m7
- m2: IF i = INT(n1 / 2) + 1 AND nnn = 0 THEN s5$ = s5$ + m1$: nnn = 1: GOTO m0
- s5$ = s5$ + m$: GOTO m0
- m3: IF i = INT(n1 / 2) + 1 AND nnn = 0 THEN s5$ = s5$ + m1$: nnn = 1: GOTO m0
- s5$ = s5$ + m$: GOTO m0
- m4: IF i = n1 AND nnn = 0 THEN s5$ = s5$ + m$ + m1$: nnn = 1: nnn1 = 1: GOTO m0
- s5$ = s5$ + m$: GOTO m0
- m5: IF i = 1 AND nnn = 0 THEN s5$ = s5$ + m1$: nnn = 1: GOTO m0
- s5$ = s5$ + m$: GOTO m0
- m7: 'CALL sets(s$(INT(n6 + (n2 / 2))), m2$, n5 + INT(n1 / 2), n3)
- CALL sets(s$(n6 + INT(n2 / 2)), m2$, n5 + (n1 / 2), n3)
- END SUB
- SUB hous (h$, f, r)
- CALL wr(h$, "r", f, 0)
- CALL wr(h$, "f", 2, 0)
- x = INT(((RND * 20) + 10) * r)
- y = INT(((RND * 8) + 8) * r)
- lx = INT(RND * (x - 6)) + 3
- ly = INT(RND * (y - 4)) + 2
- CALL wr(h$, "l", lx, ly)
- door = INT(RND * 2.99): IF RND < .2 THEN door = 3
- CALL wr(h$, "d", door, 0)
- sym = INT(RND * 6.99) + 1
- CALL wr(h$, "s", sym, 0)
- FOR i = 1 TO f
- CALL wr(h$, "o", x, y)
- NEXT i
- END SUB
- SUB opr (n, c$, n1, n2)
- ON n GOTO mopr1, mopr2
- mopr1: IF c$ = "h" THEN cx = n1
- mopr2:
- END SUB
- SUB piples (h$)
- IF RND < .5 THEN n = 1: ELSE n = 2
- CALL wr(h$, "p", n, 0)
- END SUB
- SUB prs (LOC$(), locx, locy, xx, yy, nx1, nx2, ny1, ny2, posx, posy, x, y, lll, col9)
- mpr: IF lll = 0 THEN GOTO prs0
- ON lll GOSUB prs1, prs2
- prs0: COLOR col9
- FOR i = 3 TO 21
- LOCATE i + 1, 16
- PRINT MID$(LOC$((i - 3) + posy), posx, 64)
- NEXT i
- j1: GOTO mret
- prs1: IF xx < nx1 THEN posx = posx - 16: x = x + 16: IF posx < 1 THEN nll = -(1 - posx): posx = 1: x = x + nll: RETURN: ELSE RETURN
- IF xx > nx2 THEN posx = posx + 16: x = x - 16: IF posx > locx - 64 THEN nll = posx - (locx - 64): posx = locx - 64: x = x + nll: RETURN: ELSE RETURN
- prs2: IF yy > ny2 THEN posy = posy + 6: y = y - 6: IF posy > locy - 18 THEN nll = posy - (locy - 18): posy = locy - 18: y = y + nll: RETURN: ELSE RETURN
- IF yy < ny1 THEN posy = posy - 6: y = y + 6: IF posy < 1 THEN nll = -(1 - posy): posy = 1: y = y + nll: RETURN: ELSE RETURN
- '
- mret: END SUB
- SUB road (LOC$(), locx, locy, ddd$, nn)
- ' ON INT(RND * 1.99) + 1 GOTO mr1, mr2
- dx = 1: x = INT(locx / 2): y = 1
- mr1: b = LEN(ddd$)
- IF RND < nn THEN dx = -dx
- CALL sets(LOC$(y), ddd$, x, locx)
- IF x > locx - b OR x < 1 THEN GOTO mrstop
- IF y > INT(locy / 2) THEN GOTO mrplace
- x = x + dx: y = y + 1
- GOTO mr1
- mrplace: ND = INT(b * 1.5)
- FOR i = 1 TO ND
- CALL sets(LOC$(y + i - 1), ddd$ + ddd$ + ddd$, x - b, locx)
- NEXT i
- ' FOR i = 1 TO 3
- ' lx2 = INT(locx * .1)
- ' ON i GOTO mrr1, mrr2, mrr3
- 'mrr1: dx = -1: y = y + INT((nd - 1) / 2): x = x - b: x1 = x: y1 = y: xy = locx - ((locx - x) + lx2): GOTO mrre
- 'mrr2: dx = 1: y = y1: x = x1 + b * 3: xy = INT((locx - (locx * .2)) / 2) - (b * 3) + 1: GOTO mrre
- 'mrr3: dy = 1: dx = 0: x = x1 + INT(b / 2): y = y1: xy = INT((locy - (locy * .2)) / 2): GOTO mrre
- 'mrre: FOR j = 1 TO xy - 1
- ' dd$ = LEFT$(ddd$, 4)
- ' CLS
- ' PRINT "j:"; j; " x:"; x; " lx:"; locx; " y:"; y; " ly:"; locy, xy
- ' CALL sets(loc$(y), dd$, x, locx)
- ' IF dx <> 0 THEN CALL sets(loc$(y + 1), dd$, x, locx)
- ' x = x + dx: y = y + dy
- ' NEXT j: NEXT i
- mrstop: END SUB
- SUB say (n$, n2$, n3$)
- ON INT(RND * 2.99) + 1 GOSUB msay1, msay2, msay3
- GOTO msaye
- msay1: PRINT n$: RETURN
- msay2: PRINT n1$: RETURN
- msay3: PRINT n2$
- msaye: END SUB
- SUB scrn (s$, s1$, n2, ff)
- s1$ = MID$(s$, n2, ff)
- END SUB
- SUB sets (s$, s1$, n2, mx)
- ln = LEN(s1$)
- s3$ = LEFT$(s$, n2): s4$ = RIGHT$(s$, mx - (n2 - 1 + ln))
- s$ = s3$ + s1$ + s4$
- END SUB
- SUB setwr (h$, n, d$, n1, n2)
- lh = LEN(h$)
- x = ((n - 1) * 7)
- CALL wr(r$, d$, n1, n2)
- CALL sets(h$, r$, x, lh - 1)
- END SUB
- SUB sety (s$(), s1$, x, y, n, mx)
- ln = LEN(s1$)
- FOR i = y TO y + n
- s3$ = LEFT$(s$(i), x): s4$ = RIGHT$(s$(i), mx - (x - 1 + ln))
- s$(i) = s3$ + s1$ + s4$
- NEXT i
- END SUB
- SUB sex (sex1, h1$, h2$, sx$)
- ON sex1 GOTO msex1, msex2
- GOTO msexe
- msex1: sx$ = h1$: GOTO msexe
- msex2: sx$ = h2$
- msexe: END SUB
- SUB sp (n)
- LOCATE 1, 1
- FOR i = 1 TO n
- PRINT " "
- NEXT i: LOCATE 1, 1
- END SUB
- SUB sy (m$, m1$, n)
- a$ = LEFT$(m$, 2)
- IF a$ = "rg" THEN GOTO mrug
- GOTO mend
- mrug: a$ = MID$(m$, 4, 1)
- IF a$ = "s" THEN c = 1: c1 = 8
- a$ = MID$(m$, 6, 1)
- IF a$ = "n" THEN GOTO mrug1
- GOTO mend
- mrug1: CALL cph(n, d)
- ' m2$ = sl$(1, INT(RND * c1 - .01) + 1)
- ON d GOTO mrug2, mrug3
- mrug2: 'call spr(1,
- mrug3:
- mend: END SUB
- SUB tree (LOC$(), locx, locy, d$, n)
- n1 = INT((RND * ((locx * locy) / 30)) * n)
- nn = INT(RND * (n1 / 2) + (n1 / 1.25))
- FOR i = 1 TO nn
- mtr1: x = INT(((RND * (locx - 5)) + 3) / 2) * 2 + 1: y = INT((RND * (locy - 5)) + 3)
- CALL scrn(LOC$(y), g$, x, 1): IF g$ <> "." THEN GOTO mtr1
- CALL sets(LOC$(y), d$, x, locx)
- mtrn: NEXT i
- END SUB
- SUB wr (h$, d$, x, y)
- x$ = STR$(x): IF LEN(x$) > 2 THEN x$ = RIGHT$(x$, 2)
- y$ = STR$(y): IF LEN(y$) > 2 THEN y$ = RIGHT$(y$, 2)
- h$ = h$ + d$ + x$ + "," + y$ + ";"
- END SUB
- SUB wrh (h$, find$, lx, door, fin)
- h = LEN(h$)
- FOR i = 1 TO h
- a$ = MID$(h$, i, 1)
- IF find$ <> "" THEN IF a$ = find$ THEN fin = INT(i / 7) + 1: ffin$ = find$: find$ = "" ELSE GOTO mnx
- IF n = 0 THEN c$ = a$: n1$ = "": n2$ = "": n = 1: GOTO mnx
- IF a$ = "," THEN n = 2: GOTO mnx
- IF n = 1 THEN n1$ = n1$ + a$
- IF a$ = ";" THEN n = 0: GOSUB mcall: GOTO mnx
- IF n = 2 THEN n2$ = n2$ + a$
- mnx: NEXT i: GOTO mwrhe
- mcall: n1 = VAL(n1$): n2 = VAL(n2$)
- IF c$ = ffin$ THEN lx = n1: door = n2: GOTO mwrhe
- IF c$ = "r" THEN nr = n1: RETURN
- IF c$ = "f" THEN nfl = n1: RETURN
- IF c$ = "l" THEN lxx = n1: lyy = n2: RETURN
- IF c$ = "d" THEN door = n1: RETURN
- IF c$ = "s" THEN sym = n1: RETURN
- IF c$ = "o" THEN nfl1 = nfl1 + 1: IF nfl1 = nfl THEN xf = n1: yf = n2: GOSUB mflor: RETURN
- RETURN
- mflor: hh1$ = "°±І#Ы=і": hh$ = MID$(hh1$, sym, 1)
- yy = 4
- xx = 52 - INT(xf / 2)
- FOR j = 1 TO xf
- IF sym < 7 THEN d$ = d$ + hh$
- IF sym = 7 THEN IF j = 1 THEN d$ = d$ + "Ъ": d2$ = d2$ + "А": ELSE IF j = xf THEN d$ = d$ + "ї": d2$ = d2$ + "Щ": ELSE d$ = d$ + "Д": d2$ = d2$ + "Д"
- IF j = 1 OR j = xf THEN d1$ = d1$ + hh$: d5$ = d5$ + "I": ELSE d1$ = d1$ + ".": d5$ = d5$ + "."
- NEXT j: d$ = d$ + "....": d1$ = d1$ + "....": d2$ = d2$ + "....": d5$ = d5$ + "...."
- LOCATE yy + 1, xx
- PRINT d$
- FOR j = 1 TO yf - 1
- LOCATE yy + j + 1, xx
- IF sym <> 6 THEN PRINT d1$ ELSE PRINT d5$
- NEXT j
- LOCATE yy + yf + 1, xx
- IF sym <> 7 THEN PRINT d$: ELSE PRINT d2$
- PRINT : PRINT SPC(xx);
- IF nfl > 1 THEN PRINT "ќв ¦:"; nfl - 1; " " ELSE PRINT "Џ®¤ў «."
- LOCATE yy + INT(yf / 2 + .5), xx + xf - 1
- IF nfl = 2 AND door = 0 THEN sss$ = "\"
- IF nfl = 2 AND door <> 0 THEN sss$ = "+"
- IF nfl <> 2 THEN sss$ = ""
- PRINT sss$
- lx = xx + xf + 3
- LOCATE yy + lyy, xx + lxx
- IF nfl = 2 AND nr = 2 THEN PRINT "<": RETURN
- IF nfl = nr THEN find$ = "<": RETURN
- IF nfl = 1 THEN find$ = ">": RETURN
- PRINT "<>"
- RETURN
- mwrhe: END SUB
- SUB wrl (u, d, l, r, c, LOC$(), locx, locy)
- DIM m(5), mm(5), dd(5)
- m(1) = u: m(2) = d: m(3) = l: m(4) = r: m(5) = c
- FOR i = 1 TO 5: d = 0
- FOR j = 1 TO 5
- IF m(i) <= m(j) THEN d = d + 1
- NEXT j: mm(i) = d: dd(d) = i
- NEXT i
- 'FOR i = 1 TO 5
- vid = 1: ' m (dd(1))
- ON vid GOTO mup', mdw, mlf, mrg, cen
- mup:
- lk = INT(locx / (RND * 4 + 1)): lk2 = INT(locx / 1.5)
- z = 5
- IF m(5) = m(1) THEN z = 2
- maxy = INT(RND * 20 + (locy / z))
- sty = maxy / lk
- y = 1
- FOR x = 1 TO locx
- CALL sety(LOC$(), "і", x, INT(y), m(1), locx)
- IF x < lk THEN y = y + sty
- IF x >= lk2 THEN y = y - sty
- IF INT(y) < 1 THEN y = 1
- NEXT x
- END SUB
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement