diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ff5c142..602bc97 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,21 +3,16 @@ stages: - quality-assurance - build -py37: - stage: test - image: python:3.7-alpine - before_script: - - apk add --no-cache gettext - - pip install tox - script: tox -e py3 -py38: +py310: stage: test - image: python:3.8-alpine + image: python:rc-alpine before_script: - apk add --no-cache gettext - pip install tox script: tox -e py3 + only: + - master py39: @@ -28,6 +23,38 @@ py39: - pip install tox script: tox -e py3 + +py38: + stage: test + image: python:3.8-alpine + before_script: + - apk add --no-cache gettext + - pip install tox + script: tox -e py3 + + +py37: + stage: test + image: python:3.7-alpine + before_script: + - apk add --no-cache gettext + - pip install tox + script: tox -e py3 + only: + - master + + +py36: + stage: test + image: python:3.6-alpine + before_script: + - apk add --no-cache gettext + - pip install tox + script: tox -e py3 + only: + - master + + linters: stage: quality-assurance image: python:3-alpine @@ -36,11 +63,15 @@ linters: script: tox -e linters allow_failure: true + build-deb: image: debian:buster-slim stage: build before_script: - - apt-get update && apt-get -y --no-install-recommends install build-essential debmake dh-python debhelper gettext python3-all python3-setuptools + - > + apt-get update && apt-get -y --no-install-recommends install + build-essential debmake dh-python debhelper gettext python3-all + python3-setuptools script: - dpkg-buildpackage - mkdir build && cp ../*.deb build/ diff --git a/README.md b/README.md index 6ad3063..d6898db 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ [![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) +[![Supported Python versions](https://img.shields.io/pypi/pyversions/squirrel-battle)](https://pypi.org/project/squirrel-battle/) [![PyPI](https://img.shields.io/pypi/v/squirrel-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/) diff --git a/docs/deployment.rst b/docs/deployment.rst index 6bde6f0..b96246b 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -275,7 +275,7 @@ Construction du paquet Debian ----------------------------- Structure du paquet -------------------- +~~~~~~~~~~~~~~~~~~~ L'ensemble des instructions pour construire le paquet Debian est situé dans le dossier ``debian/``. @@ -292,14 +292,14 @@ Le paquet ``fonts-noto-color-emoji`` est en dépendance pour le bon affichage des émojis. Mettre à jour le paquet ------------------------ +~~~~~~~~~~~~~~~~~~~~~~~ Pour changer la version du paquet, il faut ajouter des lignes dans le fichier ``changelog``. Construire le paquet --------------------- +~~~~~~~~~~~~~~~~~~~~ Il faut partir d'une installation de Debian. diff --git a/docs/display/logs.rst b/docs/display/logs.rst index 3ad130d..9e925a3 100644 --- a/docs/display/logs.rst +++ b/docs/display/logs.rst @@ -1,4 +1,4 @@ Affichage de l'historique ========================= -Pas encore documenté. +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. diff --git a/docs/display/map.rst b/docs/display/map.rst index 1daa85a..749b32c 100644 --- a/docs/display/map.rst +++ b/docs/display/map.rst @@ -1,4 +1,6 @@ Affichage de la carte ===================== -Pas encore documenté. +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é. + +L'afffichage de la carte suit les déplacements du joueur. diff --git a/docs/display/menu.rst b/docs/display/menu.rst index 84be36c..30c4e98 100644 --- a/docs/display/menu.rst +++ b/docs/display/menu.rst @@ -1,4 +1,14 @@ Affichage des menus =================== -Pas encore documenté. +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. + +Il y a plusieurs menus dans le jeu : + +* Le main menu, 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 crédits : ce menu fonctionne avec la souris. En cliquant on affiche une image. +* Le menu d'inventaire : dans l'inventaire, on peut utiliser les touches pour utiliser un item ou l'équiper... +* 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 quelquechose ne va pas. diff --git a/docs/display/stats.rst b/docs/display/stats.rst index 1b5f697..e993c7f 100644 --- a/docs/display/stats.rst +++ b/docs/display/stats.rst @@ -1,4 +1,26 @@ Affichage des statistiques ========================== -Pas encore documenté. +.. _Hazel: ../index.html + +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. + +Les informations affichées sont : + +* **LVL** - le niveau du joueur +* **EXP** - la quantité d'expérience que le joueur a gagné et combien il lui en faut avant le prochain niveau. +* **HP** - la quantité de vie que le joueur a actuellement et combien il peut en avoir au maximum. +* **STR** - la force du joueur. +* **INT** - l'intelligence du joueur. +* **CHR** - le charisme du joueur. +* **DEX** - la dextérité du joueur. +* **CON** - la constitution du joueur. +* **CRI** - le pourcentage de chance de coup critique. +* **Inventory** - le contenu de l'inventaire du joueur. +* **Equipped main** - l'objet équipé dans la main principale. +* **Equipped secondary** - l'objet équipé dans la main secondaire. +* **Equipped armor** - le plastron porté par le joueur. +* **Equipped helmet** - le casque porté par le joueur. +* **Hazel** - le nombre d'Hazel_ que le joueur possède. +* **Vous êtes mort** - Éventuellement, si le joueur est mort. \ No newline at end of file diff --git a/docs/entities/friendly.rst b/docs/entities/friendly.rst new file mode 100644 index 0000000..9fca40f --- /dev/null +++ b/docs/entities/friendly.rst @@ -0,0 +1,70 @@ +Entités pacifiques +================== + +.. _`entité attaquante`: index.html#entites-attaquantes +.. _`pack de textures`: ../texture-pack.html + +Chaque entité pacifique est en particulier une `entité attaquante`_, +et hérite donc de ses attributs, et peut alors être attaquée. +Ils sont cependant non-hostiles. + +Il est possible d'interagir avec ces entités. En s'approchant d'elles, en +appuyant sur la touche ``T`` suivie de la direction où regarder, un échange +débute. + +Si l'on s'adresse à un marchand, on devrait voir à l'écran l'inventaire du joueur +et l'inventaire du marchand. Les flèches haut et bas permettent de sélectionner +un objet, les touches droite et gauche de passer d'un inventaire à l'autre, et la +touche entrée valide l'action. + +On dénombre actuellement 3 types d'entités pacifiques : + +Tournesol +--------- + +Son nom est fixé à `sunflower`. Il a par défaut une **15** points de vie. + +Interagir avec un tournesol n'a pas de réel intérêt, si ce n'est déclencher +le « pouvoir des fleurs !! » ou bien savoir que « le soleil est chaud +aujourd'hui ». + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``I``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🌻``. + + +Marchand +-------- + +Son nom est fixé à `merchant`. Il a par défaut **5** points de vie. + +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. +Les prix sont fixés : + +* Bombe : 4 Hazels +* Coeur : 3 Hazels +* Potion d'arrachage de corps : 14 Hazels +* Épée : 20 Hazels +* Bouclier : 16 Hazels +* Casque : 18 Hazels +* Plastron : 30 Hazels + +Le marchand commence avec 75 Hazels en sa possession, contre 42 pour le joueur. + +Dans le `pack de textures`_ ASCII, il est représenté par le caractère ``M``. + +Dans le `pack de textures`_ écureuil, il est représenté par l'émoji ``🦜``. + +Trompette +--------- + +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 +qui se rapprochent trop du joueur. + +Elle a 20 point 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`_ écureuil, elle est représentée par l'émoji ``🎺``. \ No newline at end of file diff --git a/docs/entities/index.rst b/docs/entities/index.rst index 1d63bbf..d23f79c 100644 --- a/docs/entities/index.rst +++ b/docs/entities/index.rst @@ -7,6 +7,7 @@ Entités player monsters + friendly items Entité @@ -38,11 +39,12 @@ Entité attaquante ----------------- .. _monstre: monsters.html +.. _entité pacifique: friendly.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_. +un monstre_, une `entité pacifique`_ ou bien le joueur_. Elles disposent toutes, en plus des paramètres d'entité, des attributs suivants : @@ -77,3 +79,14 @@ en-dessous de 0 point de vie. À ce moment-là, l'entité est retirée de la car 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. + + +Entité pacifique +---------------- + +Une entité pacifique (``FriendlyEntity``) est un cas particulier d'entité +attaquante. Contrairement aux montres, elles ne peuvent pas attaquer le joueur. + +On peut parler à une entité pacifique en appuyant sur la touche ``T`` puis en +appuyant sur la direction dans laquelle on veut parler à l'entité. + diff --git a/docs/entities/items.rst b/docs/entities/items.rst index 521ca91..e4f1c0a 100644 --- a/docs/entities/items.rst +++ b/docs/entities/items.rst @@ -19,7 +19,7 @@ Un objet dispose de deux paramètres : Si l'objet est dans l'inventaire, renvoie son propriétaire. -Deux types d'objets sont pour l'instant présents : +Il y a plusieurs types d'objets : Bombe @@ -28,23 +28,94 @@ 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. +dans l'inventaire. Le joueur peut ensuite utiliser la bombe, via l'inventaire +ou après l'avoir équipée, qui fera alors 3 dégâts à toutes les +`entités attaquantes`_ situées à moins de trois cases au bout de 4 ticks de jeu. 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 ``💣``. +et dans le `pack de textures`_ écureuil par l'émoji ``💣``. Lors de l'explosion, +la bombe est remplacée par un symbole ``%`` ou l'émoji ``💥`` selon le pack de +textures utilisé. -.. 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. +La bombe coûte 4 Hazels auprès des marchands. 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. +Un cœur est un objet que l'on ne peut pas ramasser. Dès que le joueur s'en +approche ou qu'il l'achète auprès d'un marchand, 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 ``❤`` +Il est représenté dans le `pack de textures`_ ASCII par le caractère ``❤`` et dans le `pack de textures`_ écureuil par l'émoji ``💜``. + +Le cœur coûte 3 Hazels auprès des marchands. + + +Potion d'arrachage de corps +--------------------------- + +Cette potion permet, une fois utilisée, d'échanger toutes ses caractéristiques +avec une autre entité aléatoire sur la carte. Cela inclut la force, la position, +l'icône, ... + +Elle est représentée par les caractères ``I`` et ``🔀`` + +Cette potion coûte 14 Hazels auprès des marchands. + + +Épée +---- + +L'épée est un objet que l'on peut trouver uniquement par achat auprès d'un +marchand pour le coût de 20 Hazels. Une fois équipée, l'épée ajoute 3 de force +à son porteur. + +Elle est représentée par les caractères ``†`` et ``🗡️``. + + +Bouclier +-------- + +Le bouclier est un objet que l'on peut trouver uniquement par achat auprès d'un +marchand pour le coût de 16 Hazels. Il s'équippe dans la main secondaire. +Une fois équipé, le bouclier ajoute 1 de +constitution à son porteur, lui permettant de parer mieux les coups. + +Il est représenté par les caractères ``D`` et ``🛡️``. + +Casque +------ + +Le casque est un objet que l'on peut trouver uniquement par achat auprès d'un +marchand pour le coût de 18 Hazels. Il s'équippe sur la tête. +Une fois équipé, le casque ajoute 2 de +constitution à son porteur, lui permettant de prendre moins de dêgats. + +Il est représenté par les caractères ``0`` et ``⛑️``. + +Plastron +-------- + +Le plastron est un objet que l'on peut trouver uniquement par achat auprès d'un +marchand pour le coût de 30 Hazels. Il s'équippe sur le corps. +Une fois équipé, le casque ajoute 4 de +constitution à son porteur, lui permettant de prendre moins de dêgats. + +Il est représenté par les caractères ``(`` et ``🦺``. + +Anneau +------ + +L'anneau est un objet que l'on peut trouver uniquement par achat auprès d'un +marchand. Il s'équippe sur la main secondaire. +Une fois équipé, l'anneau ajoute un bonus à une ou plusieurs statistiques du +joueur, améliorant sa capacité à se débarasser des monstres. + +Il y a plusieurs types d'anneaux : + +* **Anneau de coup critique**, qui augmente la chance de coup critique de 20%. Il coute 15 Hazels. +* **Anneau de gain d'expérience amélioré**, qui multiplie le gain d'expérience du joueur par 2. Il coûte 25 Hazels. + +Un anneau est représenté par les caractères ``o`` et ``💍``. \ No newline at end of file diff --git a/docs/entities/monsters.rst b/docs/entities/monsters.rst index b6f287c..31735bd 100644 --- a/docs/entities/monsters.rst +++ b/docs/entities/monsters.rst @@ -13,7 +13,7 @@ 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 : +On dénombre actuellement 5 types de monstres : Hérisson -------- @@ -40,6 +40,8 @@ Lapin Son nom est fixé à `rabbit`. Il a par défaut une force à **1** et **15** points de vie. +Il a une chance de coup critique de 30%. + 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 ``🐇``. @@ -53,3 +55,14 @@ 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 ``🧸``. + + +Pyguargue +--------- +Son nom est fixé à `eagle`. Il a par défaut une force à **1000** et **5000** points de vie. + +Il s'agit d'un boss difficilement tuable, qui apparait plus rarement que les autres monstres. + +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 ``🦅``. diff --git a/docs/index.rst b/docs/index.rst index 1cb7d83..71d7343 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -17,6 +17,10 @@ Bienvenue dans la documentation de Squirrel Battle ! :target: https://pypi.org/project/squirrel-battle/ :alt: PyPI +.. image:: https://img.shields.io/pypi/pyversions/squirrel-battle + :target: https://pypi.org/project/squirrel-battle/ + :alt: Supported Python versions + .. image:: https://img.shields.io/pypi/dm/squirrel-battle :target: https://pypi.org/project/squirrel-battle/ :alt: PyPI downloads diff --git a/docs/requirements.txt b/docs/requirements.txt index cbf1e36..540deda 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,2 +1,2 @@ -sphinx -sphinx-rtd-theme +sphinx>=3.3 +sphinx-rtd-theme>=0.5 diff --git a/docs/settings.rst b/docs/settings.rst index a8644d4..60fa5c1 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -1,4 +1,38 @@ Paramètres ========== -Pas encore documenté. +.. _pack de textures: texture-pack.html + +Il est possible de changer les touches utilisées dans le jeu dans le menu des paramètres. + +On peut aussi changer le `pack de textures`_ utilisé. + +Touches +------- + +Les touches utilisées de base sont : + +* **Aller vers le haut** : z +* **Aller vers le haut (secondaire)** : ↑ +* **Aller vers le bas** : s +* **Aller vers le bas (secondaire)** : ↓ +* **Aller à droite** : d +* **Aller à droite (secondaire)** : → +* **Aller à gauche** : q +* **Aller à gauche (secondaire)** : ← +* **Valider le choix** : Entrée +* **Inventaire** : i +* **Utiliser un objet** : u +* **Équiper un objet** : e +* **Lacher un objet** : r +* **Parler** : t +* **Attendre** : w + +Autres +------ + +.. _ascii: texture-pack.html#Pack ASCII +.. _squirrel: texture-pack.html#Pack Écureuil + +* **Texture pack utilisé** : parmi ascii_ et squirrel_ +* **Langue utilisée** : parmi anglais, français, espagnol, allemand \ No newline at end of file diff --git a/docs/texture-pack.rst b/docs/texture-pack.rst index 377a3cf..072b6ff 100644 --- a/docs/texture-pack.rst +++ b/docs/texture-pack.rst @@ -9,18 +9,30 @@ Pack de textures .. _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 .. _Tigre: entities/monsters.html#tigre .. _Nounours: entities/monsters.html#nounours +.. _Tournesol: entities/friendly.html#tournesol +.. _Marchand: entities/friendly.html#marchand +.. _Cœur: entities/items.html#coeur +.. _Bombe: entities/items.html#bombe +.. _Explosion: entities/items.html#bombe +.. _Potion d'arrachage de corps: entities/items.html +.. _Épée: entities/items.html#epee +.. _Bouclier: entities/items.html#bouclier +.. _Hazel: ../index.html +.. _Plastron: ../entities/items.html#plastron +.. _Pyguargue: ../entities/monsters.html#Pyguargue +.. _Casque: ../entities/items.html#Casque +.. _Anneau: ../entities/items.html#Anneau +.. _Trompette: ../entities/items.html#Trompette 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. +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. @@ -39,11 +51,23 @@ Chaque tuile fait un caractère de large. * Entités * Joueur_ : ``@`` * Hérisson_ : ``*`` - * Cœur_ : ``❤`` - * Bombe_ : ``o`` * Lapin_ : ``Y`` * Tigre_ : ``n`` * Nounours_ : ``8`` + * Tournesol_ : ``I`` + * Marchand_ : ``M`` + * Cœur_ : ``❤`` + * Bombe_ : ``o`` + * Explosion_ : ``%`` + * `Potion d'arrachage de corps`_ : ``S`` + * Épée_ : ``†`` + * Bouclier_ : ``D`` + * Hazel_ : ``¤`` + * Plastron_ : ``(`` + * Pyguargue_ : ``µ`` + * Casque_ : ``0`` + * Anneau_ : ``o`` + * Trompette_ : ``/`` Pack Écureuil @@ -58,8 +82,20 @@ Chaque tuile fait 2 caractères de large pour afficher les émojis proprement. * Entités * Joueur_ : ``🐿`` * Hérisson_ : ``🦔`` - * Cœur_ : ``💜`` - * Bombe_ : ``💣`` * Lapin_ : ``🐇`` * Tigre_ : ``🐅`` * Nounours_ : ``🧸`` + * Tournesol_ : ``🌻`` + * Marchand_ : ``🦜`` + * Cœur_ : ``💜`` + * Bombe_ : ``💣`` + * Explosion_ : ``💥`` + * `Potion d'arrachage de corps`_ : ``🔀`` + * Épée_ : ``🗡️`` + * Bouclier_ : ``🛡️`` + * Hazel_ : ``🌰`` + * Plastron_ : ``🦺`` + * Pyguargue_ : ``🦅`` + * Casque_ : ``⛑️`` + * Anneau_ : ``💍`` + * Trompette_ : ``🎺`` diff --git a/squirrelbattle/display/display.py b/squirrelbattle/display/display.py index 884c997..3f9e08f 100644 --- a/squirrelbattle/display/display.py +++ b/squirrelbattle/display/display.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: GPL-3.0-or-later import curses +import sys from typing import Any, Optional, Tuple, Union from squirrelbattle.display.texturepack import TexturePack @@ -104,6 +105,8 @@ class Display: attr |= curses.A_BOLD if bold else 0 attr |= curses.A_DIM if dim else 0 attr |= curses.A_INVIS if invis else 0 + # Italic is supported since Python 3.7 + italic &= sys.version_info >= (3, 7,) attr |= curses.A_ITALIC if italic else 0 attr |= curses.A_NORMAL if normal else 0 attr |= curses.A_PROTECT if protect else 0 diff --git a/squirrelbattle/display/texturepack.py b/squirrelbattle/display/texturepack.py index 9ad513d..81302b3 100644 --- a/squirrelbattle/display/texturepack.py +++ b/squirrelbattle/display/texturepack.py @@ -21,26 +21,26 @@ class TexturePack: BODY_SNATCH_POTION: str BOMB: str - HEART: str - HEDGEHOG: str + CHESTPLATE: str + EAGLE: str EMPTY: str FLOOR: str HAZELNUT: str + HEART: str + HEDGEHOG: str + HELMET: str MERCHANT: str PLAYER: str RABBIT: str + RING_OF_CRITICAL_DAMAGE: str + RING_OF_MORE_EXPERIENCE: str + SHIELD: str SUNFLOWER: str SWORD: str TEDDY_BEAR: str TIGER: str TRUMPET: str WALL: str - EAGLE: str - SHIELD: str - CHESTPLATE: str - HELMET: str - RING_OF_MORE_EXPERIENCE: str - RING_OF_CRITICAL_DAMAGE: str ASCII_PACK: "TexturePack" SQUIRREL_PACK: "TexturePack" @@ -73,6 +73,8 @@ TexturePack.ASCII_PACK = TexturePack( BODY_SNATCH_POTION='S', BOMB='ç', + CHESTPLATE='(', + EAGLE='µ', EMPTY=' ', EXPLOSION='%', FLOOR='.', @@ -80,9 +82,12 @@ TexturePack.ASCII_PACK = TexturePack( HAZELNUT='¤', HEART='❤', HEDGEHOG='*', + HELMET='0', MERCHANT='M', PLAYER='@', RABBIT='Y', + RING_OF_CRITICAL_DAMAGE='o', + RING_OF_MORE_EXPERIENCE='o', SHIELD='D', SUNFLOWER='I', SWORD='\u2020', @@ -90,11 +95,6 @@ TexturePack.ASCII_PACK = TexturePack( TIGER='n', TRUMPET='/', WALL='#', - EAGLE='µ', - CHESTPLATE='(', - HELMET='0', - RING_OF_MORE_EXPERIENCE='o', - RING_OF_CRITICAL_DAMAGE='o', ) TexturePack.SQUIRREL_PACK = TexturePack( @@ -108,6 +108,8 @@ TexturePack.SQUIRREL_PACK = TexturePack( BODY_SNATCH_POTION='🔀', BOMB='💣', + CHESTPLATE='🦺', + EAGLE='🦅', EMPTY=' ', EXPLOSION='💥', FLOOR='██', @@ -116,9 +118,12 @@ TexturePack.SQUIRREL_PACK = TexturePack( HAZELNUT='🌰', HEART='💜', HEDGEHOG='🦔', + HELMET='⛑️', PLAYER='🐿️ ️', MERCHANT='🦜', RABBIT='🐇', + RING_OF_CRITICAL_DAMAGE='💍', + RING_OF_MORE_EXPERIENCE='💍', SHIELD='🛡️ ', SUNFLOWER='🌻', SWORD='🗡️ ', @@ -126,9 +131,4 @@ TexturePack.SQUIRREL_PACK = TexturePack( TIGER='🐅', TRUMPET='🎺', WALL='🧱', - EAGLE='🦅', - CHESTPLATE='🦺', - HELMET='⛑️', - RING_OF_MORE_EXPERIENCE='💍', - RING_OF_CRITICAL_DAMAGE='💍', ) diff --git a/squirrelbattle/entities/items.py b/squirrelbattle/entities/items.py index 874cf45..0436e37 100644 --- a/squirrelbattle/entities/items.py +++ b/squirrelbattle/entities/items.py @@ -79,7 +79,7 @@ class Item(Entity): """ Returns the list of all item classes. """ - return [BodySnatchPotion, Bomb, Heart, Shield, Sword, + return [BodySnatchPotion, Bomb, Heart, Shield, Sword,\ Chestplate, Helmet, RingCritical, RingXP] def be_sold(self, buyer: InventoryHolder, seller: InventoryHolder) -> bool: @@ -279,20 +279,17 @@ class Shield(Armor): """ Class of shield items, they can be equipped in the other hand. """ - def __init__(self, name: str = "shield", constitution: int = 2, - price: int = 6, *args, **kwargs): + price: int = 16, *args, **kwargs): super().__init__(name=name, constitution=constitution, price=price, *args, **kwargs) - class Helmet(Armor): """ Class of helmet items, they can be equipped on the head. """ - def __init__(self, name: str = "helmet", constitution: int = 2, - price: int = 8, *args, **kwargs): + price: int = 18, *args, **kwargs): super().__init__(name=name, constitution=constitution, price=price, *args, **kwargs) @@ -302,14 +299,12 @@ class Helmet(Armor): self.held_by.remove_from_inventory(self) self.held_by.equipped_helmet = self - class Chestplate(Armor): """ Class of chestplate items, they can be equipped on the body. """ - def __init__(self, name: str = "chestplate", constitution: int = 4, - price: int = 15, *args, **kwargs): + price: int = 30, *args, **kwargs): super().__init__(name=name, constitution=constitution, price=price, *args, **kwargs) @@ -319,7 +314,6 @@ class Chestplate(Armor): self.held_by.remove_from_inventory(self) self.held_by.equipped_armor = self - class BodySnatchPotion(Item): """ The body-snatch potion allows to exchange all characteristics with a random diff --git a/squirrelbattle/interfaces.py b/squirrelbattle/interfaces.py index ff47fda..f1f740b 100644 --- a/squirrelbattle/interfaces.py +++ b/squirrelbattle/interfaces.py @@ -604,9 +604,10 @@ class Entity: from squirrelbattle.entities.items import BodySnatchPotion, Bomb, Heart from squirrelbattle.entities.monsters import Tiger, Hedgehog, \ Rabbit, TeddyBear, GiantSeaEagle - from squirrelbattle.entities.friendly import Merchant, Sunflower + from squirrelbattle.entities.friendly import Merchant, Sunflower, \ + Trumpet return [BodySnatchPotion, Bomb, Heart, Hedgehog, Rabbit, TeddyBear, - Sunflower, Tiger, Merchant, GiantSeaEagle] + Sunflower, Tiger, Merchant, GiantSeaEagle, Trumpet] @staticmethod def get_weights() -> list: @@ -615,7 +616,7 @@ class Entity: be used to spawn random entities with a certain probability. """ return [3, 5, 6, 5, 5, 5, - 5, 4, 4, 1] + 5, 4, 4, 1, 2] @staticmethod def get_all_entity_classes_in_a_dict() -> dict: