Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 3 sur 4 PremièrePremière 1234 DernièreDernière
Affichage des résultats 61 à 90 sur 99
  1. #61
    Citation Envoyé par ( Tchey ) Voir le message
    J'en suis là.

    - Une "fausse" scène (le PJ et le PNJ ne se sont pas rencontrés en vrai, ils sont placés manuellement dans l'arène)
    - Collaboration avec Uubu, le gribouilleur notamment de ça : http://forum.canardpc.com/threads/10...-D%C3%A9v-OTOT
    - Deux bidules animés en boucle sur 4 frames
    - Un bouton Attaque et un bouton Repos pour chaque (pas d'IA encore) pour un combat simple
    - Le "gène" du joueur est là pour la déco, j'ai seulement placé les bouton dessus pour faire genre tu vois
    - Utilisation de 4 attributs de manière classique et simplifiée, façon vie, mana, endurance et réserve.
    - Un registre des événements
    - ...

    http://jeux1d100.net/dradro/dramu_161024_01.jpg
    C'est super beau ! …mais j'ai rien compris.
    www.infotographiste.fr - Instagram : florent.infotographiste - Si ça doit merder, ça merdera…- PC Ryzen 3700X+32GB+XFX 5700XT ThicIII Ultra - Panasonic G9 + Leica 8-18mm + Olympus 60mm macro ou Mamiya C220 (Gx7 + Panasonic 14mm en secours)

  2. #62
    J'ai bien avancé ces derniers jours, enfin, relativement à mon avancement global. Je suppose que tout est faisable en une petite journée pour qui sait faire. M'enfin, j'ai le sentiment de progresser, ça motive. J'avais plusieurs bugs et cassages de tête, essentiellement liés à ma (non) compréhension de la structure des fichiers. Par exemple, tout con, mais j'ai mis plusieurs heures réparties sur plusieurs jours parce j'y passe peu de temps, pour parvenir à afficher une fenêtre de messages événements.

    Maintenant quand je marche sur l'escargot (qui suit un chemin autours de la palissade), un message s'affiche. Ouééé.

    J'ai aussi fait mes tous premiers trucs en pixels, pour faire une torche animée en 3 frames. Youhou.

    Ceci sera l'une des toutes premières scènes du "protojeu" quand j'aurais compris comment faire des dialogues, quêtes, inventaires, interactions plus avancées que "toucher"... L'intrigue à venir est passionnante : le pauvre escargot est venu méditer, mais y'a des gens qui cassent la forêt alors que c'est pas bien.



    Sur mon site en signature, je poste plus de trucs, mais y'a rien à voir vraiment.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  3. #63
    Citation Envoyé par ( Tchey ) Voir le message
    L'intrigue à venir est passionnante : le pauvre escargot est venu méditer, mais y'a des gens qui cassent la forêt alors que c'est pas bien.
    Fait gaffe à pas te faire voler le scénario par Luc Besson ou Christopher Nolan, d'un synopsis d'une telle qualité ils t'en font un film de super-héros

    En plus je suppose qu'il est mutant l'escargot vu les capacités qu'il peut développer ?

  4. #64
    Et bah tu vois c'est super cool de lire ça et de te voir progresser après un début un peu dur pour toi ou tu te cherchais je crois. Ça fait plaisir, continue comme ça et amuses toi bien!
    Le premier chef d'œuvre d'une longue série, cliquez ici
    Le second, cliquez

  5. #65
    Ca rend bien en effet !
    A voir le screenshot y a un petit air d'unreal world dans la vue top-down .

  6. #66
    Pas encore mort !

    Après plus de deux mois de rien, retour à Python et au Terminal, avec le sentiment de m'être "perdu" dans Godot... Selon mon niveau de décrochage, je continue avec Python en Terminal, ou tkinter, ou Godot ou pas. Ma préférence va tout de même dans le brut de la première option...

    Bref, j'ai (re)fait ça.

    Refonte de la boutique, avec des sous catégories, et surtout un passage aux fichiers .json pour l'ensemble de "l'inventaire". Le bestiaire est dans la ligne de mire.


    Réécriture de l'ensemble, pour afficher une lettre à taper au lieu du nom complet, ainsi que le prix et une description de l'objet. C'était fonctionnel avant la refonte (on pouvait choisir un sérum et l'injecter, pour simplement gagner/perdre de la santé), maintenant faut que je comprenne comment réparer la chose.


    Changement dans l'arène, essentiellement pour une meilleure lecture, en vue d'une prochaine étape à venir : combat "dynamique" au tour par tour.


    J'ai aussi fait qu'en martelant la touche entrée prenne l'option la plus évidente, ou que l'on revienne à "avant" jusqu'à sortir du programme complètement, ce qui accélère bien les choses pour tester.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  7. #67
    Un jeu parfait pour le taf

  8. #68
    Cool ça avance ! Tu as déjà réfléchi au système de sauvegarde? Perso sur mon rogue like je m'y suis intéressé un peu tard et ca demande un gros taff une fois que tu as un projet déjà bien avancé.

    Tu as une petite demo ?

  9. #69
    Je n'ai absolument aucune notion de comment faire un système de sauvegarde.

    Pas de "démo" non, mais de temps en temps je colle le truc sur Github pour sauver en ligne. Ça change très rapidement, dès que j'ai trois lignes qui fonctionnent je les casse en faisant autre chose, haha...

    Si vraiment vous avez 5 minutes à perdre : http://github.com/Jeux1d100/DraMu_Py3

    Je présume que mes +/- 700 lignes sont faisables par n'importe qui ayant une connaissance moyenne de Python en une demie journée... moi il m'a fallu quelques heures à l'instant pour trouver comment faire ça : afficher chaque objet du .json, avec un index pour que le joueur tape par exemple "sv" pour choisir le sérum Vivik, puis afficher un retour qui valide l'action du joueur, avec le nom complet de l'objet, son prix, et les couleurs en place.


    Maintenant à l'achat d'un sérum, le joueur à un +1 sérum, mais pas vraiment d'inventaire, juste un compteur, et tous les sérums tombent dans le même lot, donc y'a encore une certaine marge de progression ici aussi...
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  10. #70
    Ça progresse bien !

    Je connais très peu le python, mais je pense que pour la sauvegarde le principe n'est pas trop complexe mais le taf pour l'implanter l'est

    J'ai vu quelque part que tu utilisais du JSON read quelque part, pour sauvegarder je pense que tu peux faire l'inverse dans un fichier prévu à cet effet.
    Si tu veux pas trop te prendre la tête tu stockes séparément chaque attribut du perso (sauvegarde auto à la fin d'une étape par exemple).
    Tu permets au joueur de faire LOAD au début au lieu de START, avec un ptit booléen is_loading?
    IF is_loading? == TRUE
    THEN JSON read après l'initialisation de l'objet avatar pour écraser ses stats par celles qui sont enregistrées.

    Pour qu'une sauvegarde soit pertinente il faut introduire une notion de progression, une variable ou tu stockes le nombre d'étapes elle aussi sauvegardée.
    Cette variable peut ensuite t'aider à faire une difficulté progressive, en élargissant le random range quand tu pioches dans le bestiaire (ou en forçant un reroll si l'adversaire a un niveau de difficulté trop élevé par rapport au nombre d'étapes) etc.

  11. #71
    Je vais tester ça ! Joq le pecheur à raison et avant d'avoir trop de données à gérer en sauvegarde, te pencher sur le système peut-être intéressant. Le JSON peut faire l'affaire carrément.

  12. #72
    Je ne pense pas que ce soit pertinent de me pencher sur les sauvegardes maintenant. Il y a moins de 5 minutes de "gameplay", incluant le temps de télécharger, répondre à un texto, installer le jeu et faire une ou deux boucles. M'enfin, le peux passer du temps dessus pour comprendre les principes de la chose, mais il y a tellement d'autres choses que j'ignore...

    Avant, je pense que je dois corriger/intégrer l'inventaire, et intégrer une forme de progression basique, afin d'avoir un "jeu" jouable dans son ensemble, bien que simpliste.

    Je minimise tout, car vraiment, pour le moment il n'y a rien de spécial, et en même temps j'ai bien conscience que mon rien vaut des dizaines d'heures d'apprentissage. C'est donc un rien comparé à mon plan de domination du multivers, tout en étant intergénérationnel du point de vue d'une mouche domestique.

    Par exemple je me pose la question, quelle différence fondamentale entre ces deux fichiers "shop_serum.txt" ? J'utilise pour le moment le premier. Aussi, je ne sais pas si je peux avoir toute la boutique dans un seul json (et comment), ou s'il faut un par catégorie (sérums, armes...). Et du coup, en pensant à l'inventaire, je me dis qu'il doit être possible d'avoir un seul fichier avec un tag "inshop" et un tag "inbag", non ?

    Code:
    {
    "sv": ["Vivik", 25, "La vie, c'est beau. Parfois."],
    "sm": ["Mortak", 10, "La douleur engendre la résilience. Ou la folie."],
    "sa": ["Aleak", 15, "Une existence sans surprise est une existence sans saveur. Dit-on."]
    }

    Mais là par exemple, pour une potion de soin, comment remplacer "effect : ???," par un truc du genre : "ego.health += random.randint(8,12)," , sachant que c'est un fichier json en .txt ?

    Code:
    {
        "serum_mortak" : {
            "id" : sm,
            "name" : "Mortak",
            "effect" : ???,
            "price" : 10,
            "description" : "La douleur engendre la résilience. Ou la folie."
        }
    
        "serum_vivik" : {
            "id" : sv
            "name" : "Vivik",
            "effect" : ???,
            "price" : 25,
            "description" : "La vie, c'est beau. Parfois."
        }
    
        "serum_aleak" : {
            "id" : sa
            "name" : "Aleak",
            "effect" : ???,
            "price" : 15,
            "description" : "Une existence sans surprise est une existence sans saveur. Dit-on."
        }
    }
    Etc...
    Dernière modification par Tchey ; 15/01/2017 à 10h39.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  13. #73
    Il faut plus stocker les min et le max de ta potion. Ensuite tu les utilises avec ta ligne : ego.health += random.randint(min, max) ?

  14. #74
    Citation Envoyé par ( Tchey ) Voir le message

    Par exemple je me pose la question, quelle différence fondamentale entre ces deux fichiers "shop_serum.txt" ? J'utilise pour le moment le premier. Aussi, je ne sais pas si je peux avoir toute la boutique dans un seul json (et comment), ou s'il faut un par catégorie (sérums, armes...). Et du coup, en pensant à l'inventaire, je me dis qu'il doit être possible d'avoir un seul fichier avec un tag "inshop" et un tag "inbag", non ?
    Pour les json, tu peux tout mettre dans un seul en rajoutant un niveau de profondeur par catégorie (dis moi si t'as besoin de détails, pas le temps là ) mais c'est pas forcément recommandé, perso j'utiliserai plusieurs fichiers.

  15. #75
    Le problème de gérer plusieurs fichier c'est que ça impose une gestion d'écriture / suppression à chaque action (à moins que ses données soit chargées en mémoire au départ). Tu prends dans le sac, il faut supprimer la ligne dans le fichier inshop, l'ajouter dans le inbag, etc.

  16. #76
    Pour un truc comme ça j'utiliserai sqlite mais ça ferait un truc à apprendre en plus pour Tchey.
    Mais ouais de toutes façons que ce soit du json sur le filesystem (dans un ou plusieurs fichiers) ou du sqlite t'es voué à faire pas mal d'ajouts / suppressions.

  17. #77
    Je n'ai absolument aucune notion de comment faire un système de sauvegarde.
    Je pensais que c'était un appel au secours
    C'est vrai qu'en plus si c'est des parties qui durent 10 minutes ça sert à rien ^^.

    J'ai eu la même expérience que Patate, j'ai galéré a mettre en place un système de sauvegarde dans un projet en le faisant tard, alors maintenant je fais du zèle.

  18. #78
    Faudra que je m'y mette dans tous les cas, un jour.

    Pour le moment avec DraMu j'essaie des trucs (par exemple les potions), mais ensuite je vire pour m'approcher de mon idée initiale (l'ego assimile son environnement (dont les adversaires) pour régénérer et muter).
    Idem pour les armes, en principe l'ego utilise les capacités de son corps, au moins dans une première phase.
    Idem pour la santé, je veux un système sans "+6 points de vie", et avec des effets à la place : sonné, ralenti, amputé, empalé...
    ...

    Dès que j'ai un semblant d'inventaire (pas du tout progressé là dedans), je vais voir pour les sauveries, je suis curieux.

    Prochaine étape cependant, comprendre pourquoi dans la boutique c'est toujours Vivik qui est acheté quelque soit l'option entrée par le joueur...

    http://github.com/Jeux1d100/DraMu_Py3

    Code:
    option = input(Colour.DARKCYAN + "   Votre choix -> " + Colour.END)
        if option == "":
            go_shop()
        elif option in shop_serum:
            if ego.jeto >= shop_serum[option][1]:
                ego.jeto -= shop_serum[option][1]
                print ("      Vous achetez l'objet " + Colour.GREEN + "{} ".format(description[0]) + Colour.END + "pour " + Colour.RED + "{} jetons".format(description[1]) + Colour.END + ".")
                ego.serum += 1
                ego.inventory[option] = 1
                option = input(Colour.DARKCYAN + "   Touche Entrée pour continuer..." + Colour.END)
                go_shop()
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  19. #79
    Citation Envoyé par ( Tchey ) Voir le message

    Code:
            if ego.jeto >= shop_serum[option][1]:
                ego.jeto -= shop_serum[option][1]
    La comme ça ton problème pourrait peut être venir de l'index mis en dur (1), c'est souvent le cas avec le genre de problème que tu décris.

  20. #80
    Tant que tu n'es pas trop avancé, pense à regarder pour supporter le multi-langue : c'est simple, rapide et mieux vaut te faire la main maintenant, ainsi ce sera plus facile et réutilisable pour tes autres projets.

    Par exemple, une manière facile :
    - tu crées un fichier appelé langues.xml ou json ou ce que tu veux, et dedans tu mets toutes les langues supportées avec leur description et 'radical'. Exemple Français et FRENCH, English ENGLISH, etc...
    - ensuite tu crées un fichier lang_FRENCH.xml (ou json ou autre...) qui contient tout ce qui doit être à l'écran avec son 'ITEM' et sa traduction. Exemple MAIN_MENU et Menu principal, JAMBE Jambe, etc...
    - tu te fais vite fait un menu pour choisir la langue : ce menu se contente d'afficher la liste des descriptions du fichier langues.xml, sauvegarde dans une variable le radical correspondant à celle choisie par l'utilisateur et charge en mémoire (dans un tableau par exemple) le fichier lang_[le radical choisi].xml
    - enfin, dans tes autres fichiers de jeu, au lieu d'afficher 'Jambe', tu affiches lang['JAMBE'], etc...

    Ainsi, pour mettre ton jeu à disposition en anglais, la seule chose à faire et de traduire le fichier lang_FRENCH en créant le fichier lang_ENGLISH : il contiendra le couple JAMBE Leg, etc...
    Si tu fais un fichier lang_SPANISH, il contiendra JAMBE Pierna, etc...

    Tu as besoin de parler de bras dans ton jeu, hop tu ajoutes BRAS Bras dans lang_FRENCH et le tour est joué...

    Demain, tu as un fan qui veut traduire le jeu en allemand, il le fait dans son coin, autonome, et peut te l'envoyer pour que tu l'intègres dans le jeu à distribuer par exemple...
    Pour plus de simplicité, je conseille d'utiliser tout des noms d'items en anglais afin que tous puissent les comprendre et les traduire dans leur langue... ainsi ton fichier lang_FRENCH ressemblerait plutot à LEG Jambe, ARM Bras


    Je ne sais pas si, expliqué comme cela, ça peut paraitre compliqué, mais en réalité c'est vraiment très simple et une fois ce mécanisme acquis et mis en place dès le départ de tes projets, tu auras très rapidement et facilement des projets multilangues...

    Transformer un projet monolangue 'fini' en un multilangue, c'est vraiment la galère, car en plus de la traduction tu dois repasser partout dans le code pour remplacer ce qui est en dur (les descriptions, le menu, etc...) par des indirections (lang['MAIN MENU'], lang['SHIELD_DESCRIPTION'])...

  21. #81
    Ah oui la traduction... Diantre... Merci du conseil.

    Toujours rien glandé côté inventaire.

    J'ai avancé cependant un peu en intégrant mon idée de Nerf/Fluide/Chimie/Gaz que j'expose quelque part plus haut je crois, adaptée et simplifiée pour le moment, et ajouté au combat la notion de "offense vs défense" et "dégâts vs résistance".

    Par exemple
    ego_off = (ego.nerf *3 + ego.fluide *2 + ego.chimie + ego.gaz) + (random.choice(ego_alea)) # Offense

    Tout est sur le modèle a*3 + b*2 + c + d + alea. Les abcd changent selon les situations. Par exemple
    ego_res = (ego.gaz *3 + ego.chimie * 2 + ego.nerf + ego.fluide) + (random.choice(ego_alea)) # Résistance

    Alea c'est en gros 1d8.
    Le matorg, c'est un peu un équivalent des points de vie.

    Prochainement ça devrait donner quelque chose comme ça :
    Chacune des 4 humeurs est notée de 0 à 4. L'ego commence à 1 partout, il peut perdre de l'humeur et tomber à 0.
    Tant qu'il a du matorg en réserve, il survie. S'il est à 0 en humeur et que son matorg tombe aussi à 0, c'est (presque) Game Over.
    Presque, car si l'ego est populaire et qu'il a des abonnés, il a une chance de bénéficier d'un sacrifice et de regagner quelques matorg.
    Si humeur, et matorg, et abonnés, sont tous à zéro, là c'est la fin de la fin.

    Le "truc" est que pour passer par exemple à Fluide 2, il faut consommer beaucoup de matorg. Donc faut être en bonne santé, ensuite on évolue puis on est faible pendant un moment, le temps d'assimiler plus de matorg. Dans la même idée je veux que toute ressource serve au moins deux propos.

    Je veux aussi retirer le combat contre un adversaire aléatoire, pour qu'un choix de 3 (?) adversaires soit proposé à la place. Comme ça si on est faible on se tape du Muscae ou Rodentia, et si on est en forme on peut se cogner un BiOurs ou un même un Proboscidea sur un coup de folie.

    D'ailleurs je vois un bug ici, je n'ai par pris en compte les changements pour l'affichage du résultat, l'ego a 100/100 au lieu de 42 (50 de base (100 max), -9 du combat, +1 d'assimilation), et le lapin est en négatif...



    Et après quelques tours rapides pour tester, bah v'là aut'chose...

    RecursionError: maximum recursion depth exceeded
    J'ai lu la doc et quelques pages sur internet, mais je ne comprends toujours pas le c'est quoi donc.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  22. #82
    Avec juste le code d'erreur je dirais que dans ton code tu dois avoir au moins une fonction qui s’appellent elle même (ça s'appel la récursion) créant alors à chaque nouvel appel une "couche" (c'est le principe de la stack ou pile). Si la boucle que cela crée est trop profonde (trop de couches) tu as ce genre d'erreur.

    Ch'ais pas si je suis très clair.

  23. #83
    Plus ou moins. Je ne comprends pas vraiment comment éviter le phénomène. Je pense que ça vient de ma boucle de combat. Pour le moment j'ai triché en mettant sys.setrecursionlimit(5000) en début de code...

    J'ai ça maintenant, trois options de combat, accessible à chaque "tour" (l'ego attaque toujours le premier, puis l'adversaire, puis boucle).
    J'ai aussi fusionné des écrans pour avoir plus d'info pertinentes en même temps et éviter les redondances.



    Les nombres entre parenthèses sont : offense vs défense, dégâts vs résistance. Si c'est négatif, ça compte comme zéro. On peut réussir une attaque, mais n'infliger ensuite aucun dégât. Plus tard, je veux mettre des effets en plus (ou a la place) des dégâts, Par exemple possibilité d'empoisonner si on réussi l'attaque, on peut alors faire zéro dégât au tour 1, mais appliquer le poison. Puis la cible encaisse aux tours suivants même si on rate l'attaque.

    M'enfin, je n'en suis pas là... Pour le moment mon code est un peu en bordel, avec du if/else a gogo, ça va rapidement limiter les choses je pense. Ça fait ça, copié/collé/changé selon les différentes attaques.

    Code:
    def ego_attack_quick(): # +off (*3 *3 *3 *2), -dmg (*2 *1 *1 *1)
        ego_alea = (1, 4, 9)
        challenger_alea = (2, 5, 10)
        ego_off =  (ego.nerf *3 + ego.fluide *3 + ego.chimie *3 + ego.gaz *2) + (random.choice(ego_alea)) # Offense
        challenger_off = (challenger.nerf *3 + challenger.fluide *2 + challenger.chimie + challenger.gaz) + (random.choice(challenger_alea))
        ego_def = (ego.chimie *3 + ego.gaz * 2 + ego.nerf + ego.fluide) + (random.choice(ego_alea)) # Défense
        challenger_def = (challenger.chimie *3 + challenger.gaz *2 + challenger.nerf + challenger.fluide) + (random.choice(challenger_alea))
        ego_dmg =  (ego.fluide *2 + ego.chimie *1 + ego.nerf + ego.gaz) + (random.choice(ego_alea)) # Dommages
        challenger_dmg = (challenger.fluide *3 + challenger.chimie *2 + challenger.nerf + challenger.gaz) + (random.choice(challenger_alea))
        ego_res = (ego.gaz *3 + ego.chimie * 2 + ego.nerf + ego.fluide) + (random.choice(ego_alea)) # Résistance
        challenger_res = (challenger.gaz *3 + challenger.chimie * 2 + challenger.nerf + challenger.fluide) + (random.choice(challenger_alea))
    
        # L'ego attaque toujours en premier. Si ego_offense >= challenger_def, alors l'ego réussi son attaque. Autrement, l'adversaire attaque.
        # Si ego_dmg >= challenger_res, alors l'ego blesse l'adversaire. Ensuite c'est au tour de l'adversaire, et boucle jusqu'à élimination d'un protagoniste.
    
        print ("")
        if ego_off >= challenger_def:
            if (ego_dmg - challenger_res) < 1:
                challenger.matorg -= 0
                print ("      Vous frappez trop rapidement et n'infligez " + Colour.PURPLE + "aucun dégât " + Colour.END + "({} vs {}, {} vs {}) !".format(ego_off, challenger_def, ego_dmg, challenger_res))
            else:
                challenger.matorg -= (ego_dmg - challenger_res)
                print ("      Vous frappez vivement l'adversaire et lui infligez " + Colour.GREEN + "{} dégâts ".format(ego_dmg - challenger_res) + Colour.END + "({} vs {}, {} vs {}).".format(ego_off, challenger_def, ego_dmg, challenger_res))
            if challenger.matorg < 1:
                challenger.matorg == 0
                option = input(Colour.DARKCYAN + "   Touche Entrée pour le tour suivant -> " + Colour.END).lower()
                win()
            else :
                adv_attack()
        else:
            print ("      Votre empressement vous fait " + Colour.PURPLE + "rater " + Colour.END + "votre cible ({} vs {}) !".format(ego_off, challenger_def))
            adv_attack()
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  24. #84
    Cette nuit je me suis cogné la tête dans un convecteur temporel, et j'ai gribouillé un mot : fatigue.
    Puis dans la journée, j'ai ajouté l'idée d'endurance ou énergie ou fatigue, que je nomme fougue.
    Ne s'applique encore qu'à l'ego, pas encore à l'alter, qui lui ne dispose que d'une attaque automatique à chaque tour de combat.

    Un tour de combat pour le moment, c'est simplement : action de l'ego (à choisir dans la liste), résolution, action le l'alter (unique et invariable), résolution, boucle.

    L'ego regagne de la fougue en début de chaque tour (peu), ou en "passant le tour".

    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  25. #85
    Je vois que dans ton attaque tu as plusieurs fois adv_attack (en fonction des différentes 'fins' de l'attaque en cours j'imagine), j'en suppose donc que de la même manière tu as dû écrire un truc du genre ego_attack() à la fin/aux fins de ton adv_attack ?

    Ce qui te donnes un truc du genre:
    ego_attack
    -> adv_attack
    --> ego_attack
    ----> adv_attack
    ------> ego_attack
    etc...

    Ce qui voudrait dire que tu 'empiles' les appelles de fonction, il ne s'agit pas ici d'une boucle.

    Une boucle serait quelque chose du genre :

    :debut_de_tour
    ego_attack
    si quelqu'un est mort, alors aller à fin_de_combat, sinon continuer avec les actions ci-dessous
    adv_attack
    si personne n'est mort aller à debut_de_tour, sinon aller à fin_de_combat

    :fin_du_combat

    Ce qui donne:
    ego_attack
    adv_attack
    ego_attack
    adv_attack
    etc...

    La différence, c'est que les fonctions ne s'appellent pas l'une l'autre, il n'y a pas d'empilage, adv_attack ne commence que lorsque ego_attack est fini, tandis que dans le premier 'code' adv_attack se trouve être la dernière 'action' A L'INTERIEUR de ego_attack (et reciproquement) : tu empiles les actions mais sans jamais finir aucune fonction...

    Enfin... c'est si j'ai bien compris comment tu codes... disons que ça pourrait être une piste

  26. #86
    Merci,

    J'ai changé depuis, maintenant ça fait

    Code:
    go_arena() avec le choix des options, présentation des combattants...
    
    do_combat_selonlechoix_()
            si les deux sont vivants, alter_attack()
    
    alter_attack()
            si les deux sont vivants, go_arena()
    
    go_arena()
    
    do_combat_selonlechoix_()
            si les deux sont vivants, alter_attack()
    
    alter_attack()
            si les deux sont vivants, go_arena()
    boucle là dessus jusqu'à une défaite go_lose() ou alter go_win()
    Alors ça revient au même si j'ai compris, parce que mon alter_attack appelle arena ? Je pensais que non.
    Du coup, comment on peut "finir" proprement, je ne comprends pas ça.

    Ou alors c'est bon ? Je n'ai pas de RecursionError ou alors je ne teste pas assez longtemps.
    Dernière modification par Tchey ; 23/01/2017 à 13h43.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

  27. #87
    En gros il faut une seule boucle principale, genre

    arena()
    [
    ici se déroule le combat (actions), tant qu'il n'y a pas un mort
    ]

    tes actions pourraient du genre:
    alter_attack et ego_attack

    pour éviter d'empiler les appels de fonctions, il est important que ces deux actions (alter_attack et ego_attack) se finissent à chaque fois.
    sans rien faire d'autre. (sinon elles ne sont pas finies )

    c'est arena qui se charge de faire la boucle, de 'distribuer les rôles' c'est à dire "c'est au tour de qui de jouer"...

    Imagine une partie de belote ou de jeu de plateau : chaque joueur joue sa carte, ou fait ce qu'il a à faire, puis il a fini son tour. Indépendamment de cela, c'est 'la règle du jeu'/le MJ qui dit c'est au tour de qui de jouer...
    Si l'on compare avec une séance de questions réponses, c'est comme le conférencier qui tend le micro à quelqu'un, lui laisse poser sa question, puis reprend le micro quand la personne à fini de parler... ensuite le conférencier tend le micro à quelqu'un d'autre, etc... jusqu'à ce qu'il constate que plus personne n'a de question à poser (= qu'il n'y ait plus d'adversaire dans le combat du jeu)
    Si les gens se passaient directement le micro de l'un à l'autre, alors à la fin il faudrait que le micro refasse tout le chemin inverse et revienne jusqu'au conférencier pour qu'il puisse répondre d'un seul coup à toutes les questions qui ont été empilées et enfin qu'il cloture la conférence...

    Il faut garder à l'esprit que chaque appel de fonction, c'est comme une parenthèse que tu ouvres... à un moment donné, il va falloir la refermer puis poursuivre avec le code qui suit juste après l'endroit où tu avais appelé ta fonction...

  28. #88
    Citation Envoyé par aggelon Voir le message

    Il faut garder à l'esprit que chaque appel de fonction, c'est comme une parenthèse que tu ouvres... à un moment donné, il va falloir la refermer puis poursuivre avec le code qui suit juste après l'endroit où tu avais appelé ta fonction...
    (amateur-de? (lisp) )

  29. #89

  30. #90
    J'ai récris une grosse partie de ce que j'avais, tranché dans le tas, trié, corrigé, reformulé...
    J'ai laissé le json de côté pour le moment, et je n'ai toujours pas touché au système de sauvegarde, mais globalement, c'est "mieux".
    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. Je ne veux pas du procédurale aléatoire infini, mais j'aimerais avoir certains points avec des variantes (du style, rencontrer un chien malade, un chien fort, un chien mort...).

    Dernière modification par Tchey ; 17/02/2017 à 18h07.
    * Jeux1d100 ? Le blog Jeux1d100.net sur les jeux indécents et Linux, et la chaîne YouTube *

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •