Command Prompt for Windows




Batch File MAZE

The following batch file produces a real maze, up to 20 columns by 20 rows :-

@ECHO off
IF NOT "%winone%"=="" GOTO okay
ECHO This Batch file requires the WinOne(R) Command Prompt to run!
EXIT /b
:okay

SETLOCAL
 
ECHO Enter the width and height and
ECHO the computer will generate a maze.
ECHO.
 
:width
GETNUM Width (5 to 20) ?
IF ("%getnum%" == "") GOTO width
LET getnum=int(%getnum%)
 
IF (%getnum% < 5 || %getnum% > 20) {
    ECHO You may only create a maze between 5 to 20 units wide.
    GOTO width
}
set h=%getnum%
 
:height
GETNUM Height (5 to 20) ?
IF ("%getnum%" == "") GOTO height
LET getnum=int(%getnum%)
 
IF (%getnum% < 5 || %getnum% > 20) {
    ECHO You may only create a maze between 5 to 20 units high.
    GOTO height
}
SET v=%getnum%
 
SET q=0
SET z=0
LET x=(%random_number% %% %h%) + 1
SET xx=%x%
 
ECHO.
ECHO Constructing . . .
 
FOR %%i IS 1 TO %h% DO {
    FOR %%j IS 1 TO %v% DO {
        SET w.%%i.%%j=0
        SET v.%%i.%%j=0
    }
}
 
SET c=1
SET w.x.1=%c%
LET c=%c%+1
SET r=%x%
SET s=1
GOTO start
 
:loop
IF (%r% != %h%) {
    LET r=%r%+1
} ELSE IF (%s% != %v%) {
    SET r=1
    LET s=%s% + 1
} ELSE {
    SET r=1
    SET s=1
}
 
:until
IF (0%w.r.s% == 0) GOTO loop
 
:start
LET t=%r% - 1
IF (%r% == 1 || 0%w.t.s% > 0) GOTO move
 
LET t=%s% - 1
IF (%s% == 1 || 0%w.r.t% != 0) {
 
    LET t=%r% + 1
    IF (%r% == %h% || 0%w.t.s% > 0) {
    IF (%s% == %v%) {
        IF (%z% == 1) GOTO move_1
        SET q=1
    } ELSE {
        LET t=%s% + 1
        IF (0%w.r.t% > 0) GOTO move_1
        }
    LET x=(%random_number% %% 2) + 1
    IF (%x% == 2) SET x=4
        GOTO move_%x%
    }
 
    IF (%s% == %v%) {
    IF (%z% == 1) {
        LET x=(%random_number% %% 2) + 1
        IF (%x% == 2) SET x=3
        GOTO move_%x%
    }
    SET q=1
    } ELSE {
    LET t=%s% + 1
    IF (0%w.r.t% > 0) {
        LET x=(%random_number% %% 2) + 1
        IF (%x% == 2) SET x=3
        GOTO move_%x%
    }
    }
    LET x=(%random_number% %% 3) + 2
    IF (%x% == 2) SET x=1
    GOTO move_%x%
}
 
LET t=%r% + 1
IF (%r% == %h% || 0%w.t.s% > 0) {
    IF (%s% == %v%) {
    IF (%z% == 1) {
        LET x=(%random_number% %% 2) + 1
        GOTO move_%x%
    }
    SET q=1
    } ELSE {
    LET t=%s% + 1
    IF (0%w.r.t% > 0) {
        LET x=(%random_number% %% 2) + 1
        GOTO move_%x%
    }
    }
    LET x=(%random_number% %% 3) + 1
    IF (%x% == 3) SET x=4
    GOTO move_%x%
}
 
LET x=(%random_number% %% 3) + 1
GOTO move_%x%
 
:move
LET t=%s% - 1
IF (%s% == 1 || 0%w.r.t% > 0) {
    LET t=%r% + 1
    IF (%r% == %h% || 0%w.t.s% > 0) {
    IF (%s% == %v%) {
        IF (%z% == 1) GOTO loop
        SET q=1
        } ELSE {
        LET t=%s% + 1
        IF (0%w.r.t% > 0) GOTO loop
        }
        GOTO move_4
    }
 
    IF (%s% == %v%) {
    IF (%z% == 1) GOTO move_3
    SET q=1
    } ELSE {
    LET t=%s% + 1
    IF (0%w.r.t% > 0) GOTO move_3
    }
    LET x=(%random_number% %% 2) + 3
    GOTO move_%x%
}
 
