Derniers sujets

[Tuto Ren'Py] Les conditions (**)

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Tuto Ren'Py] Les conditions (**)

Message par Ryouzanki le Dim 27 Mai 2012 - 15:26

Bonjour,

Commentaire

Dans ce tuto, il sera question de condition. Évidemment, je ne peux pas faire un truc qui couvre toutes les conditions possibles alors n'hésitez pas à poser des questions sur ce topic.

Connaissances requises :
- Menu lvl 1
- Dialogue lvl 1
- Variable lvl 2

A quoi ça sert ?
Cela sert à changer une partie du programme en fonction d'une variable.

A quoi ça ressemble ?
Si le joueur a un maillot de bain, il peut aller a la piscine.
Si le joueur est une joueuse, elle se fait siffler par les mecs.
etc....
*Flemme de prendre des screenshot pour ça X]*

Mais comment tu fais ça ?
Les opérateurs
A == B donne si A strictement égal à B
A != B donne si A différent de B
A >= B donne si A supérieur ou égal à B
A <= B donne si A inférieur ou égal à B
A > B donne si A strictement supérieur à B
A < B donne si A strictement inférieur à B

Il y en a d'autre (multiple, modulo...) mais ça m'étonnerais que vous les utilisiez.

Les fusions
On peut aussi fusionner des opérateurs. Par exemple si on veut "possède un maillot rouge ET un bleu", on peut faire :
Code:
(maillot_bleu & maillot_rouge)
J'ai la flemme de tout réécrire et c'est moche donc je vais remplacer par A et B :
(A & B) donne : A ET B
(A and B) donne la même chose
(A | B) donne : soit A, soit B, soit les deux.
(A or B) donne la meme chose
On peut en mettre plus bien sur :
(A & B & C) donne : A ET B ET C
(A | B | C) donne : A ou B ou C ou deux d'entre eux ou les trois.
Désolé, je ne sais pas faire de XOR (ou exclusif, "soit l'un, soit l'autre") alors je vais faire un truc moche qui donne le même résultat. (Sauf que c'est moche).
((A and not B) or (not A and B)) donne : Soit A, soit B.

vrai et faux
D'abord, je vais vous apprendre les mots clefs. Les plus importants sont if, elif et else car les autres peuvent être remplacés par ces 3 là, bien que cela donne un code moche. Respectivement, ces 3 mots signifient en français "Si", "Sinon si", "Sinon". Il y a aussi de très important "True" et "False" qui veulent dire ici "Oui" et "Non". Attention, la majuscule est importante. Les vrais et faux peuvent être remplacé par des A == B, A <= B etc. Mais pour faire un tuto plus simple à comprendre, je me contenterai des vrais et faux. Dans le code suivant, je vais vous apprendre à utiliser tout ça. D'abord, on initialise les variables. Là, on considère qu'au début, le joueur ou la joueuse ne possède aucun maillot. Ni bleu, ni rouge. Donc on place ces variables à "False".
Code:
init:
        $ maillot_rouge = False
        $ maillot_bleu = False
        $ possede_aucun_maillot = True
Ensuite, j'écris un petit script qui nous demande quelle couleur de maillot on veut acheter puis qui nous demande de confirmer l'achat.
Code:
label start:
 
    menu:
        "Quel maillot acheter ?"
        "Bleu":
            menu:
                "Acheter maillot bleu ?"
                "Oui":
                    "J'ai acheté un maillot bleu."
                    $ maillot_bleu = True
                    $ possede_aucun_maillot = False
                "Non":
                    "Je change d'avis"
        "Rouge":
            menu:
                "Acheter maillot rouge ?"
                "Oui":
                    "J'ai acheté un maillot rouge."
                    $ maillot_rouge = True
                    $ possede_aucun_maillot = False
                "Non":
                    "Je change d'avis"
Ensuite, on va poser un premier if. On ma mettre que si l'utilisateur n'a pas accepter d'acheter son maillot, on lui repropose d'en acheter un :
Code:
    if possede_aucun_maillot :
        jump start
Là typiquement, tant que l'utilisateur n'a pas acheter de maillot et que donc "possede_aucun_maillot" sera vrai, on lui fait retourner au début du script. On le force donc à en acheter un. (Je ferais un excellent agent immobilier... "Non, vous restez là, tant que vous achetez pas la maison è_é") Remarque : le code suivant a le même effet :
Code:
    if possede_aucun_maillot == True:
        jump start
Le programme considère que quand on ne précise pas, c'est True qui est prioritaire. Bon, commençons elif et else ! A ce stade du programme, le joueur a soit un rouge, soit un bleu mais pas les deux ni aucun.
Code:
    "J'enfile mon maillot"
    if maillot_rouge:
        "Je ressemble à un poisson rouge"
    elif maillot_bleu:
        "Je ressemble à un requin"
    else:
        "Ou est mon maillot...."
Ren'Py va regarder le premier if. Si c'est vrai, il va exécuter les ordres et passer à la suite. Si c'est faux, il entre dans le elif. Si c'est faux, il entre dans le elif suivant (dans l'exemple, y'en a qu'un mais on peut en mettre des centaines à la suite.) Si tous les elif sont faux, il entrera dans le else (Ici, normalement, il ne peut pas vu qu'on en a forcément un à ce stade). En cas d'absence de else le programme passe à la suite. C'est quoi la différence avec une série de "if" ? Dans la série de if, il va tout checker. Autrement dit, le mauvais code suivant :
Code:
    if maillot_rouge:
        "Je ressemble à un poisson rouge"
    if maillot_bleu:
        "Je ressemble à un requin"
On va vérifier si le maillot est rouge puis même si le maillot est rouge, on va vérifier s'il est bleu... Le programme est stupide non ? Je dirais que non, c'est plutôt le type qui l'a écrit. Cela peut être utile dans le cas suivant :
Code:
    if bonbon:
        "Je mange un bonbon"
    if sucette:
        "Je mange une sucette"
Dans ce cas, rien ne nous interdit de ne rien manger ou de manger les deux, pourquoi pas.

Dans les menus
On peut utiliser des conditions dans les menus pour qu'un choix apparaisse ou non. Par exemple :
Code:
    menu:
        "enfiler son maillot rouge"if maillot_rouge:
            "j'enfile le maillot rouge."
        "enfiler son maillot bleu" if maillot_bleu:
            "j'enfile le maillot bleu."
Dans ce cas, le choix "enfiler son maillot rouge" n'apparaîtra que si j'ai un maillot rouge et pareil pour le bleu.

Autres opérateurs
Il n'y a pas que "si" & cie... OK faut que j'arrête l'apéro du matin. Il y en a d'autre que je vais aborder brièvement. Par exemple, la boucle du début peut être remplacée par un while se traduisant par "tant que". On peut done faire "tant que le joueur n'a pas de maillot, lui en proposer un". On a donc :
Code:
    while possede_aucun_maillot:
       
        menu:
            "Quel maillot acheter ?"
            "Bleu":
                menu:
                    "Acheter maillot bleu ?"
                    "Oui":
                        "J'ai acheté un maillot bleu."
                        $ maillot_bleu = True
                        $ possede_aucun_maillot = False
                    "Non":
                        "Je change d'avis"
            "Rouge":
                menu:
                    "Acheter maillot rouge ?"
                    "Oui":
                        "J'ai acheté un maillot rouge."
                        $ maillot_rouge = True
                        $ possede_aucun_maillot = False
                    "Non":
                        "Je change d'avis"
Qui est plus propre et plus compréhensible pour les humains que celui avec le if + jump. Il y a aussi for, repeat et d'autre mais personnellement, je trouve leur utilisation assez restreinte.

Code en entier

Voilà mon code en entier qui servait à vérifier que ce que je vous apprenais marchait :
Code:
init:
        $ maillot_rouge = False
        $ maillot_bleu =False
        $ possede_aucun_maillot = True

label start:
 
    while possede_aucun_maillot:
       
        menu:
            "Quel maillot acheter ?"
            "Bleu":
                menu:
                    "Acheter maillot bleu ?"
                    "Oui":
                        "J'ai acheté un maillot bleu."
                        $ maillot_bleu = True
                        $ possede_aucun_maillot = False
                    "Non":
                        "Je change d'avis"
            "Rouge":
                menu:
                    "Acheter maillot bleu ?"
                    "Oui":
                        "J'ai acheté un maillot rouge."
                        $ maillot_rouge = True
                        $ possede_aucun_maillot = False
                    "Non":
                        "Je change d'avis"
 
    menu:
        "enfiler son maillot rouge"if maillot_rouge:
            "j'enfile le maillot rouge."
        "enfiler son maillot bleu" if maillot_bleu:
            "j'enfile le maillot bleu."

    "J'enfile mon maillot"
    if maillot_rouge:
        "Je ressemble à un poisson rouge"
    elif maillot_bleu:
        "Je ressemble à un requin"
    else:
        "Ou est mon maillot...."

    return

Voilà, si j'ai oublié d'expliquer des trucs ou que je vais trop vite, n'hésitez pas à faire un post ici.

Voir aussi :
- Rien à mettre ici >_<


Dernière édition par Ryouzanki le Dim 27 Mai 2012 - 19:23, édité 3 fois
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 25

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les conditions (**)

Message par Invité le Dim 27 Mai 2012 - 17:07

Euh, je crois que while introduit une bouche, pas une condition x)
Anyway, sais tu que ton joueur se fait arnaquer ? Même en choisissant un maillot rouge, il reçoit un maillot bleu x) (Nah je rigole, les variables sont toues bien réglé, mais tu as copié/collé les codes dans le premier menu, du coup, tu as laissé bleu à la place de rouge xD)
Sinon, on peut se débarrasser de la variable possede_aucun_maillot en mettant comme condition de boucle : while maillot rouge == False AND maillot_bleu == false : # (Y a une syntaxe pour dire ça sans mettre les ==False non ?)
avatar
Invité
Invité


Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les conditions (**)

Message par Ryouzanki le Dim 27 Mai 2012 - 17:43

Pour le while, on entre dans une boucle qui ne se rompt que lorsque le joueur achète un maillot. Je ne vois pas le problème.

Pour la faute du Copier-Coller, bien joué, je n'y ai pas fait attention. C'est corrigé. Je me suis aussi permis d'ajouter une sous-section sur les fusions, même si je ne trouve pas ça capital.

Se débarrasser de la variable possede_aucun_maillot implique que le code devienne moche et pas pratique. Comme tu dis, je peux, effectivement le faire en remplaçant par : while (not maillot_rouge and not maillot_bleu) mais c'est vraiment pas très parlant ni pratique. Exemple, si je veux rajouter un maillot vert, il se passe quoi ? Il va falloir modifier ta condition. Et en plus, si je rajoute les maillots jaune, orange, mauve, blanc, noir... Tu vas faire quoi ? Tu vas vraiment faire le truc moche ci dessous ? Trolololol Very Happy !!!

while maillot rouge == False AND maillot_bleu == false AND maillot_vert == false AND maillot_jaune == false AND maillot_orange == false AND maillot_mauve == false AND maillot_blanc == false AND maillot_noir == false
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 25

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les conditions (**)

Message par Invité le Dim 27 Mai 2012 - 19:01

T'es méchant é__è
En même temps, pourquoi tant de maillots xD
Bon okay, je m'incline =3

Juste un truc qui me rends perplexe : C'est normal d'introduire les opérateurs et la fusion avant même de parler de la syntaxe de la condition ? Parce que là, quand on sait pas la syntaxe, il est difficile de comprendre à quoi ils servent *-*
avatar
Invité
Invité


Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les conditions (**)

Message par Ryouzanki le Dim 27 Mai 2012 - 19:20

Je donne le matériel brut, puis je montre comment l'utiliser.
avatar
Ryouzanki
Maître
Maître

Masculin Messages : 1008
Age : 25

Revenir en haut Aller en bas

Re: [Tuto Ren'Py] Les conditions (**)

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum