Hellper Chevalier Dragon (niveau 5)
Messages postés : 1190 Date d'inscription : 04/03/2013 Jauge LPC :
| Sujet: HeroBook Mer 23 Avr 2014 - 22:31 | |
| I. Description Version 1.2 Poids de l'archive : 3Mo Herobook est un interpréteur codé en ruby permettant de créer facilement un livre à embranchement sous forme numérique. Il est basé un système de pages et une syntaxe simple, gère la mise en forme et détecte automatiquement si un choix mène vers une page inexistante. La version actuelle utilise la console, mais les versions futures devraient inclure une GUI et de fait plus de possibilités. HeroBook disponible sur Windows. D'autres version sortiront plus tard pour GNU/Linux et Mac. Voici un screenshot réalisé à partir d'un projet test : II. Installation Lien du programmeL'archive contient le programme avec un template (pour se faire une idée de comment ça fonctionne). III. Utilisation Tutoriel en cours de réécriture. IV. Code source - Code:
# encoding: UTF-8 def loadeur(nom) fichier = File.open("Pages/#{nom}.txt", "r").read.gsub("\n","").gsub("<br>", "\n").split("/") fichier end def afficher(texte) texte = texte.split("<par>") texte.each do |i| autoRN(i) puts $vocab[0] passage = gets end end def autoRN(chaine) if chaine.length < 80 puts chaine else caractere = 79 while not chaine[caractere] == " " caractere -= 1 end puts (chaine[0..caractere]) autoRN(chaine[(caractere+1)..-1]) end end def inputMinMax(min, max) inpute = min - 1 while not inpute.between?(min, max) inpute = gets.chomp.to_i if not inpute.between?(min, max) puts sprintf($vocab[3], min, max) end end inpute end def exist?(file) File.file?("Pages/#{file}.txt") end def existTell?(file) if File.file?("Pages/#{file}.txt") "" else $vocab[5] end end $vocab = File.open("Vocab/vocab.txt", "r").read.split("/") toload = "MainPage" while true page = loadeur(toload) texte = page[0] suite = page[1] afficher(texte) suite = suite.split("_") puts "0. #{$vocab[1]}" #~ suite.each do |i| #~ i = i.split("|") #~ end 0.upto(suite.length - 1) do |index| suite[index] = suite[index].split("|") puts "#{index+1}. #{suite[index][0]}" + existTell?(suite[index][1]) end while true puts $vocab[2] choix = inputMinMax(0, suite.length) if exist?(suite[choix-1][1]) || choix == 0 break else puts $vocab[4] end end if choix == 0 break else toload = suite[choix-1][1] end end
- Spoiler:
-
I. Description Version 1.1 Poids de l'archive : 8ko Herobook est un interpréteur codé en python permettant de créer facilement un livre à embranchement sous forme numérique. Il est basé un système de pages et une syntaxe simple, gère la mise en forme et détecte automatiquement si un choix mène vers une page inexistante. La version actuelle utilise la console, mais les versions futures devraient inclure une GUI et de fait plus de possibilités. HeroBook est normalement compatible avec Windows, GNU/Linux et Mac. Cependant, n'ayant pas de quoi tester sur un autre support que Windows il est possible de rencontrer des bugs inattendus sur d'autres plateformes. Merci de me le signaler le cas échéant. Voici un screenshot réalisé à partir d'un projet test : II. Installation Lien du programmeL'archive contient deux versions du programme, une première avec un template et une seconde avec un projet test (dont sont tirés les screnshots. Le python étant un langage interprété il vous faudra installer la bibliothèque python : Si vous êtes sur windowsSi vous êtes sur macSi vous êtes sur linuxSi vous êtes assez grand pour chercher vous-mêmeIII. Utilisation Voici un tutoriel écrit : - Spoiler:
-
1. Faite une copie d'un des dossiers de l'archive et renommez-le comme vous voulez 2. Ouvrez le dossier et retirez tous les fichiers texte. 3. Créez un fichier texte nommé "MainPage". 4. Écrivez dedans le contenu de votre première page et terminez-la par un /. N'utilisez pas de saut de ligne. 5. Si vous jugez votre texte trop long ou que vous voulez changer son rythme, vous pouvez le séparer en paragraphes en plaçant un symbole _ à chaque séparation. 6. Écrivez après le / les choix qui seront offerts au joueurs et séparez-les par un _. Évitez de proposer plus de 15 choix mais mettez-en au moins un. 7. Après chaque choix, insérez un § suivit d'un identifiant pour la prochaine page à charger. 8. Créez un autre fichier texte et donnez-lui le nom que vous voulez (aka l'identifiant nécessaire pour que l'interpréteur charge le fichier à partir d'un autre). 9. Écrivez dedans le contenu de la page. N'utilisez pas de saut de ligne. 10. Revenez à l'étape 5 et continuez autant de fois que vous le souhaitez.
IV. Code source - Code:
# -*- coding: utf8 -*- import HellStuff ################################################################## ##Création des fonctions ################################################################## ##Charge un fichier .txt et le retourne sous forme d'une liste (en utilisant les / comme séparation) def load(a) : a += ".txt" ofi = open(a, "r") return ofi.read().split("/") ##Met en forme le texte à afficher pour éviter les retours à la ligne au milieu d'un mot def afficher(a) : a = a.split("_") for b in a : HellStuff.autoRN(b) c = input(i[0]) ##Pour savoir si la page poitée existe def exist(a) : a += ".txt" try : ofi = open(a, "r") return ("", True) except : return (i[5], False) ##Affiche des choix disponibles def choice(a) : b = 1 print("0. " + i[1]) for c in a : c = c.split("§") print (str(b) + ". " + c[0] + " " + exist(c[1])[0]) b += 1 ##Demande de rentrer un entier entre deux points def intOnlyBetween(mini, maxi) : a = False c = mini - 1 while not a or c < mini or c > maxi : try : print (i[2]) b = input() c = int(b) a = True except : pass if not a : print (i[3].format(mini, maxi)) elif c < mini or c > maxi : print (i[3].format(mini, maxi)) a = False return b ################################################################## ##Code du jeu ################################################################## global i i = load("vocab") b = "MainPage" while True : room = load(b) choix = room[1].split("_") afficher(room[0]) choice(choix) c = int(intOnlyBetween(0, len(choix))) if c == 0 : break d = choix[c-1].split("§") if not exist(d[1])[1] : print (i[4]) else : b = d[1]
Dernière édition par Hellper le Dim 13 Sep 2015 - 14:51, édité 6 fois |
|
Hellper Chevalier Dragon (niveau 5)
Messages postés : 1190 Date d'inscription : 04/03/2013 Jauge LPC :
| Sujet: Re: HeroBook Sam 7 Juin 2014 - 16:53 | |
| HeroBook passe en version 1.1 o/ Il est maintenant possible de modifier les instruction du jeu à partir du fichier vocab.txt, ce qui facilite la traduction. Le code source a été mis à jour. |
|
Hellper Chevalier Dragon (niveau 5)
Messages postés : 1190 Date d'inscription : 04/03/2013 Jauge LPC :
| Sujet: Re: HeroBook Dim 21 Juin 2015 - 17:26 | |
| Up sur le projet qui maintenant est codé en ruby. Le premier post a été mis à jour (l'ancienne présentation est conservée dans un spoiler pour archives). |
|
Raven Rédacteur
Messages postés : 1323 Date d'inscription : 20/04/2013 Jauge LPC :
| Sujet: Re: HeroBook Lun 13 Juil 2015 - 15:12 | |
| Bon, j'ai DL et testé, j'trouve ça vachement sympa ! Ca me rappelle ces tout premiers jeux de JDR qu'on avait sur les vieux PCs (on a gardé un Windows 3.1 pour ça d'ailleurs). L'avantage c'est qu'on peut vraiment faire tout c'qu'on veut dedans comme c'est que du texte. C'est bien foutu, pas compliqué à mettre en place et ça peut du coup se partager facilement. Bref, bravo pour ce joli projet qui sort de l'ordinaire Hellper ! |
|
Hellper Chevalier Dragon (niveau 5)
Messages postés : 1190 Date d'inscription : 04/03/2013 Jauge LPC :
| Sujet: Re: HeroBook Lun 13 Juil 2015 - 16:50 | |
| Content que ça te plaise |
|
Hellper Chevalier Dragon (niveau 5)
Messages postés : 1190 Date d'inscription : 04/03/2013 Jauge LPC :
| Sujet: Re: HeroBook Dim 13 Sep 2015 - 14:55 | |
| Herobook passe à la version 1.2. Maintenant il est possible du'itiliser des auts de ligne afin de rendre son texte plus lisible. Pour vous donner une idée de ce que ça peut apporter voici un avant/après : Avant : - Code:
This is a first paragraph. Whith a second line. Separated in two lines._And a second one./This will load Room2|Room2_This goes nowhere|haha
Après : - Code:
This is a first paragraph. <br>Whith a second line. Separated in two lines. <par> And a second one. / This will load Room2|Room2_ This goes nowhere|haha
Vous remarquerez au passage l'ajout de la balise - Code:
<br>
pour rajouter des sauts de lignes et l'ajout de la balise - Code:
<par>
pour séparer les différents paragraphes de la page. Voilà maintenant que j'ai fait une update vous pouvez re-spammer le projet de commentaire (comme à votre habitude) et voter pour le projet du mois |
|
purplehills Mage (niveau 4)
Messages postés : 323 Date d'inscription : 19/04/2015 Jauge LPC :
| Sujet: Re: HeroBook Dim 13 Sep 2015 - 15:30 | |
| C'est cool ça, effectivement ça me rappelle de lointtttains souvenirs ^^
Bravo pour l'initiative, faudra que je teste. _____________________ |
|