171212-15

News:

Ouverture du forum Jeux1d100. Bienvenue !


Recent Posts

Pages1 2 3
1
DraMu ? / Re: Carnet de développement (l...
Last post by Tchey - 170713-17
Juillet 2017, reprise des activités avec GDev

2
DraMu ? / Re: Aides et Astuces pour les ...
Last post by Tchey - 170704-12
Euh... en fait tu as raison, c'est simplement le import * qui n'est pas autorisé... mais en fait c'est pas grave, car ce qu'il faut importé, c'est simplement le dictionnaire lang, donc un from lang_FR import lang marche ;)

Je viens de tester avec ce lang.py:
Code Select

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import importlib

def trad_FR():
    lang_file = "FR"
    from lang_FR import lang
    print(lang["It_s_a_sentence"])

def trad_EN():
    lang_file = "EN"
    from lang_EN import lang
    print(lang["It_s_a_sentence"])

lang_file = "EN"
lang_filename = ("lang." + lang_file)

from lang_EN import *

print("INIT lang.py: "+lang["It_s_a_sentence"])


On voit que c'est OK dans la fenetre principale de python...

Reste à faire :
- utiliser from lang_<lang_file> à la place du nom de fichier en dur
- passer à la suite, maintenant qu'on sait que la langue française est bien chargée en mémoire (refresh du menu d'options ?)... mais ça, je ne sais pas faire :)
3
DraMu ? / Re: Aides et Astuces pour les ...
Last post by Tchey - 170702-10
http://forum.canardpc.com/threads/102958-J-ai-un-nom-et-un-concept-Je-n-ai-aucune-affinit%C3%A9-avec-la-programmation?p=10573264&viewfull=1#post10573264

Salut Tchey :)

OK, je vais essayer de détailler tout en restant simple ;)
Comme c'est un peu long, je vais faire 2 MP.

Comme tout ton code est en anglais et qu'on imagine qu'il soit lisible/maintenable/améliorable par n'importe qui dans le monde, je vais plutôt partir du principe que ton code contient au départ
Code Select
text="It's a sentence" et que tu souhaites le traduire (ou le faire traduire) par "C'est une phrase" en français, "Es una frase" en espagnol, "Es ist eine Phrase" en allemand, etc...


Bon, le truc c'est déjà de commencer par utiliser une variable, de la même manière que tu as utilisé fenX et fenY. Mettons qu'on l'appelle strTextToDisplay par exemple.

Ton
Code Select
text="It's a sentence" va donc devenir: initialisation en haut de code par
Code Select
strTextToDisplay="It's a sentence"
puis utilisation dans Label par
Code Select
text=strTextToDisplay

Ca, j'imagine que tu maitrises déjà :p

Le truc maintenant c'est d'imaginer que ta phrase ne va plus être en dur dans l'initialisation, mais dans un "dictionnaire" de phrases. (je crois que c'est le terme utilisé en python ?)
Imaginons qu'en haut de mon fichier, je créé un dictionnaire qui s'appelle lang.

Je vais y mettre un couple dont la clé vaudra it_s_a_sentence et dont la valeur vaut "It's a sentence".
Je n'ai jamais codé en Python, mais je crois que ça donnerait un truc du genre :
lang={}
lang["it_s_a_sentence"]="It's a sentence"

L'initialisation de la variable strTextToDisplay va donc devenir
Code Select
strTextToDisplay=lang["it_s_a_sentence"]

On obtient donc comme code :
Code Select

lang={}
lang["it_s_a_sentence"]="It's a sentence"

[...]

strTextToDisplay=lang["it_s_a_sentence"]

[...]

Label(fenExplo, text=strTextToDisplay, fg="white",...



Tu comprends alors qu'on peut généraliser en mettant tous tes textes dans le dictionnaire, par exemple :
Code Select

lang["Left"]="Gauche"
lang["Right"]="Droite"
lang["Up"]="Haut"
lang["Down"]="Bas"
lang["Settings"]="Paramètres"

etc...


Maintenant, étape suivante : ne pas mettre le contenu du dictionnaire en dur dans le code, mais dans un fichier .ini à part (ou .xml ou ce que tu veux). Par exemple lang.fr-FR.ini.
Le mieux, c'est de stocker ce fichier lang.fr-FR.ini dans un sous-dossier dédié qu'on appelerait /languages par exemple.

Il y aurait donc dans ce fichier quelque chose du genre :
Code Select

# language file
# this is the french language

lang={}
lang["it_s_a_sentence"]="C'est une phrase"
lang["Left"]="Gauche"
lang["Right"]="Droite"
lang["Up"]="Haut"
lang["Down"]="Bas"
lang["Settings"]="Paramètres"


puis dans ton programme un truc du genre
Code Select

import languages/lang.fr-FR.ini

Là, je connais pas cette partie en python... il faut peut-être que ton fichier s'appelle en .py et que tu l'utilises via un objet, je te laisse voir...[/QUOTE]


On va un peu améliorer le fichier en le structurant, par exemple en créant de rubrique :
Code Select

# language file
# this is the french language

# initialisation
lang={}

# sentences used in the arena gameplay
lang["it_s_a_sentence"]="C'est une phrase"

# sentences used in the general menu
lang["Left"]="Gauche"
lang["Right"]="Droite"
lang["Up"]="Haut"
lang["Down"]="Bas"
lang["Settings"]="Paramètres"


Voilà pour l'essentiel :)

Maintenant, il ne te reste plus qu'à créer un fichier lang.us-GB.ini qui contient
rubrique :
Code Select

# language file
# this is the english language

# initialisation
lang={}

# sentences used in the arena gameplay
lang["it_s_a_sentence"]="It's a sentence"

# sentences used in the general menu
lang["Left"]="Left"
lang["Right"]="Right"
lang["Up"]="Up"
lang["Down"]="Down"
lang["Settings"]="Settings"


et un autre lang.es-ES.ini ainsi
Code Select

# language file
# this is the english language

# initialisation
lang={}

# sentences used in the arena gameplay
lang["it_s_a_sentence"]="Es una frase"

# sentences used in the general menu
lang["Left"]="Izquierda"
lang["Right"]="Derecha"
lang["Up"]="Altura"
lang["Down"]="Bajo"
lang["Settings"]="Ajustes"


et ainsi de suite avec les autres langues ;)

Bon, maintenant la dernière étape c'est de faire un joli menu qui permet à l'utilisateur de choisir sa langue.
Et là, une fois le choix fait, tu initialises une variable globale (ou alors tu la stockes dans un .ini) que tu appelles lang_file.
Imaginons que le joueur choisisses le francais, tu écris
Code Select

lang_file=fr-FR


s'il choisit l'anglais, tu mets
Code Select

lang_file=us-GB


etc...

Par ailleurs, tu te fais un petit lang.py dans lequel tu écris :
Code Select

lang_filename = "languages/lang." + lang_file + ".ini"

import lang_filename


et donc dans tes fichier .py, au lieu d'écrire import lang.fr-FR.ini comme j'avais écris plus haut, tu as juste à écrire
Code Select

import lang.py


C'est fini ! :)

Pour résumer:
- appel une fois du menu qui permet au joueur de choisir sa langue, lang_file est alors initialisé, par exemple à fr-FR
- dans tous les autres fichiers, import de lang.py qui va importer ici lang.fr-FR.ini
- ce fichier ini va créer le dictionnaire lang et toutes tes string seront initialisées :), tu pourras donc te servir de lang["it_s_a_sentence"] et ainsi cela s'affichera dans la langue choisie par l'utilisateur ;)


Quelques astuces :
- il faut que tu choisisses une langue par défaut, mettons l'anglais, car au premier lancement du jeu il faudra bien que tu affiches le menu général, puis le menu de choix de langue
- il te faut donc initialiser la variable lang_file à us-GB si elle n'est pas encore définie
- il te faut la sauvegarder pour éviter au joueur de choisir sa langue à chaque lancement du jeu
- cela implique tu as la charge (mais aussi la maitrise) du fichier lang.us-GB.ini
- j'imagine que tu vas aussi te charger du fichier lang.fr-FR.ini
- le réflexe simple à avoir désormais, c'est que dès que tu veux afficher un texte, alors tu crées une nouvelle entrée dans ton dictionnare stocké dans lang.us-GB.ini (et aussi lang.fr-FR.ini tant qu'on y est)
- si tu veux faire traduire ton fichier par quelqu'un, il suffit qu'il duplique le fichier lang.us-GB.ini en lang.<son_code_langue>.ini et traduise les valeurs à droite du = (en ne touchant surtout pas aux valeurs entre [] )
- il faut prend en compte que tes traducteurs feront peut-être des traductions partielles, ou - quand tu vas publier une nouvelle mise à jour - qu'il va y avoir une période pendant laquelle les nouvelles phrases que tu auras ajoutées dans us-GB et fr-FR en seront pas encore traduites dans toutes les autres langues (le temps que tes traducteurs traduisent ces nouvelles phrase). Ce qui veut dire que dans les autres fichiers lang, il va manquer des item. Par exemple si tu ajoutes lang["Morgue"], il sera manquant dans les langues non encore mises à jour. Il ne faut pas que ton jeu en devienne inintelligible. A défaut, il va donc te falloir afficher ces textes manquants dans la langue par défaut (anglais, us-GB). Une manière simple de gérer cela, c'est dans ton lang.py c'est d'écrire :
Code Select