LET t=%r% + 1
IF (%r% == %h% || 0%w.t.s% > 0) {
    IF (%s% == %v%) {
    IF (%z% == 1) GOTO move_2
    SET q=1
    } ELSE {
    LET t=%s% + 1
    IF (0%w.r.t% > 0) GOTO move_2
    }
    LET x=((%random_number% %% 2) + 1) * 2
    GOTO move_%x%
}
 
IF (%s% == %v%) {
    IF (%z% == 1) {
    LET x=(%random_number% %% 2) + 2
    GOTO move_%x%
    }
    SET q=1
} ELSE {
    LET t=%s% + 1
    IF (0%w.r.t% > 0) {
    LET x=(%random_number% %% 2) + 2
    GOTO move_%x%
    }
}
LET x=(%random_number% %% 3) + 2
GOTO move_%x%
 
:move_1
LET r=%r% - 1
SET w.r.s=%c%
LET c=%c% + 1
SET v.r.s=2
 
IF (%c% == %h% * %v% + 1) GOTO show
SET q=0
GOTO start
 
:move_2
LET s=%s% - 1
SET w.r.s=%c%
LET c=%c% + 1
SET v.r.s=1
 
IF (%c% == %h% * %v% + 1) GOTO show
SET q=0
GOTO start
 
:move_3
LET t=%r% + 1
SET w.t.s=%c%
LET c=%c% + 1
IF (0%v.r.s% == 0) {
    SET v.r.s=2
} ELSE {
    SET v.r.s=3
}
LET r=%r% + 1
 
IF (%c% == %h% * %v% + 1) GOTO show
SET q=0
GOTO move
 
:move_4
IF (%q% == 1) {
    SET z=1
    IF (0%v.r.s% == 0) {
    SET v.r.s=1
    SET q=0
    SET r=1
    SET s=1
    GOTO until
    } ELSE {
    SET v.r.s=3
    SET q=0
    GOTO loop
     }
}
 
LET t=%s% + 1
SET w.r.t=%c%
LET c=%c% + 1
IF (0%v.r.s% == 0) {
    SET v.r.s=1
    LET s=%s% + 1
    IF (%c% == %h% * %v% + 1) GOTO show
    GOTO start
} ELSE {
    SET v.r.s=3
    LET s=%s% + 1
    IF (%c% == %h% * %v% + 1) GOTO show
    SET q=0
    GOTO move
}
 
:show
IF (%z% != 1) {
    LET r=(%random_number% %% %h%) + 1
    SET s=%v%
    LET v.r.s=%v.r.s% + 1
}
 
ECHO.
FOR %%i IS 1 TO %h% DO {
    IF (%%i == %xx%) {SAY :  } ELSE {SAY :--&}
}
ECHO :
 
FOR %%j IS 1 TO %v% DO {
    rem say I&
    say :&
 
    FOR %%i IS 1 TO %h% DO {
        IF (%v.%%i.%%j% > 3) {
        LET z=%v.%%i.%%j% - 4
        } ELSE {
        LET z=%v.%%i.%%j%
        }
 
        LET t=%%i + 1
        IF (%z% < 2) {
        IF (%z% != %v.%%i.%%j%) {
            say **I&
        } ELSE {
            rem say   I&
            say   :&
        }
        } ELSE IF (%z% != %v.%%i.%%j% && %v.t.%%j% > 3) {
        say ***&
        } ELSE IF (%z% != %v.%%i.%%j%) {
        say ** &
        } ELSE {
        say    &
        }
    }
 
    ECHO.
 
    FOR %%i IS 1 TO %h% DO {
        IF (%v.%%i.%%j% > 3) {
        LET z=%v.%%i.%%j% - 4
        } ELSE {
        LET z=%v.%%i.%%j%
        }
 
        LET t=%%j + 1
        IF (%z% == 0 || %z% == 2) {
        say :--&
        } ELSE IF (%z% != %v.%%i.%%j% && %%j == %v%) {
        say :**&
        } ELSE IF (%%j == %v%) {
        say :  &
        } ELSE IF (%z% != %v.%%i.%%j% && %v.%%i.t% > 3) {
        say :**&
        } ELSE {
        say :  &
        }
 
    }
 
    ECHO :&
}
ECHO.
 
ENDLOCAL

Running this batch file produces the following output

:-
Enter the width and height and
the computer will generate a maze.
 
Width (5 to 20) ?20
Height (5 to 20) ?20
 
Constructing . . .
 
:--:--:--:--:--:--:--:--:--:  :--:--:--:--:--:--:--:--:--:--:
:        :                       :     :        :     :     :
:  :--:  :  :--:--:--:--:--:  :  :  :  :  :--:  :  :  :  :  :
:  :     :     :     :     :  :     :     :  :  :  :  :  :  :
:  :  :--:--:  :  :  :  :  :  :--:--:--:--:  :  :--:  :  :--:
:  :              :  :  :  :        :        :  :     :     :
:  :--:--:--:--:--:  :  :  :  :--:--:  :--:  :  :  :  :--:  :
:        :           :  :  :  :        :     :  :  :  :     :
:--:--:  :  :--:--:--:  :  :  :  :--:--:  :--:  :  :--:  :  :
:     :  :  :     :  :  :  :  :     :  :     :        :  :  :
:  :--:  :  :  :  :  :  :  :  :--:  :  :  :--:--:  :  :  :--:
:        :  :  :     :  :  :        :  :        :  :  :     :
:  :--:--:  :  :--:  :  :--:  :--:--:  :--:--:  :  :  :--:  :
:     :  :        :  :        :     :           :  :        :
:--:  :  :--:--:  :  :--:--:--:--:  :  :--:--:--:--:  :--:--:
:     :  :        :  :  :           :        :  :        :  :
:  :--:  :  :--:--:  :  :  :--:--:--:  :--:  :  :  :--:  :  :
:     :  :  :     :     :        :     :     :  :     :     :
:--:  :  :  :  :--:--:--:--:--:  :  :--:  :--:  :  :--:--:  :
:  :  :  :        :        :     :  :  :  :     :        :  :
:  :  :  :--:--:  :  :--:  :  :--:  :  :  :  :--:  :--:--:  :
:        :        :  :     :  :  :     :  :     :        :  :
:  :--:--:  :--:--:  :  :--:  :  :--:  :--:  :  :--:--:  :  :
:  :     :     :     :     :     :  :     :  :        :  :  :
:--:  :--:  :--:  :--:--:  :--:  :  :--:  :  :--:--:  :  :--:
:     :        :        :     :  :     :  :  :        :     :
:  :  :  :  :  :--:--:  :--:--:  :  :--:  :  :  :--:  :--:  :
:  :  :  :  :        :        :  :     :     :     :     :  :
:  :--:  :  :--:  :--:--:--:  :  :  :  :--:--:--:  :--:  :  :
:        :     :           :  :  :  :  :        :  :  :  :  :
:  :--:--:--:  :--:--:--:  :  :  :--:  :  :  :  :  :  :  :  :
:  :        :        :  :     :     :  :  :  :     :     :  :
:--:  :--:--:  :  :  :  :  :--:--:  :  :  :--:--:--:  :--:  :
:     :     :  :  :     :  :     :     :     :     :     :  :
:  :--:  :  :  :--:--:  :  :  :--:--:  :--:  :  :  :--:--:  :
:     :  :     :     :  :  :        :  :     :  :           :
:--:  :  :--:--:  :  :  :--:  :--:  :  :  :--:  :--:--:--:--:
:     :        :  :  :  :     :     :  :  :  :        :     :
:  :--:--:--:  :  :  :  :  :--:  :--:  :  :  :--:--:  :  :  :
:                 :  :        :        :           :     :  :
:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:--:  :--:--: