| _ _ _ _____ _
/ \ | |__ ___ _ _ | |_ |_ _|| |__ ___
/ _ \ | '_ \ / _ \ | | | || __| | | | '_ \ / _ \
/ ___ \ | |_) || (_) || |_| || |_ | | | | | || __/
/_/ \_\|_.__/ \___/ \__,_| \__| |_| |_| |_| \___|
____ _ __ __
/ ___| ___ _ __ | |__ ___ _ __ | \/ | __ _ ____ ___
| | _ / _ \ | '_ \ | '_ \ / _ \| '__|| |\/| | / _` ||_ // _ \
| |_| || (_) || |_) || | | || __/| | | | | || (_| | / /| __/
\____| \___/ | .__/ |_| |_| \___||_| |_| |_| \__,_|/___|\___|
|_|
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.
|
|
__ __ _ __ _ __ __
/ // /___ _ __ (_)/ /_ | | /| / /___ ____ / /__ ___
/ _ // _ \| |/|/ / / // __/ | |/ |/ // _ \ / __// '_/(_-<
/_//_/ \___/|__,__/ /_/ \__/ |__/|__/ \___//_/ /_/\_\/___/
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. |