lang_filename = "languages/lang." + lang_file + ".ini"

[b]import languages/lang.us-GB.ini[/b]
import lang_filename

Ainsi, tu commences par initialiser toutes tes phrases en anglais, puis tu écrases celles qui sont traduites par la langue du joueur. De cette façon tu auras toujours la totalité des phrases, même si ton traducteur n'a fait qu'une traduction partielle ;)
- l'intérêt de passer par une variable strTextToDisplay repose sur plusieurs avantages, notamment : le texte à afficher à ce moment précis ("C'est une phrase") peut parfois être contextuelle (parfois simplement un pluriel/singulier), donc le contenu de ta phrase, et donc la valeur à utiliser dans le dictionnaire, peut-être le résultat d'un calcul compliqué (de switch, de if then else, de ...). Il est donc plus simple d'initialiser une variable en dehors de ta fonction Label. Par ailleurs, ce calcul pouvant être complexe, prendre du temps et de la mémoire, mieux vaut le faire qu'une seule fois et en stocker le résultat. De plus, il est possible, si tes calculs sont inexacts, que refaire la même chose quelques secondes plus tard te donne un résultat différent, et donc une phrase différente (alors que c'est inattendu puisqu'un bug) et donc une incohérence affichée à l'écran. Donc en plus de gagner du temps et de la mémoire, tu fiabilises ton affichage en utilisant cette variable intermédiaire. Et tu gagnes aussi en lisibilité du code ;)

Bon, j'espère avoir réussi à rester simple tout en étant compréhensible :p

