Use a key to use ladders

This commit is contained in:
Yohann D'ANELLO 2021-01-06 14:55:16 +01:00
parent 663fc0eecd
commit d06a405120
Signed by: ynerant
GPG Key ID: 3A75C55819C8CF85
7 changed files with 136 additions and 116 deletions

View File

@ -47,6 +47,7 @@ class KeyValues(Enum):
SPACE = auto()
CHAT = auto()
WAIT = auto()
LADDER = auto()
@staticmethod
def translate_key(key: str, settings: Settings) -> Optional["KeyValues"]:
@ -81,4 +82,6 @@ class KeyValues(Enum):
return KeyValues.CHAT
elif key == settings.KEY_WAIT:
return KeyValues.WAIT
elif key == settings.KEY_LADDER:
return KeyValues.LADDER
return None

View File

@ -102,38 +102,6 @@ class Game:
self.handle_key_pressed(
KeyValues.translate_key(key, self.settings), key)
# FIXME This code should not be there, but rather in Map.tick
y, x = self.player.y, self.player.x
if self.map.tiles[y][x].is_ladder():
# We move up on the ladder of the beginning,
# down at the end of the stage
move_down = y != self.map.start_y and x != self.map.start_x
old_map = self.map
self.map_index += 1 if move_down else -1
if self.map_index == -1:
self.map_index = 0
return
while self.map_index >= len(self.maps):
self.maps.append(Map.load(ResourceManager.get_asset_path(
"example_map_2.txt")))
new_map = self.map
old_map.remove_entity(self.player)
new_map.add_entity(self.player)
if move_down:
self.player.move(self.map.start_y, self.map.start_x)
elif KeyValues.translate_key(key, self.settings) \
in [KeyValues.UP, KeyValues.DOWN,
KeyValues.LEFT, KeyValues.RIGHT]:
ladder_y, ladder_x = -1, -1
for y in range(self.map.height):
for x in range(self.map.width):
if (y, x) != (self.map.start_y, self.map.start_x) \
and self.map.tiles[y][x].is_ladder():
ladder_y, ladder_x = y, x
break
self.player.move(ladder_y, ladder_x)
self.display_actions(DisplayActions.UPDATE)
def handle_key_pressed(self, key: Optional[KeyValues], raw_key: str = '')\
-> None:
"""
@ -186,6 +154,40 @@ class Game:
self.waiting_for_friendly_key = True
elif key == KeyValues.WAIT:
self.map.tick()
elif key == KeyValues.LADDER:
# On a ladder, we switch level
y, x = self.player.y, self.player.x
if not self.map.tiles[y][x].is_ladder():
return
# We move up on the ladder of the beginning,
# down at the end of the stage
move_down = y != self.map.start_y and x != self.map.start_x
old_map = self.map
self.map_index += 1 if move_down else -1
if self.map_index == -1:
self.map_index = 0
return
while self.map_index >= len(self.maps):
# TODO: generate a new map
self.maps.append(Map.load(ResourceManager.get_asset_path(
"example_map_2.txt")))
new_map = self.map
old_map.remove_entity(self.player)
new_map.add_entity(self.player)
if move_down:
self.player.move(self.map.start_y, self.map.start_x)
else:
# Find the ladder of the end of the game
ladder_y, ladder_x = -1, -1
for y in range(self.map.height):
for x in range(self.map.width):
if (y, x) != (self.map.start_y, self.map.start_x) \
and self.map.tiles[y][x].is_ladder():
ladder_y, ladder_x = y, x
break
self.player.move(ladder_y, ladder_x)
self.display_actions(DisplayActions.UPDATE)
def handle_friendly_entity_chat(self, key: KeyValues) -> None:
"""

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"POT-Creation-Date: 2021-01-06 14:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,19 +17,19 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: squirrelbattle/display/menudisplay.py:139
#: squirrelbattle/display/menudisplay.py:160
msgid "INVENTORY"
msgstr "BESTAND"
#: squirrelbattle/display/menudisplay.py:164
#: squirrelbattle/display/menudisplay.py:202
msgid "STALL"
msgstr "STAND"
#: squirrelbattle/display/statsdisplay.py:33
#: squirrelbattle/display/statsdisplay.py:34
msgid "Inventory:"
msgstr "Bestand:"
#: squirrelbattle/display/statsdisplay.py:52
#: squirrelbattle/display/statsdisplay.py:53
msgid "YOU ARE DEAD"
msgstr "SIE WURDEN GESTORBEN"
@ -58,11 +58,11 @@ msgstr "Die Bombe explodiert."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} täuscht seinem Körper mit {entity} aus."
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:277 squirrelbattle/tests/game_test.py:592
msgid "The buyer does not have enough money"
msgstr "Der Kaufer hat nicht genug Geld"
#: squirrelbattle/game.py:249
#: squirrelbattle/game.py:320
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -70,7 +70,7 @@ msgstr ""
"In Ihrer Speicherdatei fehlen einige Schlüssel.\n"
"Ihre Speicherung scheint korrupt zu sein. Es wird gelöscht."
#: squirrelbattle/game.py:257
#: squirrelbattle/game.py:328
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -78,7 +78,7 @@ msgstr ""
"Auf dieser Karte wurde kein Spieler gefunden!\n"
"Vielleicht sind Sie gestorben?"
#: squirrelbattle/game.py:277
#: squirrelbattle/game.py:348
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -86,22 +86,22 @@ msgstr ""
"Die JSON-Datei ist nicht korrekt.\n"
"Ihre Speicherung scheint korrumpiert. Sie wurde gelöscht."
#: squirrelbattle/interfaces.py:429
#: squirrelbattle/interfaces.py:451
#, python-brace-format
msgid "{name} hits {opponent}."
msgstr "{name} schlägt {opponent}."
#: squirrelbattle/interfaces.py:441
#: squirrelbattle/interfaces.py:463
#, python-brace-format
msgid "{name} takes {amount} damage."
msgstr "{name} nimmt {amount} Schadenspunkte."
#: squirrelbattle/interfaces.py:443
#: squirrelbattle/interfaces.py:465
#, python-brace-format
msgid "{name} dies."
msgstr "{name} stirbt."
#: squirrelbattle/interfaces.py:477
#: squirrelbattle/interfaces.py:499
#, python-brace-format
msgid "{entity} said: {message}"
msgstr "{entity} hat gesagt: {message}"
@ -110,8 +110,8 @@ msgstr "{entity} hat gesagt: {message}"
msgid "Back"
msgstr "Zurück"
#: squirrelbattle/tests/game_test.py:344 squirrelbattle/tests/game_test.py:347
#: squirrelbattle/tests/game_test.py:350 squirrelbattle/tests/game_test.py:353
#: squirrelbattle/tests/game_test.py:358 squirrelbattle/tests/game_test.py:361
#: squirrelbattle/tests/game_test.py:364 squirrelbattle/tests/game_test.py:367
#: squirrelbattle/tests/translations_test.py:16
msgid "New game"
msgstr "Neu Spiel"
@ -197,57 +197,61 @@ msgid "Key used to wait"
msgstr "Wartentaste"
#: squirrelbattle/tests/translations_test.py:56
msgid "Key used to use ladders"
msgstr "Leitertaste"
#: squirrelbattle/tests/translations_test.py:58
msgid "Texture pack"
msgstr "Textur-Packung"
#: squirrelbattle/tests/translations_test.py:57
#: squirrelbattle/tests/translations_test.py:59
msgid "Language"
msgstr "Sprache"
#: squirrelbattle/tests/translations_test.py:60
#: squirrelbattle/tests/translations_test.py:62
msgid "player"
msgstr "Spieler"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:64
msgid "hedgehog"
msgstr "Igel"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:65
msgid "merchant"
msgstr "Kaufmann"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:66
msgid "rabbit"
msgstr "Kanninchen"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:67
msgid "sunflower"
msgstr "Sonnenblume"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:68
msgid "teddy bear"
msgstr "Teddybär"
#: squirrelbattle/tests/translations_test.py:67
#: squirrelbattle/tests/translations_test.py:69
msgid "tiger"
msgstr "Tiger"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:71
msgid "body snatch potion"
msgstr "Leichenfleddererzaubertrank"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:72
msgid "bomb"
msgstr "Bombe"
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:73
msgid "explosion"
msgstr "Explosion"
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:74
msgid "heart"
msgstr "Herz"
#: squirrelbattle/tests/translations_test.py:73
#: squirrelbattle/tests/translations_test.py:75
msgid "sword"
msgstr "schwert"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"POT-Creation-Date: 2021-01-06 14:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,19 +17,19 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: squirrelbattle/display/menudisplay.py:139
#: squirrelbattle/display/menudisplay.py:160
msgid "INVENTORY"
msgstr "INVENTORIO"
#: squirrelbattle/display/menudisplay.py:164
#: squirrelbattle/display/menudisplay.py:202
msgid "STALL"
msgstr "PUESTO"
#: squirrelbattle/display/statsdisplay.py:33
#: squirrelbattle/display/statsdisplay.py:34
msgid "Inventory:"
msgstr "Inventorio :"
#: squirrelbattle/display/statsdisplay.py:52
#: squirrelbattle/display/statsdisplay.py:53
msgid "YOU ARE DEAD"
msgstr "ERES MUERTO"
@ -57,11 +57,11 @@ msgstr "La bomba está explotando."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} intercambió su cuerpo con {entity}."
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:277 squirrelbattle/tests/game_test.py:592
msgid "The buyer does not have enough money"
msgstr "El comprador no tiene suficiente dinero"
#: squirrelbattle/game.py:249
#: squirrelbattle/game.py:320
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -69,7 +69,7 @@ msgstr ""
"Algunas claves faltan en su archivo de guarda.\n"
"Su guarda parece a ser corruptido. Fue eliminado."
#: squirrelbattle/game.py:257
#: squirrelbattle/game.py:328
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -77,7 +77,7 @@ msgstr ""
"No jugador encontrado sobre la carta !\n"
"¿ Quizas murió ?"
#: squirrelbattle/game.py:277
#: squirrelbattle/game.py:348
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -85,22 +85,22 @@ msgstr ""
"El JSON archivo no es correcto.\n"
"Su guarda parece corrupta. Fue eliminada."
#: squirrelbattle/interfaces.py:429
#: squirrelbattle/interfaces.py:451
#, python-brace-format
msgid "{name} hits {opponent}."
msgstr "{name} golpea a {opponent}."
#: squirrelbattle/interfaces.py:441
#: squirrelbattle/interfaces.py:463
#, python-brace-format
msgid "{name} takes {amount} damage."
msgstr "{name} recibe {amount} daño."
#: squirrelbattle/interfaces.py:443
#: squirrelbattle/interfaces.py:465
#, python-brace-format
msgid "{name} dies."
msgstr "{name} se muere."
#: squirrelbattle/interfaces.py:477
#: squirrelbattle/interfaces.py:499
#, python-brace-format
msgid "{entity} said: {message}"
msgstr "{entity} dijo : {message}"
@ -109,8 +109,8 @@ msgstr "{entity} dijo : {message}"
msgid "Back"
msgstr "Volver"
#: squirrelbattle/tests/game_test.py:344 squirrelbattle/tests/game_test.py:347
#: squirrelbattle/tests/game_test.py:350 squirrelbattle/tests/game_test.py:353
#: squirrelbattle/tests/game_test.py:358 squirrelbattle/tests/game_test.py:361
#: squirrelbattle/tests/game_test.py:364 squirrelbattle/tests/game_test.py:367
#: squirrelbattle/tests/translations_test.py:16
msgid "New game"
msgstr "Nuevo partido"
@ -196,57 +196,61 @@ msgid "Key used to wait"
msgstr "Tecla para espera"
#: squirrelbattle/tests/translations_test.py:56
msgid "Key used to use ladders"
msgstr "Tecla para el uso de las escaleras"
#: squirrelbattle/tests/translations_test.py:58
msgid "Texture pack"
msgstr "Paquete de texturas"
#: squirrelbattle/tests/translations_test.py:57
#: squirrelbattle/tests/translations_test.py:59
msgid "Language"
msgstr "Languaje"
#: squirrelbattle/tests/translations_test.py:60
#: squirrelbattle/tests/translations_test.py:62
msgid "player"
msgstr "jugador"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:64
msgid "hedgehog"
msgstr "erizo"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:65
msgid "merchant"
msgstr "comerciante"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:66
msgid "rabbit"
msgstr "conejo"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:67
msgid "sunflower"
msgstr "girasol"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:68
msgid "teddy bear"
msgstr "osito de peluche"
#: squirrelbattle/tests/translations_test.py:67
#: squirrelbattle/tests/translations_test.py:69
msgid "tiger"
msgstr "tigre"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:71
msgid "body snatch potion"
msgstr "poción de intercambio"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:72
msgid "bomb"
msgstr "bomba"
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:73
msgid "explosion"
msgstr "explosión"
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:74
msgid "heart"
msgstr "corazón"
#: squirrelbattle/tests/translations_test.py:73
#: squirrelbattle/tests/translations_test.py:75
msgid "sword"
msgstr "espada"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: squirrelbattle 3.14.1\n"
"Report-Msgid-Bugs-To: squirrel-battle@crans.org\n"
"POT-Creation-Date: 2020-12-12 18:02+0100\n"
"POT-Creation-Date: 2021-01-06 14:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,19 +17,19 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: squirrelbattle/display/menudisplay.py:139
#: squirrelbattle/display/menudisplay.py:160
msgid "INVENTORY"
msgstr "INVENTAIRE"
#: squirrelbattle/display/menudisplay.py:164
#: squirrelbattle/display/menudisplay.py:202
msgid "STALL"
msgstr "STAND"
#: squirrelbattle/display/statsdisplay.py:33
#: squirrelbattle/display/statsdisplay.py:34
msgid "Inventory:"
msgstr "Inventaire :"
#: squirrelbattle/display/statsdisplay.py:52
#: squirrelbattle/display/statsdisplay.py:53
msgid "YOU ARE DEAD"
msgstr "VOUS ÊTES MORT"
@ -58,11 +58,11 @@ msgstr "La bombe explose."
msgid "{player} exchanged its body with {entity}."
msgstr "{player} a échangé son corps avec {entity}."
#: squirrelbattle/game.py:205 squirrelbattle/tests/game_test.py:573
#: squirrelbattle/game.py:277 squirrelbattle/tests/game_test.py:592
msgid "The buyer does not have enough money"
msgstr "L'acheteur n'a pas assez d'argent"
#: squirrelbattle/game.py:249
#: squirrelbattle/game.py:320
msgid ""
"Some keys are missing in your save file.\n"
"Your save seems to be corrupt. It got deleted."
@ -70,7 +70,7 @@ msgstr ""
"Certaines clés de votre ficher de sauvegarde sont manquantes.\n"
"Votre sauvegarde semble corrompue. Elle a été supprimée."
#: squirrelbattle/game.py:257
#: squirrelbattle/game.py:328
msgid ""
"No player was found on this map!\n"
"Maybe you died?"
@ -78,7 +78,7 @@ msgstr ""
"Aucun joueur n'a été trouvé sur la carte !\n"
"Peut-être êtes-vous mort ?"
#: squirrelbattle/game.py:277
#: squirrelbattle/game.py:348
msgid ""
"The JSON file is not correct.\n"
"Your save seems corrupted. It got deleted."
@ -86,22 +86,22 @@ msgstr ""
"Le fichier JSON de sauvegarde est incorrect.\n"
"Votre sauvegarde semble corrompue. Elle a été supprimée."
#: squirrelbattle/interfaces.py:429
#: squirrelbattle/interfaces.py:451
#, python-brace-format
msgid "{name} hits {opponent}."
msgstr "{name} frappe {opponent}."
#: squirrelbattle/interfaces.py:441
#: squirrelbattle/interfaces.py:463
#, python-brace-format
msgid "{name} takes {amount} damage."
msgstr "{name} prend {amount} points de dégât."
#: squirrelbattle/interfaces.py:443
#: squirrelbattle/interfaces.py:465
#, python-brace-format
msgid "{name} dies."
msgstr "{name} meurt."
#: squirrelbattle/interfaces.py:477
#: squirrelbattle/interfaces.py:499
#, python-brace-format
msgid "{entity} said: {message}"
msgstr "{entity} a dit : {message}"
@ -110,8 +110,8 @@ msgstr "{entity} a dit : {message}"
msgid "Back"
msgstr "Retour"
#: squirrelbattle/tests/game_test.py:344 squirrelbattle/tests/game_test.py:347
#: squirrelbattle/tests/game_test.py:350 squirrelbattle/tests/game_test.py:353
#: squirrelbattle/tests/game_test.py:358 squirrelbattle/tests/game_test.py:361
#: squirrelbattle/tests/game_test.py:364 squirrelbattle/tests/game_test.py:367
#: squirrelbattle/tests/translations_test.py:16
msgid "New game"
msgstr "Nouvelle partie"
@ -197,57 +197,61 @@ msgid "Key used to wait"
msgstr "Touche pour attendre"
#: squirrelbattle/tests/translations_test.py:56
msgid "Key used to use ladders"
msgstr "Touche pour utiliser les échelles"
#: squirrelbattle/tests/translations_test.py:58
msgid "Texture pack"
msgstr "Pack de textures"
#: squirrelbattle/tests/translations_test.py:57
#: squirrelbattle/tests/translations_test.py:59
msgid "Language"
msgstr "Langue"
#: squirrelbattle/tests/translations_test.py:60
#: squirrelbattle/tests/translations_test.py:62
msgid "player"
msgstr "joueur"
#: squirrelbattle/tests/translations_test.py:62
#: squirrelbattle/tests/translations_test.py:64
msgid "hedgehog"
msgstr "hérisson"
#: squirrelbattle/tests/translations_test.py:63
#: squirrelbattle/tests/translations_test.py:65
msgid "merchant"
msgstr "marchand"
#: squirrelbattle/tests/translations_test.py:64
#: squirrelbattle/tests/translations_test.py:66
msgid "rabbit"
msgstr "lapin"
#: squirrelbattle/tests/translations_test.py:65
#: squirrelbattle/tests/translations_test.py:67
msgid "sunflower"
msgstr "tournesol"
#: squirrelbattle/tests/translations_test.py:66
#: squirrelbattle/tests/translations_test.py:68
msgid "teddy bear"
msgstr "nounours"
#: squirrelbattle/tests/translations_test.py:67
#: squirrelbattle/tests/translations_test.py:69
msgid "tiger"
msgstr "tigre"
#: squirrelbattle/tests/translations_test.py:69
#: squirrelbattle/tests/translations_test.py:71
msgid "body snatch potion"
msgstr "potion d'arrachage de corps"
#: squirrelbattle/tests/translations_test.py:70
#: squirrelbattle/tests/translations_test.py:72
msgid "bomb"
msgstr "bombe"
#: squirrelbattle/tests/translations_test.py:71
#: squirrelbattle/tests/translations_test.py:73
msgid "explosion"
msgstr ""
#: squirrelbattle/tests/translations_test.py:72
#: squirrelbattle/tests/translations_test.py:74
msgid "heart"
msgstr "cœur"
#: squirrelbattle/tests/translations_test.py:73
#: squirrelbattle/tests/translations_test.py:75
msgid "sword"
msgstr "épée"

View File

@ -33,6 +33,7 @@ class Settings:
self.KEY_DROP = ['r', 'Key used to drop an item in the inventory']
self.KEY_CHAT = ['t', 'Key used to talk to a friendly entity']
self.KEY_WAIT = ['w', 'Key used to wait']
self.KEY_LADDER = ['<', 'Key used to use ladders']
self.TEXTURE_PACK = ['ascii', 'Texture pack']
self.LOCALE = [locale.getlocale()[0][:2], 'Language']

View File

@ -53,6 +53,8 @@ class TestTranslations(unittest.TestCase):
self.assertEqual(_("Key used to talk to a friendly entity"),
"Touche pour parler à une entité pacifique")
self.assertEqual(_("Key used to wait"), "Touche pour attendre")
self.assertEqual(_("Key used to use ladders"),
"Touche pour utiliser les échelles")
self.assertEqual(_("Texture pack"), "Pack de textures")
self.assertEqual(_("Language"), "Langue")