Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Tiny Maze Maker - ASCII
#17
Here is an old GW-Basic (or maybe older) maze maker that someone posted on an old BASIC newsgroup back in the 90's. 

Code: (Select All)

1010 Key Off
1020 DefInt A-Z
1030 X.MAX = 95
1040 Y.MAX = 49
1050 Dim DELTA.X(6, 720)
1060 Dim DELTA.Y(6, 720)
1070 Dim PAGE(Y.MAX, X.MAX)
1080 Dim R.N(8)
1090 Dim STACK.1(Y.MAX * X.MAX)
1100 Dim STACK.2(Y.MAX * X.MAX)
1110 Cls
1120 Print "                                Maze Generator"
1130 Print
1140 Print
1150 Print
1160 Print "    Random number seed?  ";
1170 Line Input SEED$
1180 R.N.INDEX.1 = 1
1190 For R.N.INDEX.2 = 1 To Len(SEED$)
    1200 TEM.INT = Asc(Mid$(SEED$, R.N.INDEX.2, 1))
    1210 R.N(R.N.INDEX.1) = TEM.INT
    1220 R.N.INDEX.1 = R.N.INDEX.1 + 1
1230 Next R.N.INDEX.2
1240 R.N.INDEX.2 = 8
1250 While (R.N.INDEX.1 > 1)
    1260 R.N.INDEX.1 = R.N.INDEX.1 - 1
    1270 R.N(R.N.INDEX.2) = R.N(R.N.INDEX.1)
    1280 R.N.INDEX.2 = R.N.INDEX.2 - 1
1290 Wend
1300 While (R.N.INDEX.2 >= 1)
    1310 R.N(R.N.INDEX.2) = 367
    1320 R.N.INDEX.2 = R.N.INDEX.2 - 1
1330 Wend
1340 DELTA.Y(1, 1) = -1
1350 DELTA.X(1, 1) = -2
1360 DELTA.Y(2, 1) = 1
1370 DELTA.X(2, 1) = -2
1380 DELTA.Y(3, 1) = -2
1390 DELTA.X(3, 1) = 0
1400 DELTA.Y(4, 1) = 2
1410 DELTA.X(4, 1) = 0
1420 DELTA.Y(5, 1) = -1
1430 DELTA.X(5, 1) = 2
1440 DELTA.Y(6, 1) = 1
1450 DELTA.X(6, 1) = 2
1460 DELTA.INDEX.2 = 0
1470 For DELTA.INDEX.1A = 1 To 6
    1480 For DELTA.INDEX.1B = 1 To 6
        1490 If DELTA.INDEX.1A = DELTA.INDEX.1B Then 1850
        1500 For DELTA.INDEX.1C = 1 To 6
            1510 If DELTA.INDEX.1A = DELTA.INDEX.1C Then 1840
            1520 If DELTA.INDEX.1B = DELTA.INDEX.1C Then 1840
            1530 For DELTA.INDEX.1D = 1 To 6
                1540 If DELTA.INDEX.1A = DELTA.INDEX.1D Then 1830
                1550 If DELTA.INDEX.1B = DELTA.INDEX.1D Then 1830
                1560 If DELTA.INDEX.1C = DELTA.INDEX.1D Then 1830
                1570 For DELTA.INDEX.1E = 1 To 6
                    1580 If DELTA.INDEX.1A = DELTA.INDEX.1E Then 1820
                    1590 If DELTA.INDEX.1B = DELTA.INDEX.1E Then 1820
                    1600 If DELTA.INDEX.1C = DELTA.INDEX.1E Then 1820
                    1610 If DELTA.INDEX.1D = DELTA.INDEX.1E Then 1820
                    1620 For DELTA.INDEX.1F = 1 To 6
                        1630 If DELTA.INDEX.1A = DELTA.INDEX.1F Then 1810
                        1640 If DELTA.INDEX.1B = DELTA.INDEX.1F Then 1810
                        1650 If DELTA.INDEX.1C = DELTA.INDEX.1F Then 1810
                        1660 If DELTA.INDEX.1D = DELTA.INDEX.1F Then 1810
                        1670 If DELTA.INDEX.1E = DELTA.INDEX.1F Then 1810
                        1680 DELTA.INDEX.2 = DELTA.INDEX.2 + 1
                        1690 DELTA.X(DELTA.INDEX.1A, DELTA.INDEX.2) = DELTA.X(1, 1)
                        1700 DELTA.Y(DELTA.INDEX.1A, DELTA.INDEX.2) = DELTA.Y(1, 1)
                        1710 DELTA.X(DELTA.INDEX.1B, DELTA.INDEX.2) = DELTA.X(2, 1)
                        1720 DELTA.Y(DELTA.INDEX.1B, DELTA.INDEX.2) = DELTA.Y(2, 1)
                        1730 DELTA.X(DELTA.INDEX.1C, DELTA.INDEX.2) = DELTA.X(3, 1)
                        1740 DELTA.Y(DELTA.INDEX.1C, DELTA.INDEX.2) = DELTA.Y(3, 1)
                        1750 DELTA.X(DELTA.INDEX.1D, DELTA.INDEX.2) = DELTA.X(4, 1)
                        1760 DELTA.Y(DELTA.INDEX.1D, DELTA.INDEX.2) = DELTA.Y(4, 1)
                        1770 DELTA.X(DELTA.INDEX.1E, DELTA.INDEX.2) = DELTA.X(5, 1)
                        1780 DELTA.Y(DELTA.INDEX.1E, DELTA.INDEX.2) = DELTA.Y(5, 1)
                        1790 DELTA.X(DELTA.INDEX.1F, DELTA.INDEX.2) = DELTA.X(6, 1)
                        1800 DELTA.Y(DELTA.INDEX.1F, DELTA.INDEX.2) = DELTA.Y(6, 1)
                    1810 Next DELTA.INDEX.1F
                1820 Next DELTA.INDEX.1E
            1830 Next DELTA.INDEX.1D
        1840 Next DELTA.INDEX.1C
    1850 Next DELTA.INDEX.1B
1860 Next DELTA.INDEX.1A
1870 Y.OUT.MOD.4 = 1
1880 For Y.OUT = 1 To Y.MAX
    1890 If Y.OUT.MOD.4 <> 1 Then 2030
    1900 X.OUT.MOD.8 = 1
    1910 For X.OUT = 1 To X.MAX
        1920 If ((X.OUT.MOD.8 = 0) And (Y.OUT <> 1) And (Y.OUT <> Y.MAX)) Then 1980
        1930 If X.OUT.MOD.8 = 3 Then 1980
        1940 If X.OUT.MOD.8 = 4 Then 1980
        1950 If X.OUT.MOD.8 = 5 Then 1980
        1960 PAGE(Y.OUT, X.OUT) = 0
        1970 GoTo 1990
        1980 PAGE(Y.OUT, X.OUT) = 1
        1990 X.OUT.MOD.8 = X.OUT.MOD.8 + 1
        2000 If X.OUT.MOD.8 >= 8 Then X.OUT.MOD.8 = 0
    2010 Next X.OUT
    2020 GoTo 2260
    2030 If ((Y.OUT.MOD.4 <> 0) And (Y.OUT.MOD.4 <> 2)) Then 2140
    2040 X.OUT.MOD.8 = 1
    2050 For X.OUT = 1 To X.MAX
        2060 If ((X.OUT.MOD.8 = 2) Or (X.OUT.MOD.8 = 6)) Then 2090
        2070 PAGE(Y.OUT, X.OUT) = 0
        2080 GoTo 2100
        2090 PAGE(Y.OUT, X.OUT) = 1
        2100 X.OUT.MOD.8 = X.OUT.MOD.8 + 1
        2110 If X.OUT.MOD.8 >= 8 Then X.OUT.MOD.8 = 0
    2120 Next X.OUT
    2130 GoTo 2260
    2140 X.OUT.MOD.8 = 1
    2150 For X.OUT = 1 To X.MAX
        2160 If X.OUT.MOD.8 = 0 Then 2220
        2170 If X.OUT.MOD.8 = 1 Then 2220
        2180 If X.OUT.MOD.8 = 4 Then 2220
        2190 If X.OUT.MOD.8 = 7 Then 2220
        2200 PAGE(Y.OUT, X.OUT) = 0
        2210 GoTo 2230
        2220 PAGE(Y.OUT, X.OUT) = 1
        2230 X.OUT.MOD.8 = X.OUT.MOD.8 + 1
        2240 If X.OUT.MOD.8 >= 8 Then X.OUT.MOD.8 = 0
    2250 Next X.OUT
    2260 Y.OUT.MOD.4 = Y.OUT.MOD.4 + 1
    2270 If Y.OUT.MOD.4 >= 4 Then Y.OUT.MOD.4 = 0
2280 Next Y.OUT
2290 X = 4
2300 Y = Y.MAX - 2
2310 PAGE(Y, X) = 0
2320 STACK.HEAD = -1
2330 DELTA.INDEX.1A = 1
2340 DELTA.INDEX.2 = R.N(1)
2350 R.N.INDEX.1 = 1
2360 For R.N.INDEX.2 = 2 To 8
    2370 TEM.INT = R.N(R.N.INDEX.2)
    2380 R.N(R.N.INDEX.1) = TEM.INT
    2390 DELTA.INDEX.2 = DELTA.INDEX.2 + TEM.INT
    2400 If DELTA.INDEX.2 > 727 Then DELTA.INDEX.2 = DELTA.INDEX.2 - 727
    2410 R.N.INDEX.1 = R.N.INDEX.2
2420 Next R.N.INDEX.2
2430 R.N(8) = DELTA.INDEX.2
2440 If DELTA.INDEX.2 > 720 Then 2340
2450 PASSAGE.FOUND = 0
2460 SEARCH.COMPLETE = 0
2470 While (SEARCH.COMPLETE = 0)
    2480 While ((DELTA.INDEX.1A <= 6) And (PASSAGE.FOUND = 0))
        2490 X.NEXT = X + 2 * DELTA.X(DELTA.INDEX.1A, DELTA.INDEX.2)
        2500 If X.NEXT > 0 Then 2530
        2510 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
        2520 GoTo 2670
        2530 If X.NEXT < X.MAX Then 2560
        2540 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
        2550 GoTo 2670
        2560 Y.NEXT = Y + 2 * DELTA.Y(DELTA.INDEX.1A, DELTA.INDEX.2)
        2570 If Y.NEXT > 0 Then 2600
        2580 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
        2590 GoTo 2670
        2600 If Y.NEXT < Y.MAX Then 2630
        2610 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
        2620 GoTo 2670
        2630 If PAGE(Y.NEXT, X.NEXT) = 0 Then 2660
        2640 PASSAGE.FOUND = -1
        2650 GoTo 2670
        2660 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
    2670 Wend
    2680 If PASSAGE.FOUND <> 0 Then 2760
    2690 If STACK.HEAD < 0 Then 2760
    2700 DELTA.INDEX.1A = STACK.1(STACK.HEAD)
    2710 DELTA.INDEX.2 = STACK.2(STACK.HEAD)
    2720 X = X - 2 * DELTA.X(DELTA.INDEX.1A, DELTA.INDEX.2)
    2730 Y = Y - 2 * DELTA.Y(DELTA.INDEX.1A, DELTA.INDEX.2)
    2740 STACK.HEAD = STACK.HEAD - 1
    2750 DELTA.INDEX.1A = DELTA.INDEX.1A + 1
    2760 If PASSAGE.FOUND = 0 Then 2790
    2770 SEARCH.COMPLETE = -1
    2780 GoTo 2810
    2790 If ((STACK.HEAD >= 0) Or (DELTA.INDEX.1A <= 6)) Then 2810
    2800 SEARCH.COMPLETE = -1
2810 Wend
2820 If PASSAGE.FOUND = 0 Then 2900
2830 STACK.HEAD = STACK.HEAD + 1
2840 STACK.1(STACK.HEAD) = DELTA.INDEX.1A
2850 STACK.2(STACK.HEAD) = DELTA.INDEX.2
2860 PAGE(Y.NEXT, X.NEXT) = 0
2870 PAGE((Y + Y.NEXT) \ 2, (X + X.NEXT) \ 2) = 0
2880 X = X.NEXT
2890 Y = Y.NEXT
2900 If STACK.HEAD <> -1 Then 2330
2910 PAGE(2, 2) = 0
2920 PAGE(Y.MAX - 1, X.MAX - 1) = 0
2930 Screen 1
2940 Color 0, 0
2950 Cls
2960 Y.PREVIOUS = 0
2970 Y.NEXT = 2
2980 For Y.OUT = 1 To Y.MAX
    2990 X.OUT = 1
    3000 For X.NEXT = 2 To X.MAX
        3010 If PAGE(Y.OUT, X.OUT) = 0 Then 3100
        3020 If PAGE(Y.OUT, X.NEXT) = 0 Then 3040
        3030 Line (3 * (X.OUT - 1), 4 * (Y.OUT - 1))-(3 * (X.NEXT - 1), 4 * (Y.OUT - 1)), 1
        3040 If Y.PREVIOUS <= 0 Then 3070
        3050 If PAGE(Y.PREVIOUS, X.NEXT) = 0 Then 3070
        3060 Line (3 * (X.OUT - 1), 4 * (Y.OUT - 1))-(3 * (X.NEXT - 1), 4 * (Y.PREVIOUS - 1)), 1
        3070 If Y.NEXT > Y.MAX Then 3100
        3080 If PAGE(Y.NEXT, X.NEXT) = 0 Then 3100
        3090 Line (3 * (X.OUT - 1), 4 * (Y.OUT - 1))-(3 * (X.NEXT - 1), 4 * (Y.NEXT - 1)), 1
        3100 X.OUT = X.NEXT
    3110 Next X.NEXT
    3120 Y.PREVIOUS = Y.OUT
    3130 Y.NEXT = Y.NEXT + 1
