Merge branch 'docs' into 'master'
Docs Closes #13 See merge request ynerant/squirrel-battle!20
This commit is contained in:
commit
8a85f58261
|
@ -20,3 +20,6 @@ settings.json
|
||||||
|
|
||||||
# Don't commit game save
|
# Don't commit game save
|
||||||
save.json
|
save.json
|
||||||
|
|
||||||
|
# Don't commit docs output
|
||||||
|
docs/_build
|
||||||
|
|
117
README.md
117
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)
|
[![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)
|
[![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
|
# Squirrel Battle
|
||||||
|
|
||||||
Attention aux couteaux des écureuils !
|
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.
|
La documentation du projet est présente sur [squirrel-battle.readthedocs.io](https://squirrel-battle.readthedocs.io).
|
||||||
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
python3-squirrelbattle (3.14) beta; urgency=low
|
python3-squirrel-battle (3.14) beta; urgency=low
|
||||||
|
|
||||||
* Initial release.
|
* Initial release.
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
Source: python3-squirrelbattle
|
Source: python3-squirrel-battle
|
||||||
Section: devel
|
Section: devel
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Maintainer: ynerant <ynrant@crans.org>
|
Maintainer: ynerant <ynrant@crans.org>
|
||||||
|
@ -8,7 +8,7 @@ Standards-Version: 4.1.4
|
||||||
Homepage: https://gitlab.crans.org/ynerant/squirrel-battle
|
Homepage: https://gitlab.crans.org/ynerant/squirrel-battle
|
||||||
X-Python3-Version: >= 3.6
|
X-Python3-Version: >= 3.6
|
||||||
|
|
||||||
Package: python3-squirrelbattle
|
Package: python3-squirrel-battle
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Multi-Arch: foreign
|
Multi-Arch: foreign
|
||||||
Depends: fonts-noto-color-emoji, ${python3:Depends}
|
Depends: fonts-noto-color-emoji, ${python3:Depends}
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
debian/75-fix-squirrel-emojis.conf etc/fonts/conf.avail
|
||||||
|
debian/75-fix-squirrel-emojis.conf etc/fonts/conf.d
|
|
@ -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)
|
|
@ -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']
|
|
@ -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
|
|
@ -0,0 +1,4 @@
|
||||||
|
Affichage de l'historique
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Pas encore documenté.
|
|
@ -0,0 +1,4 @@
|
||||||
|
Affichage de la carte
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Pas encore documenté.
|
|
@ -0,0 +1,4 @@
|
||||||
|
Affichage des menus
|
||||||
|
===================
|
||||||
|
|
||||||
|
Pas encore documenté.
|
|
@ -0,0 +1,4 @@
|
||||||
|
Affichage des statistiques
|
||||||
|
==========================
|
||||||
|
|
||||||
|
Pas encore documenté.
|
|
@ -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.
|
|
@ -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 ``💜``.
|
|
@ -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 ``🧸``.
|
|
@ -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.
|
|
@ -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
|
|
@ -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``.
|
|
@ -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``.
|
|
@ -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.
|
|
@ -0,0 +1,2 @@
|
||||||
|
sphinx
|
||||||
|
sphinx-rtd-theme
|
|
@ -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 ...
|
|
@ -0,0 +1,4 @@
|
||||||
|
Paramètres
|
||||||
|
==========
|
||||||
|
|
||||||
|
Pas encore documenté.
|
|
@ -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.
|
|
@ -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_ : ``🧸``
|
|
@ -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.
|
3
setup.py
3
setup.py
|
@ -32,8 +32,7 @@ setup(
|
||||||
],
|
],
|
||||||
python_requires='>=3.6',
|
python_requires='>=3.6',
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
data_files=["squirrelbattle/assets/" + file
|
package_data={"squirrelbattle": ["assets/*"]},
|
||||||
for file in os.listdir("squirrelbattle/assets")],
|
|
||||||
entry_points={
|
entry_points={
|
||||||
"console_scripts": [
|
"console_scripts": [
|
||||||
"squirrel-battle = squirrelbattle.bootstrap:Bootstrap.run_game",
|
"squirrel-battle = squirrelbattle.bootstrap:Bootstrap.run_game",
|
||||||
|
|
Loading…
Reference in New Issue