base on A simple MUD server in Python, for teaching purposes, which could be run on a Raspberry Pi MUD Pi
======
A simple text-based Multi-User Dungeon (MUD) game, which could be run on a
Raspberry Pi or other low-end server.
Requirements
------------
You will need to install _Python_ (2.7+ or 3.3+) where you wish to run the
server. Installers for Windows and Mac can be found at
<http://www.python.org/download/>. There are also tarballs for Linux, although
the best way to install on Linux would be via the package manager.
To allow players to connect remotely, the server will also need to be connected
to the internet.
To connect to the server you will need a telnet client. On Mac, Linux, and
versions of Windows prior to Windows Vista, the telnet client is usually
installed by default. For Windows Vista, 7, 8 or later, you may need to follow
[this guide](http://technet.microsoft.com/en-us/library/cc771275%28v=ws.10%29.aspx)
to install it.
Running the Server
------------------
### On Windows
Double click on `simplemud.py` - the file will be opened with the Python
interpreter. To stop the server, simply close the terminal window.
### On Mac OSX and Linux (including Raspberry Pi)
From the terminal, change to the directory containing the script and run
python simplemud.py
Note, if you are connected to the machine via SSH, you will find that the
script stops running when you quit the SSH session. A simple way to leave the
script running is to use a tool called `screen`. Connect via SSH as usual then
run `screen`. You will enter what looks like a normal shell prompt, but now you
can start the python script running and hit `ctl+a` followed by `d` to leave
_screen_ running in the background. The next time you connect, you can
re-attach to your screen session using `screen -r`. Alternatively you could
[create a daemon script](http://jimmyg.org/blog/2010/python-daemon-init-script.html)
to run the script in the background every time the server starts.
Connecting to the Server
------------------------
If the server is running behind a NAT such as a home router, you will need to
set up port **1234** to be forwarded to the machine running the server. See your
router's instructions for how to set this up. There are a large number of
setup guides for different models of router here:
<http://portforward.com/english/routers/port_forwarding/>
You will need to know the _external_ IP address of the machine running the
server. This can be discovered by visiting <http://www.whatsmyip.org> from
that machine.
To connect to the server, open your operating system's terminal or command
prompt and start the telnet client by running:
telnet <ip address> 1234
where `<ip address>` is the external IP address of the server, as described
above. 1234 is the port number that the server listens on.
If you are using Windows Vista, 7, 8 or later and get the message:
'telnet' is not recognized as an internal or external command, operable
program or batch file.
then follow
[this guide](http://technet.microsoft.com/en-us/library/cc771275%28v=ws.10%29.aspx)
to install the Windows telnet client.
If all goes well, you should be presented with the message
What is your name?
To quit the telnet client, press `ctl + ]` to go to the prompt, and then
type `quit`.
What is Telnet?
---------------
Telnet is simple text-based network communication protocol that was invented in
1969 and has since been superseded by other, more secure protocols. It does
remain popular for a few specialised uses however, MUD games being one of these
uses. A long (and boring) history of the telnet protocol can be found here:
<http://www.cs.utexas.edu/users/chris/think/ARPANET/Telnet/Telnet.shtml>
What is a MUD?
--------------
MUD is short for Multi-User Dungeon. A MUD is a text-based online role-playing
game. MUDs were popular in the early 80s and were the precursor to the
graphical Massively-Multiplayer Online Role-Playing Games we have today, like
World of Warcraft. <http://www.mudconnect.com> is a great site for learning
more about MUDs.
Extending the Game
------------------
MUD Pi is a free and open source project (that's _free_ as in _freedom_). This
means that the source code is included and you are free to read it, copy it,
extend it and use it as a starting point for your own MUD game or any other
project. See `licence.md` for more info.
MUD Pi was written in the Python programming language. If you have never used
Python before, or are new to programming in general, why not try an online
tutorial, such as <http://www.learnpython.org/>.
There are 2 source files in the project. `mudserver.py` is a module containing
the `MudServer` class - a basic server script which handles player connections
and sending and receiving messages. `simplemud.py` is an example game using
`MudServer`, with player chat and rooms to move between.
The best place to start tweaking the game would be to have a look at
`simplemud.py`. Why not try adding more rooms to the game world? You'll find
more ideas for things to try in the source code itself.
Of course if you're feeling more adventurous you could take a look at the
slightly more advanced networking code in `mudserver.py`.
MUD-Pi-Based Projects
---------------------
Here are some of the cool projects people have made from MUD-Pi:
* **[ESP8266 MUD](http://git.savsoul.com/barry/esp8266-Mud) by Barry Ruffner** -
a MUD that runs entirely within an ESP8266 microchip, using MicroPython
* **[MuddySwamp](https://github.com/ufosc/MuddySwamp) by the University of**
**Florida Open Source Club** - a UF-themed MUD
* **[Dumserver](https://github.com/wowpin/dumserver) by Bartek Radwanski** -
a feature-rich MUD engine
Author
------
MUD Pi was written by Mark Frimston
For feedback, please email <
[email protected]> or add a comment on the
project's [Github page](http://github.com/frimkron/mud-pi)
", Assign "at most 3 tags" to the expected json: {"id":"8102","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"