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.