diff --git a/.gitignore b/.gitignore index 53db978..f30aa49 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ settings.json # Don't commit game save save.json + +# Don't commit docs output +docs/_build diff --git a/README.md b/README.md index 44dbeca..d340eee 100644 --- a/README.md +++ b/README.md @@ -1,118 +1,15 @@ [![pipeline status](https://gitlab.crans.org/ynerant/squirrel-battle/badges/master/pipeline.svg)](https://gitlab.crans.org/ynerant/squirrel-battle/-/commits/master) [![coverage report](https://gitlab.crans.org/ynerant/squirrel-battle/badges/master/coverage.svg)](https://gitlab.crans.org/ynerant/squirrel-battle/-/commits/master) +[![Documentation Status](https://readthedocs.org/projects/squirrel-battle/badge/?version=latest)](https://squirrel-battle.readthedocs.io/fr/latest/?badge=latest) +[![PyPI](https://img.shields.io/pypi/v/dungeon-battle)](https://pypi.org/project/squirrel-battle/) +[![PYPI downloads](https://img.shields.io/pypi/dm/squirrel-battle)](https://pypi.org/project/squirrel-battle/) +[![AUR version](https://img.shields.io/aur/version/python-squirrel-battle)](https://aur.archlinux.org/packages/python-squirrel-battle/) +[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.txt) # Squirrel Battle Attention aux couteaux des écureuils ! -## Création d'un environnement de développement +## Documentation -Il est toujours préférable de travailler dans un environnement Python isolé du reste de son instalation. - -1. **Installation des dépendances de la distribution.** - Vous devez déjà installer Python et le module qui permet de créer des environnements virtuels. - On donne ci-dessous l'exemple pour une distribution basée sur Debian, mais vous pouvez facilement adapter pour ArchLinux ou autre. - - ```bash - $ sudo apt update - $ sudo apt install --no-install-recommends -y python3-setuptools python3-venv python3-dev git - ``` - -2. **Clonage du dépot** là où vous voulez : - - ```bash - $ git clone git@gitlab.crans.org:ynerant/squirrel-battle.git && cd squirrel-battle - ``` - -3. **Création d'un environment de travail Python décorrélé du système.** - On n'utilise pas `--system-site-packages` ici pour ne pas avoir des clashs de versions de modules avec le système. - - ```bash - $ python3 -m venv env - $ source env/bin/activate # entrer dans l'environnement - (env)$ pip3 install -r requirements.txt - (env)$ deactivate # sortir de l'environnement - ``` - -### Exécution des tests - -Les tests sont gérés par `pytest` dans le module `squirrelbattle.tests`. - -`tox` est un outil permettant de configurer l'exécution des tests. Ainsi, après -installation de tox dans votre environnement virtuel via `pip install tox`, -il vous suffit d'exécuter `tox -e py3` pour lancer les tests et `tox -e linters` -pour vérifier la syntaxe du code. - - -## Lancement du jeu - -Après clonage du projet, il suffit d'exécuter `python3 main.py`. - -Sinon, le jeu est déployé dans PyPI, et il suffit d'exécuter : - -``` -pip install squirrel-battle -``` - -pour télécharger et installer le jeu. Lancer `squirrel-battle` suffit ensuite -à lancer le jeu depuis n'importe où. Pour mettre à jour : - -``` -pip install --upgrade squirrel-battle -``` - -Sous Arch Linux, le paquet `python-squirrel-battle-git` dans l'AUR permet -également d'installer directement le jeu. - -## Gestion des émojis - -Le jeu dispose de deux modes graphiques : en mode `ascii` et `squirrel`. -Le mode `squirrel` affiche des émojis pour un meilleur affichage. Toutefois, -il est possible que vous n'ayez pas les bonnes polices. - -### Sous Windows - -Sous Windows, vous devriez avoir les bonnes polices installées nativement. - -### Sous Arch Linux - -Il est recommandé d'utiliser le terminal `xfce4-terminal`. Il suffit d'installer -le paquets de polices - -```bash -sudo pacman -Sy noto-fonts-emoji -``` - -Le jeu doit ensuite se lancer normalement sans action supplémentaire. - -### Sous Ubuntu/Debian - -À nouveau, le terminal `xfce4-terminal` est recommandé. Le paquet -`fonts-noto-color-emoji`. Toutefois, le rythme de mise à jour de Debian étant -lent, le paquet le plus récent ne contient pas tous les émojis. Sur Debian, -il faudra donc installer le paquet le plus récent, ce qui fonctionne sans -dépendance supplémentaire : - -```bash -wget http://ftp.fr.debian.org/debian/pool/main/f/fonts-noto-color-emoji/fonts-noto-color-emoji_0~20200916-1_all.deb -dpkg -i fonts-noto-color-emoji_0~20200916-1_all.deb -rm fonts-noto-color-emoji_0~20200916-1_all.deb -``` - -Il reste le problème de l'écureuil. Sous Ubuntu et Debian, le caractère écureuil -existe déjà, mais ne s'affiche pas proprement. On peut appliquer un patch qui -permet d'afficher les émojis correctement dans son terminal. Pour cela, il - suffit de faire : - -```bash -ln -s $PWD/fix-squirrel-emojis.conf /etc/fonts/conf.avail/75-fix-squirrel-emojis.conf -ln -s /etc/fonts/conf.avail/75-fix-squirrel-emojis.conf /etc/fonts/conf.d/75-fix-squirrel-emojis.conf -``` - -Après redémarrage du terminal, l'écureuil devrait s'afficher correctement. - -Pour supprimer le patch : - -```bash -rm /etc/fonts/conf.d/75-fix-squirrel-emojis.conf -``` +La documentation du projet est présente sur [squirrel-battle.readthedocs.io](https://squirrel-battle.readthedocs.io). diff --git a/fix-squirrel-emojis.conf b/debian/75-fix-squirrel-emojis.conf similarity index 100% rename from fix-squirrel-emojis.conf rename to debian/75-fix-squirrel-emojis.conf diff --git a/debian/changelog b/debian/changelog index 7686c57..d1afdad 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -python3-squirrelbattle (3.14) beta; urgency=low +python3-squirrel-battle (3.14) beta; urgency=low * Initial release. diff --git a/debian/control b/debian/control index cbd3846..e36e424 100644 --- a/debian/control +++ b/debian/control @@ -1,4 +1,4 @@ -Source: python3-squirrelbattle +Source: python3-squirrel-battle Section: devel Priority: optional Maintainer: ynerant @@ -8,7 +8,7 @@ Standards-Version: 4.1.4 Homepage: https://gitlab.crans.org/ynerant/squirrel-battle X-Python3-Version: >= 3.6 -Package: python3-squirrelbattle +Package: python3-squirrel-battle Architecture: all Multi-Arch: foreign Depends: fonts-noto-color-emoji, ${python3:Depends} diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..628e923 --- /dev/null +++ b/debian/install @@ -0,0 +1,2 @@ +debian/75-fix-squirrel-emojis.conf etc/fonts/conf.avail +debian/75-fix-squirrel-emojis.conf etc/fonts/conf.d \ No newline at end of file diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..4877d19 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,60 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) + + +# -- Project information ----------------------------------------------------- + +project = 'Squirrel Battle' +copyright = "2020" +author = "Yohann D'ANELLO,\nMathilde DEPRES,\nNicolas MARGULIES,\nCharles PEYRAT" + + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + "sphinx_rtd_theme", +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = 'fr' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] \ No newline at end of file diff --git a/docs/display/index.rst b/docs/display/index.rst new file mode 100644 index 0000000..376466c --- /dev/null +++ b/docs/display/index.rst @@ -0,0 +1,21 @@ +Gestion de l'affichage +====================== + +.. _curses: https://docs.python.org/3/howto/curses.html + +L'intégralité de l'affichage du jeu est géré grâce à la bibliothèque native de +Python curses_. + + +.. warning:: + Plus de documentation à venir. + + +.. toctree:: + :maxdepth: 3 + :caption: Affichage + + menu + map + stats + logs diff --git a/docs/display/logs.rst b/docs/display/logs.rst new file mode 100644 index 0000000..3ad130d --- /dev/null +++ b/docs/display/logs.rst @@ -0,0 +1,4 @@ +Affichage de l'historique +========================= + +Pas encore documenté. diff --git a/docs/display/map.rst b/docs/display/map.rst new file mode 100644 index 0000000..1daa85a --- /dev/null +++ b/docs/display/map.rst @@ -0,0 +1,4 @@ +Affichage de la carte +===================== + +Pas encore documenté. diff --git a/docs/display/menu.rst b/docs/display/menu.rst new file mode 100644 index 0000000..84be36c --- /dev/null +++ b/docs/display/menu.rst @@ -0,0 +1,4 @@ +Affichage des menus +=================== + +Pas encore documenté. diff --git a/docs/display/stats.rst b/docs/display/stats.rst new file mode 100644 index 0000000..1b5f697 --- /dev/null +++ b/docs/display/stats.rst @@ -0,0 +1,4 @@ +Affichage des statistiques +========================== + +Pas encore documenté. diff --git a/docs/entities/index.rst b/docs/entities/index.rst new file mode 100644 index 0000000..1d63bbf --- /dev/null +++ b/docs/entities/index.rst @@ -0,0 +1,79 @@ +Entités +======= + +.. toctree:: + :maxdepth: 3 + :caption: Entités + + player + monsters + items + +Entité +------ + +Une entité est un élément placé sur la carte. Ce peut être le joueur, un monstre +ou bien un objet sur la carte. Chaque entité dispose des attributs suivants : + +* ``name: str`` + + Il s'agit du type de l'entité. + +* ``y: int`` +* ``x: int`` + + Cela représente les coordonnées de l'entité sur la carte. + +* ``map: Map`` + + Il s'agit de la carte sur laquelle est placée l'entité. + +.. _objet: items.html + +Il existe à l'heure actuelle deux types d'entité : une `entité attaquante`_ ou +bien un objet_. + + +Entité attaquante +----------------- + +.. _monstre: monsters.html +.. _joueur: player.html + +Une entité attaquante (``FightingEntity``) est un type d'entités représentant +les personnages présents sur la carte, pouvant alors se battre. Ce peut être +un monstre_ ou bien le joueur_. + +Elles disposent toutes, en plus des paramètres d'entité, des attributs suivants : + +* ``maxhealth: int`` + + Représente la vie maximale de l'entité, qui est aussi la vie de départ. + +* ``health: int`` + + Représente la vie actuelle de l'entité. + +* ``strength: int`` + + Représente la force de l'entité, le nombre de dégâts à faire à chaque coup. + +* ``intelligence: int`` +* ``charisma: int`` +* ``dexterity: int`` +* ``constitution: int`` + + Tous ces paramètres sont des statistiques de l'entité, n'ayant pas de réelle + influence pour le moment. + +* ``level: int`` + + Niveau de l'entité. + +Chaque type d'entité disposera de ses propres attributs de départ. + +On considère une entité comme morte à partir du moment où sa vie descend +en-dessous de 0 point de vie. À ce moment-là, l'entité est retirée de la carte. + +Lorsqu'une entité en frappe une autre, celle-ci inflige autant de dégâts qu'elle +n'a de force, et autant de points de vie sont perdus. diff --git a/docs/entities/items.rst b/docs/entities/items.rst new file mode 100644 index 0000000..521ca91 --- /dev/null +++ b/docs/entities/items.rst @@ -0,0 +1,50 @@ +Objets +====== + +.. _joueur: player.html +.. _pack de textures: ../texture_pack.html + +Un objet est une entité présente sur la carte que le joueur_ peut ramasser. +Il lui suffit pour cela de s'approcher, et une fois sur la case de l'objet, +celui-ci est placé dans l'inventaire. + +Un objet dispose de deux paramètres : + +* ``held: bool`` + + Indique si l'objet est placé dans l'inventaire ou s'il est au sol. + +* ``held_by: Optional[Player]`` + + Si l'objet est dans l'inventaire, renvoie son propriétaire. + + +Deux types d'objets sont pour l'instant présents : + + +Bombe +----- + +.. _entités attaquantes: index.html#entite-attaquante + +Une bombe est un objet que l'on peut ramasser. Une fois ramassée, elle est placée +dans l'inventaire. Le joueur peut ensuite lâcher la bombe, qui fera alors +3 dégâts à toutes les `entités attaquantes`_ situées à moins de une case. + +Elle est représentée dans le `pack de textures`_ ASCII par le caractère ``o`` +et dans le `pack de textures`_ écureuil par l'émoji ``💣``. + +.. note:: + + La gestion de l'inventaire n'ayant pas encore été implémentée, il n'est à + l'heure actuelle pas possible de lancer une bombe. + + +Cœur +---- + +Une cœur est un objet que l'on ne peut pas ramasser. Dès que le joueur s'en +approche, il est régénéré automatiquement de 3 points de vie, et le cœur disparaît. + +Elle est représentée dans le `pack de textures`_ ASCII par le caractère ``❤`` +et dans le `pack de textures`_ écureuil par l'émoji ``💜``. diff --git a/docs/entities/monsters.rst b/docs/entities/monsters.rst new file mode 100644 index 0000000..b719c1b --- /dev/null +++ b/docs/entities/monsters.rst @@ -0,0 +1,55 @@ +Monstres +======== + +.. _`entité attaquante`: index.html#entites-attaquantes +.. _`pack de textures`: ../texture-pack.html + +Chaque monstre est une `entité attaquante`_, et hérite donc de ses attributs. + +À chaque tick de jeu, chaque monstre se déplace d'une case, si possible. +Si le monstre est loin du joueur, ce déplacement est fait aléatoirement. +Sinon, si le monstre est à moins de 5 cases du joueur, alors il se dirige +au plus vite sur le joueur pour le frapper selon l'algorithme de Dijkstra, +et s'il est suffisamment proche frappe le joueur et lui fait autant de dégâts +qu'il n'a de force. + +On dénombre actuellement 4 types de monstres : + +Hérisson +-------- + +Son nom est fixé à `hedghog`. Il a par défaut une force à **3** et **10** points de vie. + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``*``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🦔``. + + +Castor +------ + +Son nom est fixé à `beaver`. Il a par défaut une force à **2** et **20** points de vie. + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``_``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🦫``. + + +Lapin +----- + +Son nom est fixé à `rabbit`. Il a par défaut une force à **1** et **15** points de vie. + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``Y``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🐇``. + + +Nounours +-------- + +Son nom est fixé à `teddy_bear`. Il n'a pas de force et **50** points de vie. + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``8``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🧸``. diff --git a/docs/entities/player.rst b/docs/entities/player.rst new file mode 100644 index 0000000..d3a644a --- /dev/null +++ b/docs/entities/player.rst @@ -0,0 +1,52 @@ +Joueur +====== + +.. _`entité attaquante`: index.html#entites-attaquantes +.. _`paramètres`: ../settings.html +.. _`pack de textures`: ../texture-pack.html +.. _`objet`: items.html + +Le joueur est une `entité attaquante`_, contrôlée par l'utilisateur humain. + +Il est représenté dans le `pack de textures`_ ASCII par le caractère ``@``, +et dans le `pack de textures`_ écureuil par le fameux émoji écureuil ``🐿``. + +En plus des attributs d'une `entité attaquante`_, le joueur dispose des atrributs +supplémentaires : + +* ``current_xp: int`` + + Correspond à l'expérience accumulée par le joueur depuis le dernier niveau obtenu. + +* ``max_xp: int`` + + Expérience requise au joueur pour changer de niveau. Vaut 10 fois le niveau actuel. + +* ``inventory: List[Item]`` + + Contient l'ensemble des objets détenus par le joueur. + + +Déplacement +----------- + +Selon les paramètres_, il est possible de bouger le joueur dans les 4 directions +en appuyant sur ``z``, ``q``, ``s``, ``d`` ou sur les flèches directionnelles. + +Le joueur se retrouvera bloqué s'il avance contre un mur. Si il avance sur un +objet_, alors il prend l'objet_ et avance sur la case. + +S'il rencontre une autre `entité attaquante`_, alors il frappe l'entité en +infligeant autant de dégâts qu'il n'a de force. À chaque fois qu'une entité est +tuée, le joueur gagne aléatoirement entre 3 et 7 points d'expérience. + + +Expérience +---------- + +À chaque monstre tué, le joueur gagne entre 3 et 7 points d'expérience aléatoirement. +Lorsque le joueur atteint la quantité d'expérience requise pour monter de niveau, +le joueur gagne un niveau, regagne toute sa vie, consomme son expérience et la +nouvelle quantité d'expérience requise est 10 fois le niveau actuel. De plus, +entre 5 et 10 fois le niveau actuel entités apparaissent aléatoirement sur la +carte à la montée de niveau. Enfin, le joueur gagne en force en montant de niveau. diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..ce312c3 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,51 @@ +Bienvenue dans la documentation de Squirrel Battle ! +==================================================== + +.. image:: https://gitlab.crans.org/ynerant/squirrel-battle/badges/master/pipeline.svg + :target: https://gitlab.crans.org/ynerant/squirrel-battle/-/commits/master + :alt: Pipeline status + +.. image:: https://gitlab.crans.org/ynerant/squirrel-battle/badges/master/coverage.svg + :target: https://gitlab.crans.org/ynerant/squirrel-battle/-/commits/master + :alt: Coverage report + +.. image:: https://readthedocs.org/projects/squirrel-battle/badge/?version=latest + :target: https://squirrel-battle.readthedocs.io/fr/latest/?badge=latest + :alt: Documentation Status + +.. image:: https://img.shields.io/pypi/v/dungeon-battle + :target: https://pypi.org/project/squirrel-battle/ + :alt: PyPI + +.. image:: https://img.shields.io/pypi/dm/dungeon-battle + :target: https://pypi.org/project/squirrel-battle/ + :alt: PyPI downloads + +.. image:: https://img.shields.io/aur/version/python-squirrel-battle + :target: https://aur.archlinux.org/packages/python-squirrel-battle/ + :alt: AUR version + +.. image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg + :target: https://www.gnu.org/licenses/gpl-3.0.txt + :alt: License: GPL v3 + + +.. toctree:: + :maxdepth: 3 + :caption: Développer + + install-dev + tests + display/index + +.. toctree:: + :maxdepth: 3 + :caption: Jouer + + install + rules + map + entities/index + texture-pack + settings + troubleshooting diff --git a/docs/install-dev.rst b/docs/install-dev.rst new file mode 100644 index 0000000..db611e0 --- /dev/null +++ b/docs/install-dev.rst @@ -0,0 +1,31 @@ +Installation d'un environnement de développement +================================================ + +Il est toujours préférable de travailler dans un environnement Python isolé du reste de son instalation. + +1. **Installation des dépendances de la distribution.** + Vous devez déjà installer Python et le module qui permet de créer des environnements virtuels. + On donne ci-dessous l'exemple pour une distribution basée sur Debian, mais vous pouvez facilement adapter pour ArchLinux ou autre. + +.. code:: bash + + $ sudo apt update + $ sudo apt install --no-install-recommends -y python3-setuptools python3-venv python3-dev git + +2. **Clonage du dépot** là où vous voulez : + +.. code:: bash + + $ git clone git@gitlab.crans.org:ynerant/squirrel-battle.git && cd squirrel-battle + +3. **Création d'un environment de travail Python décorrélé du système.** + On n'utilise pas `--system-site-packages` ici pour ne pas avoir des clashs de versions de modules avec le système. + +.. code:: bash + + $ python3 -m venv env + $ source env/bin/activate # entrer dans l'environnement + (env)$ pip3 install -r requirements.txt + (env)$ deactivate # sortir de l'environnement + +Le lancement du jeu se fait en lançant la commande ``python3 main.py``. \ No newline at end of file diff --git a/docs/install.rst b/docs/install.rst new file mode 100644 index 0000000..d73b5a9 --- /dev/null +++ b/docs/install.rst @@ -0,0 +1,90 @@ +Installation client +=================== + +Installation +------------ + +Différents paquets sont déployés, dans PyPI pour tout système utilisant Python, +un paquet Debian et un paquet Arch Linux. + +Depuis PIP +~~~~~~~~~~ + +.. _PyPI: https://pypi.org/project/squirrel-battle/ + +Le projet `Squirrel Battle` est déployé dans PyPI_. Il suffit d'installer +Squirrel Battle en exécutant : + +.. code:: bash + + pip install --user squirrel-battle + +Les mises à jour s'obtiennent également via PIP en exécutant : + +.. code:: bash + + pip install --user --upgrade squirrel-battle + +Le jeu peut se lancer ensuite en exécutant la commande ``squirrel-battle``. + +Toutefois, le paquet PyPI n'inclut pas les polices d'émojis. Il est recommandé +d'installer des polices telles que ``noto-fonts-emoji`` afin de prendre en charge +les émojis dans votre terminal. + + +Sur Arch Linux +~~~~~~~~~~~~~~ + +.. _AUR: https://aur.archlinux.org/ +.. _python-squirrel-battle: https://aur.archlinux.org/packages/python-squirrel-battle/ +.. _python-squirrel-battle-git: https://aur.archlinux.org/packages/python-squirrel-battle-git/ +.. _yay: https://aur.archlinux.org/packages/yay/ + +Deux paquets sont publiés dans l'AUR_ (Arch User Repository) : + +- python-squirrel-battle_ +- python-squirrel-battle-git_ + +Le premier paquet est mis à jour à chaque nouvelle version déployée, le second +est utile pour des fins de développement et est en permanence à jour +avec la branche ``master`` du Git. + +Les deux ne sont pas présents dans les dépôts officiels de Arch Linux, mais vous +pouvez les récupérer avec un outil tel que yay_. + +Les paquets incluent la dépendance ``noto-fonts-emoji``, qui permet d'afficher +les émojis dans le terminal. + +Le jeu peut être ensuite lancé via la commande ``squirrel-battle``. + + +Sur Ubuntu/Debian +~~~~~~~~~~~~~~~~~ + +.. _paquet: https://gitlab.crans.org/ynerant/squirrel-battle/-/jobs/artifacts/master/raw/build/python3-squirrelbattle_3.14_all.deb?job=build-deb + +Un paquet_ est généré par l'intégration continue de Gitlab à chaque commit. +Ils sont également attachés à chaque nouvelle release. + +Il dépend du paquet ``fonts-noto-color-emoji``, permettant d'afficher les émojis +dans le terminal. Il peut être installé via APT normalement sur une distribution +récente, toutefois sur les versions les plus vieilles, incluant Debian Buster, +certains émojis n'apparaissent pas. Il est essentiel de maintenir ce paquet à +jour. Pour installer manuellement la dernière version de ce paquet, +il suffit d'exécuter : + +.. code:: bash + + wget http://ftp.fr.debian.org/debian/pool/main/f/fonts-noto-color-emoji/fonts-noto-color-emoji_0~20200916-1_all.deb + dpkg -i fonts-noto-color-emoji_0~20200916-1_all.deb + rm fonts-noto-color-emoji_0~20200916-1_all.deb + +Pour installer ce paquet, il suffit de le télécharger et d'appeler ``dpkg`` : + +.. code:: bash + + dpkg -i python3-squirrelbattle_3.14_all.deb + +Ce paquet inclut un patch pour afficher les émojis écureuil correctement. + +Après cela, le jeu peut être lancé grâce à la commande ``squirrel-battle``. diff --git a/docs/map.rst b/docs/map.rst new file mode 100644 index 0000000..e8b90cc --- /dev/null +++ b/docs/map.rst @@ -0,0 +1,46 @@ +Carte +===== + +.. _entités: entity/index.html +.. _pack de textures: texture-pack.html + +Dans Squirrel game, le joueur se déplace dans un donjon, constitué de plusieurs +cartes. Pour le moment, le jeu se déroule sur une unique carte pré-définie, +non générée aléatoirement. + +Une carte est un rectangle composé de tuiles_. + +La carte est chargée depuis sa représentation ASCII dans un fichier texte. + +Au lancement du jeu, une quantité aléatoire d'entités_ sont générées et placées +aléatoirement sur la carte. + +Tuiles +------ + +Une tuile représente une case du jeu, avec ses différentes propriétés physiques. +On compte actuellement 3 types de tuiles : + +Vide +~~~~ + +Le vide est représenté par un espace vide quelque que soit le `pack de textures`_ +utilisé. Cette tuile n'est utilisée que pour délimiter les bords de la carte, +aucune entité ne peut se trouver sur cette tuile. + + +Sol +~~~ + +Le sol représente les emplacements où les entités peuvent se déplacer librement. +Il est représenté par un point ``.`` dans le `pack de textures`_ ASCII et par +deux caractères rectangulaires blancs ``██`` dans le `pack de textures`_ +écureuil. + + +Mur +~~~ + +Les murs délimitent les salles du donjon. Personne ne peut les traverser. +Ils sont représentés par un dièse ``#`` dans le `pack de textures`_ ASCII et +par une brique carrée ``🧱`` dans le `pack de textures`_ écureuil. diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..cbf1e36 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,2 @@ +sphinx +sphinx-rtd-theme diff --git a/docs/rules.rst b/docs/rules.rst new file mode 100644 index 0000000..77cfc6b --- /dev/null +++ b/docs/rules.rst @@ -0,0 +1,24 @@ +Règles du jeu +============= + +.. _carte: map.html +.. _objets: entities/items.html +.. _monstres: entities/monsters.html +.. _entités: entities/index.html + +Dans `Squirrel Game`, le joueur incarne un écureuil coincé dans un donjon, +prêt à tout pour s'en sortir. Sa vision de rongeur lui permet d'observer +l'intégralité de la carte_, et à l'aide d'objets_, il va pouvoir affronter +les monstres_ présents dans le donjon et gagner en expérience et en force. + +Le jeu fonctionne par niveau. À chaque niveau ``n`` du joueur, entre ``3n`` et +``7n`` entités apparaissent aléatoirement sur la carte. + +En tuant des ennemis, ce qu'il parvient à faire en fonçant directement sur eux +ayant mangé trop de noisettes (ou étant armé d'un couteau), l'écureuil va +pouvoir gagner en expérience et au fur et à mesure qu'il monte de niveau, +a force augmentera. + +Arriverez-vous à sauver ce malheureux petit écureuil perdu ? + +Bon courage sachant que le jeu est sans fin ... diff --git a/docs/settings.rst b/docs/settings.rst new file mode 100644 index 0000000..a8644d4 --- /dev/null +++ b/docs/settings.rst @@ -0,0 +1,4 @@ +Paramètres +========== + +Pas encore documenté. diff --git a/docs/tests.rst b/docs/tests.rst new file mode 100644 index 0000000..3bdd0d2 --- /dev/null +++ b/docs/tests.rst @@ -0,0 +1,12 @@ +Exécution des tests +=================== + +.. note:: + La documentation va être revue ici. + +Les tests sont gérés par ``pytest`` dans le module ``squirrelbattle.tests``. + +``tox`` est un outil permettant de configurer l'exécution des tests. Ainsi, après +installation de tox dans votre environnement virtuel via ``pip install tox``, +il vous suffit d'exécuter ``tox -e py3`` pour lancer les tests et ``tox -e linters`` +pour vérifier la syntaxe du code. diff --git a/docs/texture-pack.rst b/docs/texture-pack.rst new file mode 100644 index 0000000..3bb5b4d --- /dev/null +++ b/docs/texture-pack.rst @@ -0,0 +1,65 @@ +Pack de textures +================ + +.. _entité: entity/index.html +.. _tuile: map.html#tuiles +.. _tuiles: map.html#tuiles +.. _carte: map.html +.. _paramètres: settings.html + +.. _Joueur: entities/player.html +.. _Hérisson: entities/monsters.html#herisson +.. _Cœur: entities/items.html#coeur +.. _Bombe: entities/items.html#bombe +.. _Lapin: entities/monsters.html#lapin +.. _Castor: entities/monsters.html#castor +.. _Nounours: entities/monsters.html#nounours + +Chaque entité_ et chaque tuile_ de la carte_ est associé à un caractère pour +être affiché dans le terminal. Cependant, afin de pouvoir proposer plusieurs +expériences graphiques (notamment en fonction du support des émojis), différents +packs de textures sont proposés. + +Il est possible de changer de pack dans les paramètres. + +Les packs de textures peuvent influencer la taille que prennent les tuiles_, +en raison du fait que les émojis ne sont pas monospace. + +Les packs de textures sont au nombre de deux : + +Pack ASCII +---------- + +Chaque tuile fait un caractère de large. + +* Tuiles + * Vide : *espace* + * Mur : ``#`` + * Sol : ``.`` +* Entités + * Joueur_ : ``@`` + * Hérisson_ : ``*`` + * Cœur_ : ``❤`` + * Bombe_ : ``o`` + * Lapin_ : ``Y`` + * Castor_ : ``_`` + * Nounours_ : ``8`` + + +Pack Écureuil +------------- + +Chaque tuile fait 2 caractères de large pour afficher les émojis proprement. + +* Tuiles + * Vide : *espace* + * Mur : ``🧱`` + * Sol : ``██`` +* Entités + * Joueur_ : ``🐿`` + * Hérisson_ : ``🦔`` + * Cœur_ : ``💜`` + * Bombe_ : ``💣`` + * Lapin_ : ``🐇`` + * Castor_ : ``🦫`` + * Nounours_ : ``🧸`` diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst new file mode 100644 index 0000000..8a26c19 --- /dev/null +++ b/docs/troubleshooting.rst @@ -0,0 +1,56 @@ +Résolution d'erreurs +==================== + +Émojis +------ + +Le jeu s'exécutant en terminal, il est courant d'obtenir des problèmes d'affichage. +Sous Windows, les émojis s'affichent normalement correctement. Il suffit en +général d'installer les bons paquets de police. + +Sous Arch Linux +^^^^^^^^^^^^^^^ + +Il est recommandé d'utiliser le terminal `xfce4-terminal`. Il suffit d'installer +le paquets de polices : + +.. code:: bash + + sudo pacman -Sy noto-fonts-emoji + +Le jeu doit ensuite se lancer normalement sans action supplémentaire. + +Sous Ubuntu/Debian +^^^^^^^^^^^^^^^^^^ + +À nouveau, le terminal `xfce4-terminal` est recommandé. Le paquet +`fonts-noto-color-emoji`. Toutefois, le rythme de mise à jour de Debian étant +lent, le paquet le plus récent ne contient pas tous les émojis. Sur Debian, +il faudra donc installer le paquet le plus récent, ce qui fonctionne sans +dépendance supplémentaire : + +.. code:: bash + + wget http://ftp.fr.debian.org/debian/pool/main/f/fonts-noto-color-emoji/fonts-noto-color-emoji_0~20200916-1_all.deb + dpkg -i fonts-noto-color-emoji_0~20200916-1_all.deb + rm fonts-noto-color-emoji_0~20200916-1_all.deb + +Il reste le problème de l'écureuil. Sous Ubuntu et Debian, le caractère écureuil +existe déjà, mais ne s'affiche pas proprement. On peut appliquer un patch qui +permet d'afficher les émojis correctement dans son terminal. Pour cela, il +suffit de faire : + +.. code:: bash + + ln -s $PWD/debian/75-fix-squirrel-emojis.conf /etc/fonts/conf.avail/75-fix-squirrel-emojis.conf + ln -s /etc/fonts/conf.avail/75-fix-squirrel-emojis.conf /etc/fonts/conf.d/75-fix-squirrel-emojis.conf + +Après redémarrage du terminal, l'écureuil devrait s'afficher correctement. + +Pour supprimer le patch : + +.. code:: bash + + rm /etc/fonts/conf.d/75-fix-squirrel-emojis.conf + +À noter que ce patch est inclus dans le paquet Debian. diff --git a/setup.py b/setup.py index f2c27bc..dfb15ef 100644 --- a/setup.py +++ b/setup.py @@ -32,8 +32,7 @@ setup( ], python_requires='>=3.6', include_package_data=True, - data_files=["squirrelbattle/assets/" + file - for file in os.listdir("squirrelbattle/assets")], + package_data={"squirrelbattle": ["assets/*"]}, entry_points={ "console_scripts": [ "squirrel-battle = squirrelbattle.bootstrap:Bootstrap.run_game",