Add Tiled support for design map
This commit is contained in:
parent
8a560e0f1a
commit
441c7eebf0
32
README.md
32
README.md
|
@ -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))
|
||||
|
|
|
@ -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>
|
|
@ -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\"\"\"")
|
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
13
asci_lib.py
13
asci_lib.py
|
@ -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 /!\ #
|
||||
|
|
|
@ -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()
|
|
@ -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()
|
|
@ -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))
|
Loading…
Reference in New Issue