Il reste quelques aspects à finir sur l’extension, et entre autres, j’aurais besoin d’experts en Inform 6 (mule, auraes, stormi, otto, yoruk… pas moi en tout cas).
Voilà vos missions, si vous les acceptez :
[size=90]ACCOMPLI : Affichage des nombres en lettres[/size]
[size=85]Les nombres semblent bien s’écrire, mais pour cela, j’ai dû enlever deux print qui affichaient des espaces. Le problème, c’est que je ne les ai pas vraiment enlevés, je les ai juste fait afficher du texte vide (« »). Si quelqu’un peut les enlever, car j’ai essayé mais ça faisait planter le compilateur (chercher « Natrium » dans la source). Aussi, on peut tout réécrire from scratch, si jamais il y a un moyen plus optimisé de le faire.
[spoiler][code]Include (-
Array LanguageNumbers table
‹ un › 1 ‹ une › 1 ‹ deux › 2 ‹ trois › 3 ‹ quatre › 4 ‹ cinq › 5
‹ six › 6 ‹ sept › 7 ‹ huit › 8 ‹ neuf › 9 ‹ dix › 10
‹ onze › 11 ‹ douze › 12 ‹ treize › 13 ‹ quatorze › 14 ‹ quinze › 15
‹ seize › 16 ‹ dix-sept › 17 ‹ dix-huit › 18 ‹ dix-neuf › 19 ‹ vingt › 20
‹ vingt et un › 21 ‹ vingt-deux › 22 ‹ vingt-trois › 23 ‹ vingt-quatre › 24
‹ vingt-cinq › 25 ‹ vingt-six › 26 ‹ vingt-sept › 27 ‹ vingt-huit › 28
‹ vingt-neuf › 29 ‹ trente › 30
;
[ LanguageNumber n f;
if (n==0) { print « zéro »; rfalse; }
if (n<0) { print "moins "; n=-n; }
#Iftrue (WORDSIZE == 4);
if (n >= 1000000000) {
if (f == 1) print " « ;
print (LanguageNumber) n/1000000000, " milliards »; n = n%1000000000; f = 1;
}
if (n >= 1000000) {
if (f == 1) print " « ;
print (LanguageNumber) n/1000000, " millions »; n = n%1000000; f = 1;
}
#Endif;
if (n >= 1000) {
if (f == 1) print " ";
if (n/1000 == 1) print "mille ";
else print (LanguageNumber) n/1000, " mille ";
n = n%1000; f = 1;
}
if (n>=100) {
if (f == 1) print « »; ! Natrium729 : à enlever ? Ça fonctionne sans, en tout cas.
if (n/100 == 1) print « »; ! Natrium729 : à enlever ? Ça fonctionne sans, en tout cas.
else print (LanguageNumber) n/100, " ";
if (n%100 ~= 0) print "cent ";
else print « cents »;
n=n%100; f = 1;
}
if (n==0) rfalse;
switch(n)
{
1: print "un";
2: print "deux";
3: print "trois";
4: print "quatre";
5: print "cinq";
6: print "six";
7: print "sept";
8: print "huit";
9: print "neuf";
10: print "dix";
11: print "onze";
12: print "douze";
13: print "treize";
14: print "quatorze";
15: print "quinze";
16: print "seize";
17: print "dix-sept";
18: print "dix-huit";
19: print "dix-neuf";
20 to 99:
switch(n/10)
{
2: print "vingt";
if (n%10 == 1) {print " et un"; return; }
3: print "trente";
if (n%10 == 1) {print " et un"; return; }
4: print "quarante";
if (n%10 == 1) {print " et un"; return; }
5: print "cinquante";
if (n%10 == 1) {print " et un"; return; }
6: print "soixante";
if (n%10 == 1) {print " et un"; return; }
7: print "soixante";
if (n%10 == 1) {print " et onze"; return; } !*!
print "-"; LanguageNumber(10 + n%10); return;
8: if (n%10 == 0) {print "quatre-vingts"; return; }
print "quatre-vingt";
9: print "quatre-vingt-"; LanguageNumber(10+ n%10); return;
}
if (n%10 ~= 0)
{
print "-"; LanguageNumber(n%10);
}
}
];
-) instead of « Numbers » in « Language.i6t ».[/code][/spoiler][/size]
[size=90]ACCOMPLI : Affichage des heures en lettres[/size]
[size=85]Pareil que pour les nombres, il y avait des erreurs (comme « une heures ») et elle n’était pas au format 24 heures (« quatre heures » au lieu de « seize heures », par exemple). Encore une fois, ce serait à modifier ou à recommencer si on peut faire plus optimisé (ça, je peux toujours essayer, car ça n’a pas l’air d’être du code très compliqué, il faut juste que je cherche un algorithme sur internet). J’ai pour l’instant remplacé ce bout de code par du code I7 provisoire.
[spoiler][code]Include (-
[ PrintTimeOfDayEnglish t h m dir aop say_minutes quad;
! adapted the spanish version by Sebastian Arg
quad = 1; ! =1 es la primera media hora, =2 es la segunda
h = (t/60) % 12; m = t%60; if (h==0) h=12;
if (m==0) { if(h==1) {print « une » ;print " heure"; return ;} else print (number) h;print " heures"; return; } !infsp hack
dir = « heures »;! infsp hack
if (m > 30) { m = 60-m; h = (h+1)%12; if (h==0) h=12; dir = « heures moins »; quad=2; } !infsp hack
switch(m) {
1: say_minutes = « une »;
2: say_minutes = « deux »;
3: say_minutes = « trois »;
4: say_minutes = « quatre »;
5: say_minutes = « cinq »;
6: say_minutes = « six »;
7: say_minutes = « sept »;
8: say_minutes = « huit »;
9: say_minutes = « neuf »;
10: say_minutes = « dix »;
11: say_minutes = « onze »;
12: say_minutes = « douze »;
13: say_minutes = « treize »;
14: say_minutes = « quatorze »;
15: if (quad==2) say_minutes = « le quart »; else say_minutes = « et quart »;
16: say_minutes = « seize »;
17: say_minutes = « dix-sept »;
18: say_minutes = « dix-huit »;
19: say_minutes = « dix-neuf »;
20: say_minutes = « vingt »;
21: say_minutes = « vingt et une »;
22: say_minutes = « vingt-deux »;
23: say_minutes = « vingt-trois »;
24: say_minutes = « vingt-quatre »;
25: say_minutes = « vingt-cinq »;
26: say_minutes = « vingt-six »;
27: say_minutes = « vingt-sept »;
28: say_minutes = « vingt-huit »;
29: say_minutes = « vingt-neuf »;
30: say_minutes = « et demie »;
default:
if (quad == 2){
print (number) m;
if (m%5 ~= 0) {
if (m == 1) print " minute"; else print " minutes"; ! infsp hack
}
}
if (quad == 1){
if (h==1) { print (number) h," heure « ; print (number) m; } else print (number) h, » heures "; print (number) m;
if (m%5 ~= 0) {
if (m == 1) print « »; else print « »; ! infsp hack
}
}
return;
}
if (h==1) print « une »; else print (number) h; print " ", (string) dir, " ", (string) say_minutes;!infsp hack
];
-) instead of « Analogue Printing » in « Time.i6t ».
[Voilà ce que j’ai ajouté]
To say (T - a time) in words:
let HP be the hours part of T;
let MP be the minutes part of T;
if MP > 30, increment HP;
let H be « [if HP is 0 or HP is 24]minuit[else if HP is 12]midi[else][HP in words] heure[s][end if] »;
let M be « [if MP is 0][else if MP is 30]et demie[else if MP > 30]moins [60 - MP in words][else][MP in words][end if] »;
if MP is 15 or MP is 45, replace the text « quinze » in M with « [if MP is 15]et[else]le[end if] quart »;
let heure finale be « [H] [M] »;
replace the text « un » in heure finale with « une »;
say « [heure finale] ».[/code][/spoiler][/size]
[size=120]Le code Translation to Informese[/size]
Tout le Part 4.6 - Informese translation of commands est à revoir (je le colle pas ici, parce que c’est un gros morceau).
Il faudrait revoir la transformation des mots « dessus » et « dessous » en « sur-lui » et « sous-lui », car ça empêche la compréhension d’action comme « >regarder en dessous du tapis ».
[size=85]ACCOMPLI : Il y a un code qui ajoute une espace après chaque apostrophe qui est devenu inutile (je pense) car j’ai ajouté du code qui enlève les apostrophes directement (grâce à l’extension Punctuation Removal d’Emily Short). Ou alors, il faut aller fouiller dans cette extension, et coller son code dans le code de l’extension.
En plus, faire ça résoudrait sûrement un bug qui est causé par mon code qui enlève les apostrophes : les pronoms élidés ne fonctionnent plus : « >la ouvrir » marche, mais plus « l’ouvrir », car la dernière commande est transformée en « l ouvrir » (sans apostrophes donc).
Ce qu’il faudrait faire, c’est d’abord remplacer les pronoms élidés, puis enlever les apostrophes, je pense.
(j’espère que ce que je viens d’expliquer est compréhensible…)[/size]
Les commandes qui commencent par « je » enlève le « je », mais je pense que c’est complètement inutile, étant donné que de toute façon, il n’y a que les commandes à l’infinitif qui sont acceptées (et qui donc ne commenceront jamais par « je »).
[size=85]ACCOMPLI : Les pronoms concernant le joueur ne fonctionnent plus non plus quand il sont élidés (m’, s’, …) à cause encore une fois des apostrophes qui sont enlevées.[/size]
[size=85]ACCOMPLI : Le dernier problème que je peux voir, c’est qu’il faut spécifier dans les lignes de compréhension « à/a » à chaque fois, alors qu’il faudrait juste écrire « a », l’accent supposant s’enlever.[/size]
Enfin, il y a une tonne de commentaires dans cette partie du code I6, donc à voir s’il n’y a pas moyen d’optimiser tout ça (mais on risque de casser quelque chose…).
Je sais que c’est beaucoup, et qu’il y a des risques que plus rien ne fonctionnent, mais il y a des problèmes vraiment importants, je trouve (comme les pronoms élidés).
Merci à ceux qui s’en chargeront !