Home
               _     _                    _     _____  _                
              / \   | |__    ___   _   _ | |_  |_   _|| |__    ___      
             / _ \  | '_ \  / _ \ | | | || __|   | |  | '_ \  / _ \     
            / ___ \ | |_) || (_) || |_| || |_    | |  | | | ||  __/     
           /_/   \_\|_.__/  \___/  \__,_| \__|   |_|  |_| |_| \___|     
         ____                _                  __  __                  
        / ___|  ___   _ __  | |__    ___  _ __ |  \/  |  __ _  ____ ___ 
       | |  _  / _ \ | '_ \ | '_ \  / _ \| '__|| |\/| | / _` ||_  // _ \
       | |_| || (_) || |_) || | | ||  __/| |   | |  | || (_| | / /|  __/
        \____| \___/ | .__/ |_| |_| \___||_|   |_|  |_| \__,_|/___|\___|
                     |_|                                                
       
       The GopherMaze is a project I made during the tilde.club Weekly 
       Webpage Workshop #5, to play with and learn more about the Gopher 
       protocol.
       
       Gopher, being primarily a text-based interface, tends to remind me 
       of various text-based adventure games, which frequently required 
       you to move around a map by specifying cardinal directions (north,
       south, east and west).
       
       Accordingly, I figured it would be fun to make a simple maze as a
       Gopher site, with the path through the maze being represented by 
       the directory hierarchy.
       
   DIR Play the Game
       
          __ __               _  __    _      __            __      
         / // /___  _    __   (_)/ /_  | | /| / /___   ____ / /__ ___
        / _  // _ \| |/|/ /  / // __/  | |/ |/ // _ \ / __//  '_/(_-<
       /_//_/ \___/|__,__/  /_/ \__/   |__/|__/ \___//_/  /_/\_\/___/
                                                                    
       The first thing I needed was to generate a maze, so I headed over 
       to Wikipedia to remind myself of some simple maze algorithms, and 
       ended up using a randomized Prim's algorithm to generate the maze.
       
       I chose not to use an algorithm which would include loops to 
       simplify generating the navigation links on each page, and also 
       because I didn't want to spend too long on this project!
       
       I then hacked up some code to render the maze out to ASCII text, 
       with the ability to mark the start, finish and a specific location
       within the maze, which would represent the position of the player.
       This would be displayed on each of the individual pages.
       
       I considered using the grid location of each cell in the maze to
       encode the URL.  This would have removed the requirement for 
       subdirectories, but would mean anyone could cheat to jump to the 
       end of the maze.  By using subdirectories, it forces the correct 
       solution to the maze to be discovered.  After all, this is serious
       business -- no cheating allowed!
       
       I also hacked in some very ugly code to make sure the maze was 
       hard enough -- as it's randomly generated, some of the mazes are 
       particularly easy. This involves checking to make sure you can 
       always go both directions from the start square, that you have to 
       go in every direction at least once to get to the finish, and 
       that there's a minimum number of steps required.
       
       The result is a total of 160 gophermap files, one for each cell,
       in 159 subdirectories.
       
          ____ ___   ____ 
         / __// _ | / __ \
        / _/ / __ |/ /_/ /
       /_/  /_/ |_|\___\_\
                          
       Q. I can't find my way out!
       A. Try drawing on your screen with a Sharpie, it really does make
          things easier.  However, if you still can't find your way out,
          here is the complete set of steps required:
       
          E, S, S, S, S, S, S, S, E, S, E, N, E, N, E, E, E, N, N, N, N, 
          N, N, E, E, E, E, E, E, S, S, E, S, S, E, S, S, W, S, S, S, E
       
          ____                       
         /  _/___  ___ __ __ ___  ___
        _/ / (_-< (_-</ // // -_)(_-<
       /___//___//___/\_,_/ \__//___/
                                     
       I originally started using relative links to go 'back' in the maze,
       so for example, if you went east from the start location, then the 
       west direction would load '../', the previous directory.
       
       This worked perfectly in the web proxy, but when attempting to 
       navigate to these relative links from the shell in Lynx, I would
       get an error.
       
       I'm not sure if this was me doing something wrong, or if there is 
       no official ability to specify the parent directory in a gopher 
       link.