Add Tiled support for design map

This commit is contained in:
Shadow15510 2021-08-15 17:27:58 +02:00
parent 8a560e0f1a
commit 441c7eebf0
8 changed files with 68 additions and 12 deletions

View File

@ -33,6 +33,9 @@ Pour se diriger :
Accéder aux statistiques :
- 7
Accéder au menu d'affichage libre :
- 8
Quitter le jeu :
- 9
@ -44,7 +47,7 @@ Votre jeu va se diviser en grandes partie :
- création de la carte
- création des évènements
- gestion des combats
- affichage des statistiques
- affichage des statistiques et fonction d'affichage libre
- finalisation
Vous aurez à plusieurs reprise des fonctions à programmer, ces fonctions auront accès à des variables du moteurs, elles sont toutes en lecture seule, exceptée les statistiques qui peuvent être modifiée par effet de bord.
@ -114,7 +117,7 @@ def combats(xp, carte_actuelle, x, y, stat):
return stat[0] > 0
```
#### Affichage des statistiques
#### Affichage des statistiques et fonction libre
La fonction est assez triviale :
- la fonction devra prendre en argument la liste des statistiques (les points d'expérience, au sens du moteur, sont considérés comme ne faisant pas partie des statistiques)
@ -127,6 +130,15 @@ def affichage_stat(stat):
print("Points de vie .: {}".format(stat[0]))
```
La fonction libre est une fonction qui est appelée lorsque l'utilisateur presse la touche 8. Vous pouvez afficher n'importe quoi, y compris rien, ou même modifier des trucs. Cette fonction doit être complètement programmée par vous. Elle ne doit répondre qu'à un seul impératif :
- la fonction prend en argument les statistiques du joueur et renvoie `None`
La fonction va donc ressembler à :
```
def custom(stat):
...
```
#### Finalisation
Il ne reste plus qu'à faire une petite fonction de nom du votre jeu qui va créer un modèle vierge de jeu rôle et qui va transmettre toutes ces données au modèle. Il vous restera ensuite à lancer cette fonction pour jouer.
@ -135,9 +147,10 @@ Cette fonction devra prendre dans l'ordre :
- le tuple des cartes
- la fonction des évènements
- la fonction des combats
- la fonction d'affichages des statistiques
- la fonction d'affichages des statistiques et la fonction libre
- les points d'expérience de la partie (lorsque l'expérience du joueur atteint cette valeur, le jeu se termine)
- la liste des statistiques (avec les points de vie en première place)
- [optionnel] la liste `data` utilisée par le moteur et non modifiable, de la forme `[XP, id de la map, x, y]`
### Exemples d'utilisation
@ -199,13 +212,16 @@ def affichage_stat(stat):
print("Statistiques")
print("PV : {}".format(pv))
print("Argent : {}".format(argent))
def custom(stat):
pass
```
Il ne reste plus qu'à tout donner au moteur !
La limite d'XP de la partie est fixée à 3, on commence la partie avec 100 points de vie et 5 Argent.
```
def mon_jeu():
rpg_python = Asci(carte_monde, evenements, combat, affichage_stat, 3, [100, 5])
rpg_python = Asci(carte_monde, evenements, combat, affichage_stat, custom, 3, [100, 5])
rpg_python.mainloop()
```
@ -305,7 +321,7 @@ def evenements(xp, carte_actuelle, x, y, stat):
De même que pour l'exemple précédent : pas de combat. Je vous laisse gérer l'affichage des statistiques. Il reste la fonction finale :
```
def mon_jeu():
rpg_python = Asci(cartes, evenements, combat, affichage_statistique, 13, [100])
rpg_python = Asci(cartes, evenements, combat, affichage_statistique, custom, 13, [100])
rpg_python.mainloop()
```
La limite est à 13 xp comme on peut le voir sur l'arbre :
@ -504,11 +520,15 @@ def affichage_stat(stat):
print("Points de vie .: {}".format(pv))
print("Points attaque : {}".format(pa))
print("Points defense : {}".format(pd))
def custom(stat):
pass
```
et :
```
def mon_jeu(stat=[100, 0, 0], data=[0, 0, 0, 0]):
rpg_python = Asci(cartes, evenements, combats, affichage_stat, 5, stat, data)
rpg_python = Asci(cartes, evenements, combats, affichage_stat, custom, 5, stat, data)
stat, data = rpg_python.mainloop()
print("Pour reprendre :")
print("mon_jeu({}, {})".format(stat, data))

4
Tiled/Asci_tileset.tsx Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.5" tiledversion="1.7.1" name="Asci_tileset" tilewidth="42" tileheight="85" tilecount="96" columns="16">
<image source="tileset.png" width="672" height="510"/>
</tileset>

14
Tiled/asci_converter.py Normal file
View File

@ -0,0 +1,14 @@
def to_string(csv_filename, output_filename="world"):
char_list = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ "
with open(csv_filename, "r") as file:
data = [[int(char_id) for char_id in line.split(",")] for line in file.read().splitlines()]
output = r""
for line in data:
for char_id in line:
output += char_list[char_id]
output += "\n"
with open(f"{output_filename}.py", "w") as file:
file.write(f"{output_filename}_map = r\"\"\"\n{output}\n\"\"\"")

BIN
Tiled/tileset.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -47,7 +47,7 @@ class Screen:
class Asci:
def __init__(self, maps, fn_events, fn_fight, fn_stat, end_game, stat, data=[0, 0, 0, 0], screen_width=21, screen_height=6):
def __init__(self, maps, fn_events, fn_fight, fn_stat, fn_custom, end_game, stat, data=[0, 0, 0, 0], screen_width=21, screen_height=6):
# Load save ; data = [XP, map_id, x, y]
self.data = data
if not stat or type(stat) != list:
@ -63,6 +63,7 @@ class Asci:
self._game_event = fn_events
self._game_fight = fn_fight
self._game_stat = fn_stat
self._game_custom = fn_custom
# Screen configuration
self.screen = Screen(screen_width, screen_height)
@ -121,6 +122,7 @@ class Asci:
self.screen.set_world(self.maps[self.data[1]][0])
else:
self.screen.set_world(self.maps[0])
self.map_width, self.map_height = self.screen.get_map_size()
# Talk
elif cell_test == 3:
@ -145,12 +147,17 @@ class Asci:
self._game_stat(self.stat)
input()
# Custom display function
elif key == 8:
self.screen.clear()
self._game_custom(self.stat)
# Quit
if key == 9:
elif key == 9:
self.screen.clear()
# /!\ TEST /!\ #
if key == 8:
elif key == 4:
print(self.data)
input()
# /!\ TEST /!\ #

View File

@ -39,7 +39,10 @@ def affichage_stat(stat):
print("PV : {}".format(pv))
print("Argent : {}".format(argent))
def custom(stat):
pass
def mon_jeu():
rpg_python = Asci(carte_monde, evenements, combat, affichage_stat, 4, [100, 5])
rpg_python = Asci(carte_monde, evenements, combat, affichage_stat, custom, 4, [100, 5])
rpg_python.mainloop()

View File

@ -71,6 +71,10 @@ def affichage_statistique(stat):
print("Points de Vie : {}".format(stat[0]))
def custom(stat):
pass
def mon_jeu():
rpg_python = Asci(cartes, evenements, combat, affichage_statistique, 13, [100])
rpg_python = Asci(cartes, evenements, combat, affichage_statistique, custom, 13, [100])
rpg_python.mainloop()

View File

@ -116,8 +116,12 @@ def affichage_stat(stat):
print("Points defense : {}".format(pd))
def custom(stat):
pass
def mon_jeu(stat=[100, 0, 0], data=[0, 0, 0, 0]):
rpg_python = Asci(cartes, evenements, combats, affichage_stat, 5, stat, data)
rpg_python = Asci(cartes, evenements, combats, affichage_stat, custom 5, stat, data)
stat, data = rpg_python.mainloop()
print("Pour reprendre :")
print("mon_jeu({}, {})".format(stat, data))