ungleich-game/README.md

120 lines
2.7 KiB
Markdown

## Welcome to the ungleich-game, a geek game engine!
ungleich-game is supposed to be an easy-to-use, easy-to-play and
easy-to-extend game framework for geeks.
It features registration, challenges with dependencies and an easy
point system.
The project name is ungleich-game, as it has its roots at ungleich -
the project name might change later.
## How to play (in general)
* Select a game server
* Register
* List challenges - have fun!
### How to play (for instance on sxiii's laptop)
* Note: here HTTPie is used; can be replaced by curl or any other http tool
* Note2: example with localhost [::] is ipv6 localhost representation
* Note3: you can ran sample commands as-is in most cases, as they utilize your user name automatically
0. Try to access the game server without any argument
```
http [::]:5002
```
1. Register: send a POST request with your username
```
http POST [::]:5002/register user=$USER
```
2. Get challenges
```
http [::]:5002/challenge
```
3. Get a challenge description
```
http [::]:5002/challenge/RegisterNet
```
4. Solve a challenge
```
http POST [::]:5002/challenge/RegisterNet 'user=$USER' 'network=2a0a:e5c0:101::/64'
```
5. Get high score
```
http POST [::]:5002/points 'user=$USER'
```
## Overview - Game flow
* Users register at a game server
* Users play by getting challenges from the game server
* Users can see their or all high scores on the main page
## Overview - Development Flow
[not yet fully implemented]
The idea is that there are challenges and each challenge offers:
* A description
* Some dependencies (on something another challenge can provide)
* A score ("how difficult it is")
### How to add challenges
* Create challenges-<YOURNAME>.py and add challenges in there
* Do some magic so all challenges are imported by server
### How to run your own game server
Run
```
python server.py
```
### Testing game
If you want to automatically test the game server, run the ./test_game.sh script included in this directory.
## Overview - Security
None at the moment.
## Tech stack
The base for building games is:
* Python3 - The programmming language
* Flask - web frontend
* etcd - storing data, games, etcd.
## Requirements
Tested packages @ Ubuntu 18.04.3
* etcd3 (important, version 3)
* python3-etcd
* python3-flask
* python3-flask-restful
## Things to solve
* Enhance the Challenge class - maybe make it easier for challenges to abort
* Enhance the Challenge class - abstract away writing information?
* Implement dependencies / providers for challenges
* Add an easy to use CLI (Steven might like click)
* Write nice code to easily retrieve points per user
* Sort high score
* Maybe store all user information in one JSON object?