3140 Next Y.OUT
3150 Beep
3160 While (InKey$ = "")
3170 Wend
3180 NUM.DEAD.ENDS = 0
3190 For Y.OUT = 3 To Y.MAX Step 4
    3200 For X.OUT = 4 To X.MAX Step 8
        3210 NUM.WALLS = PAGE(Y.OUT - 1, X.OUT - 2)
        3220 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 1, X.OUT - 2)
        3230 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 2, X.OUT)
        3240 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 1, X.OUT + 2)
        3250 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT - 1, X.OUT + 2)
        3260 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT - 2, X.OUT)
        3270 If NUM.WALLS <> 5 Then 3510
        3280 NUM.DEAD.ENDS = NUM.DEAD.ENDS + 1
        3290 If PAGE(Y.OUT - 1, X.OUT - 2) <> 0 Then 3330
        3300 Line (3 * (X.OUT - 4), 4 * (Y.OUT - 1))-(3 * (X.OUT - 2), 4 * (Y.OUT - 3)), 2
        3310 PAGE(Y.OUT - 1, X.OUT - 2) = 1
        3320 GoTo 3510
        3330 If PAGE(Y.OUT - 2, X.OUT) <> 0 Then 3370
        3340 Line (3 * (X.OUT - 2), 4 * (Y.OUT - 3))-(3 * X.OUT, 4 * (Y.OUT - 3)), 2
        3350 PAGE(Y.OUT - 2, X.OUT) = 1
        3360 GoTo 3510
        3370 If PAGE(Y.OUT - 1, X.OUT + 2) <> 0 Then 3410
        3380 Line (3 * X.OUT, 4 * (Y.OUT - 3))-(3 * (X.OUT + 2), 4 * (Y.OUT - 1)), 2
        3390 PAGE(Y.OUT - 1, X.OUT + 2) = 1
        3400 GoTo 3510
        3410 If PAGE(Y.OUT + 1, X.OUT + 2) <> 0 Then 3450
        3420 Line (3 * (X.OUT + 2), 4 * (Y.OUT - 1))-(3 * X.OUT, 4 * (Y.OUT + 1)), 2
        3430 PAGE(Y.OUT + 1, X.OUT + 2) = 1
        3440 GoTo 3510
        3450 If PAGE(Y.OUT + 2, X.OUT) <> 0 Then 3490
        3460 Line (3 * X.OUT, 4 * (Y.OUT + 1))-(3 * (X.OUT - 2), 4 * (Y.OUT + 1)), 2
        3470 PAGE(Y.OUT + 2, X.OUT) = 1
        3480 GoTo 3510
        3490 Line (3 * (X.OUT - 2), 4 * (Y.OUT + 1))-(3 * (X.OUT - 4), 4 * (Y.OUT - 1)), 2
        3500 PAGE(Y.OUT + 1, X.OUT - 2) = 1
    3510 Next X.OUT
