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) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user