Merge branch 'docs' into 'master'

Docs

Closes #13

See merge request ynerant/squirrel-battle!20
This commit is contained in:
ynerant 2020-11-19 22:57:44 +01:00
commit 8a85f58261
28 changed files with 750 additions and 115 deletions

3
.gitignore vendored
View File

@ -20,3 +20,6 @@ settings.json
# Don't commit game save
save.json
# Don't commit docs output
docs/_build

117
README.md
View File

@ -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).

2
debian/changelog vendored
View File

@ -1,4 +1,4 @@
python3-squirrelbattle (3.14) beta; urgency=low
python3-squirrel-battle (3.14) beta; urgency=low
* Initial release.

4
debian/control vendored
View File

@ -1,4 +1,4 @@
Source: python3-squirrelbattle
Source: python3-squirrel-battle
Section: devel
Priority: optional
Maintainer: ynerant <ynrant@crans.org>
@ -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}

2
debian/install vendored Normal file
View File

@ -0,0 +1,2 @@
debian/75-fix-squirrel-emojis.conf etc/fonts/conf.avail
debian/75-fix-squirrel-emojis.conf etc/fonts/conf.d

20
docs/Makefile Normal file
View File

@ -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)

60
docs/conf.py Normal file
View File

@ -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']

21
docs/display/index.rst Normal file
View File

@ -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

4
docs/display/logs.rst Normal file
View File

@ -0,0 +1,4 @@
Affichage de l'historique
=========================
Pas encore documenté.

4
docs/display/map.rst Normal file
View File

@ -0,0 +1,4 @@
Affichage de la carte
=====================
Pas encore documenté.

4
docs/display/menu.rst Normal file
View File

@ -0,0 +1,4 @@
Affichage des menus
===================
Pas encore documenté.

4
docs/display/stats.rst Normal file
View File

@ -0,0 +1,4 @@
Affichage des statistiques
==========================
Pas encore documenté.

79
docs/entities/index.rst Normal file
View File

@ -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.

50
docs/entities/items.rst Normal file
View File

@ -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 ``💜``.

View File

@ -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 ``🧸``.

52
docs/entities/player.rst Normal file
View File

@ -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.

51
docs/index.rst Normal file
View File

@ -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

31
docs/install-dev.rst Normal file
View File

@ -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``.

90
docs/install.rst Normal file
View File

@ -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``.

46
docs/map.rst Normal file
View File

@ -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.

2
docs/requirements.txt Normal file
View File

@ -0,0 +1,2 @@
sphinx
sphinx-rtd-theme

24
docs/rules.rst Normal file
View File

@ -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 ...

4
docs/settings.rst Normal file
View File

@ -0,0 +1,4 @@
Paramètres
==========
Pas encore documenté.

12
docs/tests.rst Normal file
View File

@ -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.

65
docs/texture-pack.rst Normal file
View File

@ -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_ : ``🧸``

56
docs/troubleshooting.rst Normal file
View File

@ -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.

View File

@ -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",