3520 Next Y.OUT
3530 Y.LIMIT = Y.MAX - 1
3540 For Y.OUT = 5 To Y.LIMIT Step 4
    3550 For X.OUT = 8 To X.MAX Step 8
        3560 NUM.WALLS = PAGE(Y.OUT - 1, X.OUT - 2)
        3570 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 1, X.OUT - 2)
        3580 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 2, X.OUT)
        3590 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT + 1, X.OUT + 2)
        3600 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT - 1, X.OUT + 2)
        3610 NUM.WALLS = NUM.WALLS + PAGE(Y.OUT - 2, X.OUT)
        3620 If NUM.WALLS <> 5 Then 3860
        3630 NUM.DEAD.ENDS = NUM.DEAD.ENDS + 1
        3640 If PAGE(Y.OUT - 1, X.OUT - 2) <> 0 Then 3680
        3650 Line (3 * (X.OUT - 4), 4 * (Y.OUT - 1))-(3 * (X.OUT - 2), 4 * (Y.OUT - 3)), 2
        3660 PAGE(Y.OUT - 1, X.OUT - 2) = 1
        3670 GoTo 3860
        3680 If PAGE(Y.OUT - 2, X.OUT) <> 0 Then 3720
        3690 Line (3 * (X.OUT - 2), 4 * (Y.OUT - 3))-(3 * X.OUT, 4 * (Y.OUT - 3)), 2
        3700 PAGE(Y.OUT - 2, X.OUT) = 1
        3710 GoTo 3860
        3720 If PAGE(Y.OUT - 1, X.OUT + 2) <> 0 Then 3760
        3730 Line (3 * X.OUT, 4 * (Y.OUT - 3))-(3 * (X.OUT + 2), 4 * (Y.OUT - 1)), 2
        3740 PAGE(Y.OUT - 1, X.OUT + 2) = 1
        3750 GoTo 3860
        3760 If PAGE(Y.OUT + 1, X.OUT + 2) <> 0 Then 3800
        3770 Line (3 * (X.OUT + 2), 4 * (Y.OUT - 1))-(3 * X.OUT, 4 * (Y.OUT + 1)), 2
        3780 PAGE(Y.OUT + 1, X.OUT + 2) = 1
        3790 GoTo 3860
        3800 If PAGE(Y.OUT + 2, X.OUT) <> 0 Then 3840
        3810 Line (3 * X.OUT, 4 * (Y.OUT + 1))-(3 * (X.OUT - 2), 4 * (Y.OUT + 1)), 2
        3820 PAGE(Y.OUT + 2, X.OUT) = 1
        3830 GoTo 3860
        3840 Line (3 * (X.OUT - 2), 4 * (Y.OUT + 1))-(3 * (X.OUT - 4), 4 * (Y.OUT - 1)), 2
        3850 PAGE(Y.OUT + 1, X.OUT - 2) = 1
    3860 Next X.OUT
3870 Next Y.OUT
3880 If NUM.DEAD.ENDS <> 0 Then 3180
3890 Beep
3900 While (InKey$ = "")
3910 Wend
3920 Screen 0
3930 Width 80
3940 End
Reply


Messages In This Thread
Tiny Maze Maker - ASCII - by SierraKen - 08-07-2025, 04:54 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-07-2025, 08:22 PM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-07-2025, 08:51 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-07-2025, 09:02 PM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-07-2025, 09:46 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-08-2025, 12:05 AM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-08-2025, 04:29 AM
RE: Tiny Maze Maker - ASCII - by bplus - 08-08-2025, 08:06 AM
RE: Tiny Maze Maker - ASCII - by James D Jarvis - 08-08-2025, 01:46 PM
RE: Tiny Maze Maker - ASCII - by NakedApe - 08-08-2025, 06:06 PM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-08-2025, 10:18 PM
RE: Tiny Maze Maker - ASCII - by hsiangch_ong - 08-08-2025, 10:52 PM
RE: Tiny Maze Maker - ASCII - by James D Jarvis - 08-09-2025, 07:44 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-09-2025, 09:03 PM
RE: Tiny Maze Maker - ASCII - by hsiangch_ong - 08-08-2025, 11:07 PM
RE: Tiny Maze Maker - ASCII - by SquirrelMonkey - 08-09-2025, 09:35 PM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-09-2025, 10:23 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-09-2025, 11:30 PM
RE: Tiny Maze Maker - ASCII - by bplus - 08-09-2025, 11:38 PM
RE: Tiny Maze Maker - ASCII - by SierraKen - 08-09-2025, 11:39 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Word Search Maker SierraKen 27 5,005 01-21-2026, 12:53 AM
Last Post: SierraKen
  ASCII AQUERIUM solo88 7 620 12-21-2025, 12:04 PM
Last Post: Dav
  Video conversion utility COMMANDER X16 MOVIE MAKER ahenry3068 1 651 11-20-2025, 09:38 PM
Last Post: ahenry3068
  Exploding Ascii Diamonds bplus 5 545 11-16-2025, 05:06 PM
Last Post: Dav
  Tiny Space Invaders bplus 15 1,610 09-11-2025, 04:39 PM
Last Post: Pete

Forum Jump:


Users browsing this thread: 1 Guest(s)