Bonjour à tous,
Je suis en train de créer un moteur en PHP/HTML pour créer des visual novels (équivalent numériques des livres dont vous êtes le héros). Voici des exemples rapidement mis en place à partir de projet de jeu pré-existants : Sadik City, Wind Fortress, Queen At Arms.
La plupart des visuals novels sont actuellement réalisés avec Ren'Py, un programme en Python. L'auteur crée son histoire sans utiliser de base de données, en éditant des fichiers dans un langage fortement inspiré du Python.
J'aimerais créer un script PHP qui permet d'importer automatiquement des jeux réalisés sous Ren'Py (et vice-versa, mais c'est une autre histoire). Il faut donc que je parse des fichiers écrits en quasi-python, pour récupérer les diverses informations. Et là que ça se complique car "les fonctions Python n'ont pas de begin ou end explicites, ni d'accolades qui pourraient marquer là ou commence et ou se termine le code de la fonction. Les seuls délimiteurs sont les deux points («:») et l'indentation du code." (source ici).
Voici un exemple de code, tiré de la document officielle de Ren'Py, auquel j'ai ajouté quelques commentaires :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 #création des personnages define sylvie = Character('Sylvie') define me = Character('Me') # début du jeu label start: me "Will you be my artist for a visual novel?" "Silence." "She is shocked, and then..." sylvie "Sure, but what is a \"visual novel?\"" # Le joueur doit choisir parmi une des deux réponses proposées menu: "It's a story with pictures.": jump vn "It's a hentai game.": jump hentai # si le joueur a répondu "It's a story with pictures." label vn: me "It's a story with pictures and music." jump marry # si le joueur a répondu "It's a hentai game." label hentai: me "it's a game with lots of sex." jump marry # suite du jeu commun au deux choix label marry: "--- years later ---"
Afin de pouvoir traiter ce code, j'aimerais convertir ce code en un tableau, sous la forme suivante :
Malheureusement, toutes les idées que j'ai eu sont compliquées à mettre en place et fort peu élégantes, alors que si cela se trouve, cela peut se faire en quelques lignes de code. Le principe est somme toute assez simple !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 $tableau = array( 'define sylvie = Character("Sylvie")', 'define me = Character("Me")', 'label start' => array( 'me "Will you be my artist for a visual novel?"', '"Silence"', '"She is shocked, and then..."', 'sylvie "Sure, but what is a \"visual novel?\""', 'menu' => array( '"It is a story with pictures."' => array( 'jump vn' ), '"It is a hentai game."' => array( 'jump hentai' ) ) ), 'label vn' => array( 'me "It is a story with pictures and music."', 'jump marry' ), 'label hentai' => array( 'me "it is a game with lots of sex."', 'jump marry' ), 'label marry' => array( '"--- years later ---"' ) );
Avez-vous des idées de fonctions PHP qui permettrait de classer les éléments selon leur indentation ?
Merci beaucoup d'avoir pris le temps de lire ce message et peut-être d'y répondre,
Korbn, aka Dr Schizo
Partager