Si tu as la moindre question, n'hésite pas ;)
4
DraMu ? / Aides et Astuces pour les nuls...
Last post by Tchey - 170702-10
Internationalisation
5
http://forum.canardpc.com/threads/60076-Cataclysm-survie-cyber-post-apo-zombiesque?highlight=
http://forum.canardpc.com/threads/76227-X-COM-les-gris-en-Terminal?highlight=
http://forum.canardpc.com/threads/68986-Drox-Operative-l-%C3%A9toile-montante-du-HnS?highlight=
http://forum.canardpc.com/threads/95308-BOID-La-guerre-du-plancton-mutant?highlight=
http://forum.canardpc.com/threads/96331-Pixel-Heroes-Byte-Magic-Darkest-Donjon-cuv%C3%A9e-1987?highlight=
http://forum.canardpc.com/threads/96889-Ironcast-Steampunk-Mech-et-tour-par-tour?highlight=
http://forum.canardpc.com/threads/98417-DinoSystem-L-%C3%A9cosyst%C3%A8me-vivant-qui-veut-vous-tuer?highlight=
http://forum.canardpc.com/threads/96797-Etherium-Le-STR-pour-ceux-qui-ont-un-arri%C3%A8re-Goo-dans-la-bouche?highlight=
http://forum.canardpc.com/threads/64692-Cataclysm-DDA-mangez-des-foetus-en-sniffant-de-la-coke-Nov2014-v-0-B-Brin-%21?highlight=
http://forum.canardpc.com/threads/100679-Antharion-Le-tour-par-tour-qui-peut-vous-mener-en-prison-%21?highlight=
http://forum.canardpc.com/threads/90897-Halfway-%C3%A0-moiti%C3%A9-tactique-%C3%A0-moiti%C3%A9-galactique?highlight=
http://forum.canardpc.com/threads/101796-Boss-Constructor-Modulo-Spatio-Veritum?highlight=
http://forum.canardpc.com/threads/102104-Wyrmsun-RTS-sur-Linux-comment-installer-la-version-libre?highlight=
http://forum.canardpc.com/threads/90962-UFO-Alien-Invasion-Une-nuance-de-gris?highlight=
http://forum.canardpc.com/threads/103086-Computer-Open-That-Door-%21-Quand-l%C2%92I-A-fait-a%C3%AFe?highlight=
http://forum.canardpc.com/threads/102921-The-Quest-Ce-n%E2%80%99est-pas-Might-Daggerfall-of-the-Beholder?highlight=
http://forum.canardpc.com/threads/103967-5089-la-suite-de-3089-et-3079-mais-pas-de-4089?highlight=
http://forum.canardpc.com/threads/92083-Unending-Galaxy-plus-excitant-que-du-X-Steam-1-2?highlight=
http://forum.canardpc.com/threads/92409-Project-Gorgon-Un-MMOG-%C3%A0-l-ancienne-avec-des-id%C3%A9es-neuves?highlight=
http://forum.canardpc.com/threads/94621-Rodina-L-exploration-spatiale-sans-chargement?highlight=
http://forum.canardpc.com/threads/96364-Airships-conquer-the-skies-Steampunk-pixels-et-dirigeables?highlight=
http://forum.canardpc.com/threads/96364-Airships-conquer-the-skies-Steampunk-pixels-et-dirigeables?highlight=
6
DraMu ? / Re: Carnet de développement (l...
Last post by Tchey - 170421-13
Avril 2017, tentative de GUI encore avec tkinter

7
DraMu ? / Re: Carnet de développement (l...
Last post by Tchey - 170313-22
mars 2017

Outre un travail sur l'interface, une pseudo carte de 3x3 cases est en place, avec une case pour chaque lieu remarquable (forêt, collines, village, antre...). Dans chaque lieu, des actions spéciales sont (ou seront...) possibles. Par exemple, dans l'antre, la "maison" du joueur, l'Ego peut muter.

J'ai posé les premières briques du système de mutation, pour le moment basé sur les 4 "humeurs". Plus tard ce sera basé sur des membres, organes, etc.

L'Ego peut donc évoluer, en consommant sa matorg (matière organique). Il peut rater le processus, ce qui déclenche une dévolution (perte au lieu de gain).
Plus l'Ego est évolué, plus le risque d'échec est important. Par la suite, il y aura des moyens d'évoluer sans risque... sauf à obtenir ces moyens...

La ligne "Temps..." ne sert à rien pour le moment, sinon à me rappeler que je veux faire un système de temps qui passe...



8
La purge par le feu

Poussée par la nécessité d'obtenir plus de ressources, la troupe assiège une petite ville. Trop tard pour remarquer la présence d'un puissant Pyromancian sur le mur d'enceinte. Les premiers échanges sont en faveur de l'Astra, qui converti une partie importante de la résistance. Pourtant, quand le maître du feu termine ses premières incantations, la roue tourne. Définitivement. Tout l'espoir que représentait cette action part littéralement en fumée lorsque les cendres du Seigneur Commissaire Astra s'éparpillent aux vents.

- - -


L'avenir de l'Astra Militarum repose maintenant entièrement sur sa capacité à déboiser autour du Bastion. Une escouade recrutée dans l'urgence commence à incendier la région dans l'espoir de faire fuir ses habitants. En vain.



Reste la seule option, évitée jusqu'à présent : l'affront directe. Tout ce qui a de la valeur sert à réquisitionner des hommes capables de se battre, faute de femmes.



Petits cachottiers

Une surprise de taille attend les hommes de l'Astra Militarum. Certaines créatures ne révèlent leur présence qu'au tout dernier moment. Malgré leur taille impressionnante, elles ont su se terrer dans les sous-bois, attendant leur proie.

Grace aux grenades et lanceurs de feu, la probabilité d'une victoire n'est pas nulle, et semble presque une possibilité au début de l'engagement.

Pourtant très rapidement, la supériorité de l'adversaire ne fait plus aucun doute. Brûlés, empoisonnés, blessés, estropiés, ces monstres restent de mortels combattants, et c'est dans l'agonie que se termine l'expédition.

- -


Que reste-il ? Horatia pourrait tenir encore longtemps, mais le manque de ressources indique qu'aucun renfort ne viendra avant très longtemps. A bout de souffle, l'Astra Militarum se replie, vaincu par l'arbre au milieu de la forêt.



L'angoisse de la page blanche

9
REC = Retour Écrit de Campagne
AAR = After Action Report

Conquest of Elysium 4 + FnF's Warhammer 40k Mod v1.308

http://steamcommunity.com/app/403950/discussions/1/405690850609151690/



Préambule

CoE4 est développé par Illwinter Game Design, auteur de la série des Dominions.
http://www.illwinter.com/

Je suis peu expérimenté. Pour Dom4 comme pour CoE4 je n'ai jamais approfondie mon apprentissage malgré les nombreuses parties commencées (et souvent pas terminées). Le mod utilisé semble à l'arrêt depuis presque un an, et je ne connais rien ou presque à Warhammer, à part quelques incursions dans le jeu vidéo.

Ceci suffira comme préambule, pour estimer mon niveau d'expertise dans la partie qui va suivre.

Carte de taille moyenne, période Monarchie, moi comme Astra Militarum, et trois ordinateurs en difficulté Baron.



L'arbre au milieu de la forêt

Le Seigneur Commissaire Astra Le Petit Héras est envoyé dans un coin paumé au nord d'un continent méconnu. La feuille de mission dit en substance : tuez-les tous. Tous ? Les traîtres Ultramarines, les monstrueux Tyranids et les lugubres Necrons.



Les stratèges ont eu la bonne idée de construire d'abord un Bastion avec un bunker pratiquement imprenable, surnommé Horatia, ainsi qu'une Usine, et une Statue parce qu'il restait du marbre non utilisé.

Le soucis est qu'ils n'ont pas jugé bon de considérer la présence d'un arbre fluorescent au milieu de la forêt brumeuse tout à côté du Bastion. Ça fera du combustible pour l'usine, qu'ils ont dit.

Présentation des troupes initiales

Horatia le bunker de commandement :



Astra Le Petit Héras :

-


Raphael l'Enginseer, les Servitors et les Cadians Conscripts :

- -


Un commencement paisible

Au départ, le coin est plutôt calme, et seuls quelques brigands s'aventurent à proximité. Ils sont facilement annihilés, et permettent d'amuser les troupes.





Pourtant, les espions rapportent un événement singulier. Les Ultramarines ont été éradiqué de la planète, en à peine plus d'une saison. Ce devrait être une bonne nouvelle, mais cette annonce prématurée fait craindre le pire. Les forces adverses doivent être bien plus puissantes qu'escomptées.



Cependant, le vrai problème pour l'heure, c'est cet arbre fluorescent. Un gardien ancestrale reste immobile dans la forêt, et sa puissance surpasse celles des troupes d'Astra. Cette créature ne poserait pas problème si elle était passive, et elle ne l'est pas. Elle semble capable de créer un flot continue d'agacements, sous la forme de menaces mineures, spores explosifs, troupeaux de bêtes, et parfois quelques bandits, qui viennent piller les rares ressources disponibles. Sans danger réel, leur simple présence est épuisante.

Il faut donc en même temps, et protéger les acquis, et réquisitionner plus de forces pour s'étendre sur le territoire. Or, des ressources sont nécessaires, ressources qui se trouvent à bonne distance du Bastion.

Diviser des troupes déjà peu nombreuses n'est que rarement une bonne idée. Quoiqu'il en soit, Astra Le Petit Héras par vers le sud-est en quête de gloire et de butin, et se fait accompagner par une nouvelle recrue, Mumiah l'astropath.





La force morale

Le premier vrai combat arrive rapidement lors de la prise d'un fortin à l'est de la forêt. La tourelle ravage les rangs des assaillants. C'est à peine une victoire. L'ensemble des troupes meure au combat, en dehors du Seigneur Commissaire et  de Mumiah. Avec leurs pouvoirs de conversion, ils ré-équilibrent le combat, et terminent finalement avec une escouade renouvelée issue des troupes survivantes ennemies. Astra en tire profit sous forme d'expérience, de butin, et d'un meilleur positionnement géographique. L'ouverture vers les régions non neigeuses fera gagner un temps précieux.



- - - -


L'été arrive, et la fonte des neiges permet une progression plus rapide, toujours vers le sud-est, car il faut bien aller quelque part. Les températures étant plus douces, la neige ne bloque plus les troupes en période hivernale. D'escarmouche en combat, d'embuscade en siège, Astra et sa compagnie avance, mais lutte terriblement pour maintenir les positions. L'arbre sacré de la forêt est une plaie béante dans les plans d'expansion, et les créatures qu'il envoie continuellement empêche toute progression réelle.



10
DraMu ? / Re: Carnet de développement (l...
Last post by Tchey - 170217-18
J'ai récris une grosse partie de ce que j'avais, tranché dans le tas, trié, corrigé, reformulé... Le support papier m'a plus été utile que la programmation, pour mieux poser mes idées et voir ce que je peux faire concrètement avec mes connaissances.



Je suis maintenant sur l'aspect exploration, qui sera dans un premier temps basée sur une simple grille avec des liens cardinaux.



Pages1 2 3