More docs #147
|
@ -3,13 +3,6 @@ Gestion de l'affichage
|
||||||
|
|
||||||
.. _curses: https://docs.python.org/3/howto/curses.html
|
.. _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::
|
.. toctree::
|
||||||
:maxdepth: 3
|
:maxdepth: 3
|
||||||
|
@ -19,3 +12,51 @@ Python curses_.
|
||||||
map
|
map
|
||||||
stats
|
stats
|
||||||
logs
|
logs
|
||||||
|
|
||||||
|
L'intégralité de l'affichage du jeu est géré grâce à la bibliothèque native de Python curses_.
|
||||||
|
|
||||||
|
Initialisation du terminal
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Au lancement du jeu, le terminal est initialisé, les caractères spéciaux sont traduits en abstraction curses, les
|
||||||
|
caractères tapés par l'utilisateur ne sont plus affichés sur le terminal, on envoie les touches tapées à curses en
|
||||||
|
permanence sans avoir à taper sur Entrée, le curseur est rendu invisible, on active le support des couleurs et enfin
|
||||||
|
on déclare vouloir attraper tous les clics de souris. Tout cela est fait dans un contexte Python, qui permet
|
||||||
|
d'effectuer les opérations inverses lors de la fermeture du programme, même en cas de crash, afin de retrouver un
|
||||||
|
terminal utilisable.
|
||||||
|
|
||||||
|
|
||||||
|
Pads
|
||||||
|
----
|
||||||
|
|
||||||
|
Chaque morceau d'affichage est géré dans un *pad*. Un pad est un objet défini par curses, représentant une sous-fenêtre,
|
||||||
|
qui a l'avantage d'être un peu plus flexible qu'une simple fenêtre. Un pad peut en effet dépasser de l'écran, et on
|
||||||
|
peut choisir où placer le coin avant gauche et quelle partie du pad il faut dessiner sur la fenêtre.
|
||||||
|
|
||||||
|
Ce projet implémente une couche d'abstraction supplémentaire, afin d'avoir des objets plus utilisables. Chaque partie
|
||||||
|
d'affichage est réprésentée dans une classé étendant ``Display``. Chaque ``Display`` contient un (ou plusieurs) pads,
|
||||||
|
et propose une surcouche de certaines fonctions de curses.
|
||||||
|
|
||||||
|
L'affichage de texte par exemple sur un pad est plus sécurisée que celle proposée par curses. Le comportement par défaut
|
||||||
|
est d'afficher un message à partir d'une position donnée avec des attributs (gras, couleur, ...) donnés sous
|
||||||
|
forme numérique. Cette implémentation permet de passer les attributs voulus sous forme de paramètres booléens, de
|
||||||
|
choisir la couleur de front/de fond sans définir de paire curses, mais surtout de tronquer le texte à la place
|
||||||
|
disponible, afin de ne pas avoir à se soucier d'avoir un message trop grand et éviter des crashs non désirés.
|
||||||
|
|
||||||
|
Les ``Display`` sont gérés par un ``DisplayManager``. C'est lui qui décide, en fonction de l'état actuel du jeu,
|
||||||
|
d'afficher les bons ``Display`` aux bons endroits et de les redimensionner correctement en fonction de la taille du
|
||||||
|
terminal. C'est aussi lui qui propage l'information de modifier les attributs d'un ``Display``, si par exemple
|
||||||
|
l'inventaire du joueur a été mis à jour.
|
||||||
|
|
||||||
|
Il s'occupe enfin de tout redimensionner si jamais le terminal a changé de taille, après une intervention
|
||||||
|
de l'utilisateur.
|
||||||
|
|
||||||
|
|
||||||
|
Interactions avec la souris
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Le jeu attrape les clics de souris. C'est le ``DisplayManager``, connaissant l'état du jeu et ce qui est affiché à
|
||||||
|
quel endroit, qui va chercher sur quel ``Display`` on a cliqué. L'information est propagée au bon ``Display``, en
|
||||||
|
adaptant les coordonnées.
|
||||||
|
|
||||||
|
Tout ``Display`` qui contient un menu procède de la même façon pour propager l'information au bon menu.
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
Affichage de l'historique
|
Affichage de l'historique
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
L'historique des actions est affiché en bas de l'écran. À chaque action d'une entité, comme frapper quelqu'un, ou lorsque le joueur parle à une entité, cela s'affiche dans l'historique.
|
L'historique des actions est affiché en bas de l'écran. À chaque action d'une entité, comme frapper quelqu'un,
|
||||||
|
ou lorsque le joueur parle à une entité, cela s'affiche dans l'historique.
|
||||||
|
|
||||||
|
Il est affiché sur l'écran de jeu, en bas à gauche, occupant 1/5 de la hauteur et 4/5 de la largeur.
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
Affichage de la carte
|
Affichage de la carte
|
||||||
=====================
|
=====================
|
||||||
|
|
||||||
La carte s'affiche dans la partie en haut à gauche de l'écran, sur la plus grande partie de l'écran. On affiche les tuiles une par une, selon le texture pack sélectionné. La map est actualisée à chaque action d'une entité.
|
La carte s'affiche dans la partie en haut à gauche de l'écran, sur la plus grande partie de l'écran.
|
||||||
|
On affiche les tuiles une par une. Selon le pack de textures utilisé, les tuiles prennent un ou deux caractères de large.
|
||||||
|
Selon la visibilité de la case en fonction de la position du joueur, la couleur de la case sera plus ou moins sombre,
|
||||||
|
voire masquée si le joueur n'a jamais vu la case. Les entités sont ensuite affichées, si elles sont dans le champ de
|
||||||
|
vision du joueur.
|
||||||
|
|
||||||
L'afffichage de la carte suit les déplacements du joueur.
|
La carte est actualisée lorsque cela est nécessaire, à chaque tick de jeu.
|
||||||
|
|
||||||
|
L'afffichage de la carte suit les déplacements du joueur, dans le sens où la caméra est toujours centrée sur lui.
|
||||||
|
La carte prend 4/5 de l'affichage aussi bien en largeur qu'en hauteur.
|
||||||
|
|
|
@ -2,13 +2,16 @@ Affichage des menus
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Les menus sont affichés dans une boîte. On peut naviguer dedans avec les flèches haut et bas,
|
Les menus sont affichés dans une boîte. On peut naviguer dedans avec les flèches haut et bas,
|
||||||
et valider avec la touche entrée.
|
et valider avec la touche entrée. Il est également possible d'intéragir avec la souris.
|
||||||
|
|
||||||
Il y a plusieurs menus dans le jeu :
|
Il y a plusieurs menus dans le jeu :
|
||||||
|
|
||||||
* Le main menu, qui s'affiche au lancement du jeu.
|
* **Le menu principal**, qui s'affiche au lancement du jeu.
|
||||||
* Le menu des paramètres : si on sélectionne un choix de touche et qu'on appuie sur entrée, on peut ensuite appuyer sur une touche pour remplacer la touche utilisée.
|
* **Le menu des paramètres** : si on sélectionne un choix de touche et qu'on appuie sur entrée,
|
||||||
* Le menu des crédits : ce menu fonctionne avec la souris. En cliquant on affiche une image.
|
on peut ensuite appuyer sur une touche pour remplacer la touche utilisée.
|
||||||
* Le menu d'inventaire : dans l'inventaire, on peut utiliser les touches pour utiliser un item ou l'équiper...
|
* **Le menu des crédits** : ce menu fonctionne avec la souris. En cliquant on affiche une image.
|
||||||
* Le menu de vente : on peut utiliser les touches gauche et droite pour switcher entre l'inventaire du joueur et celui du marchand.
|
* **Le menu d'inventaire** : dans l'inventaire, on peut utiliser les touches pour utiliser un item ou l'équiper...
|
||||||
* Menu des warnings : Pas vraiment un menu, mais affiche juste un message dans une petite boite pour prévenir le joueur que quelquechose ne va pas.
|
* **Le menu de vente** : on peut utiliser les touches gauche et droite pour switcher entre l'inventaire du joueur
|
||||||
|
et celui du marchand.
|
||||||
|
* **Menu des warnings** : Pas vraiment un menu, mais affiche juste un message dans une petite boite pour prévenir
|
||||||
|
le joueur que quelque chose ne va pas.
|
||||||
|
|
|
@ -4,7 +4,7 @@ Affichage des statistiques
|
||||||
.. _Hazel: ../index.html
|
.. _Hazel: ../index.html
|
||||||
|
|
||||||
Les statistiques du joueur sont affichées en haut à droite de l'écran
|
Les statistiques du joueur sont affichées en haut à droite de l'écran
|
||||||
et séparées du reste de l'affichage par une barre verticale.
|
et séparées du reste de l'affichage par une barre verticale, occupant 1/5 de la place horizontale.
|
||||||
|
|
||||||
Les informations affichées sont :
|
Les informations affichées sont :
|
||||||
|
|
||||||
|
@ -23,4 +23,9 @@ Les informations affichées sont :
|
||||||
* **Equipped armor** - le plastron porté par le joueur.
|
* **Equipped armor** - le plastron porté par le joueur.
|
||||||
* **Equipped helmet** - le casque porté par le joueur.
|
* **Equipped helmet** - le casque porté par le joueur.
|
||||||
* **Hazel** - le nombre d'Hazel_ que le joueur possède.
|
* **Hazel** - le nombre d'Hazel_ que le joueur possède.
|
||||||
* **Vous êtes mort** - Éventuellement, si le joueur est mort.
|
* **Vous êtes mort** - Éventuellement, si le joueur est mort.
|
||||||
|
|
||||||
|
Si le joueur possède un `monocle <../entities/items.html#monocle>`_, alors les statistiques d'une entité proche sont
|
||||||
|
également affichées dessous.
|
||||||
|
|
||||||
|
Des aides de jeu peuvent enfin être affichées en bas, telles que la touche sur laquelle il faut appuyer.
|
||||||
|
|
|
@ -42,13 +42,21 @@ En interagissant avec un marchand, il est possible de lui acheter et de lui
|
||||||
vendre différents objets contre des Hazels, la monnaie du jeu.
|
vendre différents objets contre des Hazels, la monnaie du jeu.
|
||||||
Les prix sont fixés :
|
Les prix sont fixés :
|
||||||
|
|
||||||
|
* Anneau de coup critique : 15 Hazels
|
||||||
|
* Anneau d'expérience : 25 Hazels
|
||||||
|
* Arc : 22 Hazels
|
||||||
|
* Baguette de feu : 36 Hazels
|
||||||
* Bombe : 4 Hazels
|
* Bombe : 4 Hazels
|
||||||
* Coeur : 3 Hazels
|
|
||||||
* Potion d'arrachage de corps : 14 Hazels
|
|
||||||
* Épée : 20 Hazels
|
|
||||||
* Bouclier : 16 Hazels
|
* Bouclier : 16 Hazels
|
||||||
* Casque : 18 Hazels
|
* Casque : 18 Hazels
|
||||||
|
* Coeur : 3 Hazels
|
||||||
|
* Épée : 20 Hazels
|
||||||
|
* Monocle : 10 Hazels
|
||||||
|
* Parchemin de dégâts : 18 Hazels
|
||||||
|
* Parchemin de faiblesse : 13 Hazels
|
||||||
* Plastron : 30 Hazels
|
* Plastron : 30 Hazels
|
||||||
|
* Potion d'arrachage de corps : 14 Hazels
|
||||||
|
* Règle : 2 Hazels
|
||||||
|
|
||||||
Le marchand commence avec 75 Hazels en sa possession, contre 42 pour le joueur.
|
Le marchand commence avec 75 Hazels en sa possession, contre 42 pour le joueur.
|
||||||
|
|
||||||
|
@ -59,11 +67,11 @@ Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🦜``
|
||||||
Trompette
|
Trompette
|
||||||
---------
|
---------
|
||||||
|
|
||||||
Son nom est fixé à 'trumpet'. Une trompette est un familier, c'est à dire que
|
Son nom est fixé à `trumpet`. Une trompette est un familier, c'est à dire que
|
||||||
c'est une entité attaquante qui suit globalement le joueurs et attaque les monstres
|
c'est une entité attaquante qui suit globalement le joueurs et attaque les monstres
|
||||||
qui se rapprochent trop du joueur.
|
qui se rapprochent trop du joueur.
|
||||||
|
|
||||||
Elle a 20 point de vie et une attaque de 3.
|
Elle a 20 points de vie et une attaque de 3.
|
||||||
|
|
||||||
Dans le `pack de textures`_ ASCII, elle est représentée par le caractère ``/``.
|
Dans le `pack de textures`_ ASCII, elle est représentée par le caractère ``/``.
|
||||||
|
|
||||||
|
|
|
@ -103,8 +103,10 @@ Il est représenté par les caractères ``0`` et ``⛑️``.
|
||||||
Plastron
|
Plastron
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Le plastron est un type d'armure que l'on peut trouver uniquement par achat auprès d'un marchand pour le coût de 30 Hazels ou dans un coffre. Il s'équippe sur le corps.
|
Le plastron est un type d'armure que l'on peut trouver uniquement par achat
|
||||||
Une fois équipé, le casque ajoute 4 de constitution à son porteur, lui permettant de prendre moins de dégâts.
|
auprès d'un marchand pour le coût de 30 Hazels ou dans un coffre. Il s'équippe sur le corps.
|
||||||
|
Une fois équipé, le casque ajoute 4 de constitution à son porteur,
|
||||||
|
lui permettant de prendre moins de dégâts.
|
||||||
|
|
||||||
Il est représenté par les caractères ``(`` et ``🦺``.
|
Il est représenté par les caractères ``(`` et ``🦺``.
|
||||||
|
|
||||||
|
@ -123,6 +125,18 @@ Il y a plusieurs types d'anneaux :
|
||||||
|
|
||||||
Un anneau est représenté par les caractères ``o`` et ``💍``.
|
Un anneau est représenté par les caractères ``o`` et ``💍``.
|
||||||
|
|
||||||
|
Monocle
|
||||||
|
-------
|
||||||
|
|
||||||
|
L'anneau est un objet que l'on peut trouver uniquement par achat auprès d'un
|
||||||
|
marchand pour le prix de 10 Hazels. On peut le trouver sinon dans les coffres.
|
||||||
|
Il s'équippe sur la main secondaire.
|
||||||
|
|
||||||
|
Une fois porté, il permet de voir les caractéristiques des entités voisines
|
||||||
|
(nom, force, chance de critique, ...).
|
||||||
|
|
||||||
|
Un monocle est représenté par les caractères ``ô`` et ``🧐``.
|
||||||
|
|
||||||
Parchemin
|
Parchemin
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
@ -153,4 +167,4 @@ Un baton est une arme à distance qui s'équippe dans la main principale. Pour l
|
||||||
La boule de feu fait 6 + intelligence du joueur dégâts.
|
La boule de feu fait 6 + intelligence du joueur dégâts.
|
||||||
Le baton coûte 36 Hazels chez un marchand. On peut le trouver sinon dans les coffres.
|
Le baton coûte 36 Hazels chez un marchand. On peut le trouver sinon dans les coffres.
|
||||||
|
|
||||||
Il est représenté par les caractères ``:`` et ``🪄``.
|
Il est représenté par les caractères ``:`` et ``🪄``.
|
||||||
|
|
|
@ -521,7 +521,7 @@ class ScrollofWeakening(Item):
|
||||||
self.held_by.inventory.remove(self)
|
self.held_by.inventory.remove(self)
|
||||||
|
|
||||||
|
|
||||||
class LongRangeWeapon(Item):
|
class LongRangeWeapon(Weapon):
|
||||||
def __init__(self, damage: int = 4,
|
def __init__(self, damage: int = 4,
|
||||||
rang: int = 3, *args, **kwargs):
|
rang: int = 3, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
Loading…
Reference in New Issue