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
|
||||
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)
|
||||
[![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).
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
python3-squirrelbattle (3.14) beta; urgency=low
|
||||
python3-squirrel-battle (3.14) beta; urgency=low
|
||||
|
||||
* Initial release.
|
||||
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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',
|
||||
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",
|
||||
|
|
Loading…
Reference in New Issue