Solve the maze with your mazerunner in bash
You will get a finished server, written in Node.js, and a RESTful API to the server. The server implements a maze. The server is ready and you can test run it via the curl command.
Your task is to build a bash client for the server, according to a requirements specification. Your client should use the server to resolve the maze.
#Prerequisites
- You have read the guide on programming with Bash.
- You have completed the assignment Bash script with arguments and options.
#Introduction
Read briefly on Wikipedia about what a maze can be.
#About the server maze
Start by installing node and npm in debian on your virtual machine with the following commands. Node is JavaScript on the server and is used to run the maze server.
$ sudo apt update
$ sudo apt install curl
$ cd ~
$ curl -sL https://deb.nodesource.com/setup_10.x -o nodesource_setup.sh
$ sudo bash nodesource_setup.sh
$ sudo apt install nodejs
$ nodejs -v
You should see a version number starting on 10 after the last command.
The server maze is in the course repot. There is all the source code and a specification of the server’s API.
Start by getting acquainted with the server’s API.
Here’s how to start the server.
# Go to the course repo
cd example/maze
node index.js
You can test the maze server with curl. Like this.
Please study the source code of the maze server. Had you been able to write it yourself?
#Make a copy of Maze
First, make a copy of the code in example/maze/
. Save all your files in the directory me/kmom04/maze
.
# Go to the course repo
cp -ri example/maze/{api.md,index.js,maze.js,maps,router.js} me/kmom04/maze/
Now you are ready to start your own variant of the maze server.
You start the server with $ node index.js
.
#To save the game ID to file
Your client needs to remember the game ID and which room you are in. You save that information easiest in a file. To avoid having to handle JSON with bash, the server has the opportunity to deliver the responses as a comma-separated string.
Try running the following commands against the server and you will see the difference.
curl localhost:1337/map
curl localhost:1337/map?type=csv
It is therefore ?type=csv
that can make it easier for your bash client who will need to parse the content.
#Requirements
The requirements are two-parted. The first set is mandatory to pass the assignment. The second part is an optional assignment if you want to challenge yourself.
#Bash script for solving the maze (part 1)
Create a script called
mazerunner.bash
in the foldermaze/
. Make the script executable.Use the API to add the following features to the script. The script should always return a response if all went well or not.
Command | What should happen? |
---|---|
./mazerunner.bash init |
Initiate a game and save the game ID in a file. |
./mazerunner.bash maps |
Show which maps are available to choose from. |
./mazerunner.bash select <#map> |
Select a specific map by number. |
./mazerunner.bash enter |
Enter the first room. |
./mazerunner.bash info |
Show information about the room. |
./mazerunner.bash go north |
Go to a new room, if the direction is supported. |
./mazerunner.bash go south |
Go to a new room, if the direction is supported. |
./mazerunner.bash go east |
Go to a new room, if the direction is supported. |
./mazerunner.bash go west |
Go to a new room, if the direction is supported. |
Here is how it may look when you are done.
#Bashscript in loop (part 2 - optional)
- Extend the functionality of
mazerunner.bash
so that everything happens in a loop when you start the program with./mazerunner.bash loop
. The script should start by initiating a new game and showing what maps are available. The player can then select a map and the player enters the first room. Then the loop continues and waits for the player to enter the direction north, south, east, west, or help for a help text or quit to finish.
This is what it might look like.
You do not have to start and stop the server from within your script. You can do that manually.
Validate your mazerunner.bash
script by doing the following commands in the course directory in the terminal.
# Go to the course repo
$ dbwebb validate maze
Correct any errors that pop up and publish again. When it looks green you are done.
#Revision history
- 2019-09-03: (A, lew) First edition.