[DB-AL] Problème pour que mon perso récolte du bois

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 23 Juil 2019 21:49

Merci, ça va mieux

EmileF
Messages : 673
Inscription : 18 Mars 2017 19:39

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par EmileF » 24 Juil 2019 07:45

Il faudrait que tu lises les conseils jusqu'au bout, le moindre détail compte.

Dans mon exemple plus haut, je t'avais précisé "tu modifies "Wood" attention avec une Majuscule.".

C'est vrai que c'est plus clair l'exemple que t'a donné "Alesk", avec le variable précédée de "_" pour les différencier, je n'en ai pas le réflexe, mais ne survole pas les explications sinon, ça ne sert à rien les conseils qu'on peut de donner.

Bon courage.
La différence entre l'intelligence et la stupidité est que l'intelligence est limitée.

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 25 Juil 2019 10:30

Salut, je pense ne pas en avoir fini avec mon projet, mais ça me fait kiffer.

En bref, j'arrive plus à améliorer ma forge au niveau 2.

Ce qui se passe, c'est que quand je l'améliore, il me print bien "forge améliorée", i l me cache et me montre bien les objet, mais au lieu de m'ajouter -50 au ressources, il m'en ajoute50 et il reste au niveau 1, cela me bloque dans mon avancé. une solution ?

(J'ai juste copié collé le script upCastle)

Code : Tout sélectionner

public class DataRessourcesUpdates : MonoBehaviour {

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources

    private int wood
    {
        get { return _wood; }
        set
        {
            _wood = value;
            woodtext.text = "wood : " + _wood.ToString();
        }
    }

    private int rock
    {
        get { return _rock; }
        set
        {
            _rock = value;
            rocktext.text = "rock : " + _rock.ToString();
        }
    }
}
Merci beaucoup :amen:

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Moi 1971 » 26 Juil 2019 07:45

Bonjour, our comprendre un peu mieux ce qui se passe, il te faut améliorer les messages de debug.
Il vaut mieux "print("Château amélioré niveau 2");" que seulement "print("Château amélioré !");"
Identifier chaque print est important, là tu ne sais pas lequel s'affiche.

Code : Tout sélectionner

 public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            ...
            Level_Castle = 2;
            print("Château amélioré niveau 2!");
            ...
        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            ...
            Level_Castle = 3;
            print("Château amélioré niveau 3!");
            ...
        }
et idem pour la forge...
En suite ton problème vient probablement d’ailleurs, peux-tu copier/coller tout le code?
Ps : Et aussi, tu peux passer YcanUp... en bool et non plus en Int, ca évitera les erreurs.
Ps2 : Tu démarres le jeu avec 1000 en ressource et il faut 100 pour le château et 50 pour la forge pour le niv 2 puis 200 et 100 pour le niv 3..
ce qui fait que tu passe en deux frames au niv 3 normalement... c'est trop rapide pour comprendre ce qui se passe... commence par mettre 90 en ressource pour le château et modifie la valeur en direct...

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 26 Juil 2019 09:30

Voici le code en entier

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DataRessourcesUpdates : MonoBehaviour
{

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    public int RockCollect = 4;
    public int NumberCutRock = 3;
    public GameObject Rock;

    public int WoodCollect = 4;
    public int NumberCut = 3;
    public GameObject Tree;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

            wood = wood - woodNeedForCastle;
            rock = rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            wood = wood - woodNeedForForge;
            rock = rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources

    private int wood
    {
        get { return _wood; }
        set
        {
            _wood = value;
            woodtext.text = "wood : " + _wood.ToString();
        }
    }

    private int rock
    {
        get { return _rock; }
        set
        {
            _rock = value;
            rocktext.text = "rock : " + _rock.ToString();
        }
    }

    public void OnMouseDown()
    {
        if (NumberCutRock != 0)
        {
            rock = rock + RockCollect;
            NumberCutRock = NumberCutRock - 1;
            RockCollect = RockCollect + 3;

            Debug.Log("Ils vous reste " + NumberCutRock);
            Debug.Log("Vous avez récolté " + RockCollect);
        }
        else
        {
            Rock.SetActive(false);
        }


        if (NumberCut != 0)
        {
            wood = wood + WoodCollect;
            NumberCut = NumberCut - 1;
            WoodCollect = WoodCollect + 3;

            Debug.Log("Ils vous reste " + NumberCut);
            Debug.Log("Vous avez récolté " + WoodCollect);
        }

        else
        {
            Tree.SetActive(false);
        }
    }
}


Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Moi 1971 » 26 Juil 2019 10:42

Quand tu cliques tu récoltes en même temps des rochers et du bois?

Ton problème ne viens pas de ce code là. Ça vient d'ailleurs. Quel code appel la fonction UpCastle() ?

Plus généralement, il faut aussi que tu comprennes pourquoi on implémente des Setters et des Guetters, appelés "accesseur" .
Pour apprendre : https://docs.microsoft.com/fr-fr/dotnet ... properties
De ce que tu nous montre de ton code, tu n'as pas besoins de les utiliser. C'est faire compliqué quand on peut faire simple.
Alors, à quoi ça sert ? => Permet d'accéder à des variables Private en dehors de leur "portée accessibilité" (ici, la portée de la variable_wood Private est le script car tu l'as définie en début de script)
Pour apprendre : https://openclassrooms.com/fr/courses/1 ... e-variable
Comme le code que tu nous montre accède aux variables de "portée" Private depuis ce même code, ce code n'as pas besoins d'accesseurs! C'est le code qui se trouve en dehors de ce script qui doit utiliser les accesseurs de "portée" Public pour modifier les variables "Private" Bref, j'espère que les liens ci-dessus t'aideront à comprendre le fonctionnement, moi je ne suis pas très pédagogue.

Pour trouver d'où vient ton problème actuel, je te propose temporairement de désactiver les accesseurs (en les mettant en commentaire -> // ) et d'accéder directement à tes variables Private (_wood et _rock) depuis ce code. En faisant comme ça et si tu accèdes depuis l’extérieur à ces variables Private à l'aide des accesseurs, Unity va générer des erreurs et te donner l'endroit exacte où se trouve l'appel à ces accesseurs. Attention : Temporairement l'affichage ne se fera plus...

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class DataRessourcesUpdates : MonoBehaviour
{

    private int woodNeedForCastle = 100;
    private int rockNeedForCastle = 100;

    public GameObject cl1;
    public GameObject cl2;
    public GameObject cl3;

    public int Level_Castle = 1;

    private int YcanUpCastle = 1;

    private int woodNeedForForge = 50;
    private int rockNeedForForge = 50;

    public GameObject fl1;
    public GameObject fl2;
    public GameObject fl3;

    public int Level_Forge = 1;

    private int YcanUpForge = 1;

    public Text woodtext;
    public Text rocktext;

    private int _wood = 10000;
    private int _rock = 10000;

    public int RockCollect = 4;
    public int NumberCutRock = 3;
    public GameObject Rock;

    public int WoodCollect = 4;
    public int NumberCut = 3;
    public GameObject Tree;

    //Améliorer le Castle

    public void UpCastle()
    {
        //Améliorer au level 2
        // : /!\if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
         if (_wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 1 && YcanUpCastle == 1)
        {

            YcanUpCastle = 0;

             // : /!\wood = wood - woodNeedForCastle;
             _wood = _wood - woodNeedForCastle;
             // : /!\rock = rock - rockNeedForCastle;
             _rock = _rock - rockNeedForCastle;

            woodNeedForCastle = 200;
            rockNeedForCastle = 200;

            Level_Castle = 2;
            print("Château amélioré !");

            cl1.SetActive(false);
            cl2.SetActive(true);

            YcanUpForge = 1;

        }

        //Améliorer au level 3
         // : /!\if (wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
         if (_wood >= woodNeedForCastle && rock >= rockNeedForCastle && Level_Castle == 2 && YcanUpCastle == 1)
        {
            YcanUpCastle = 0;

             // : /!\wood = wood - woodNeedForCastle;
             _wood = _wood - woodNeedForCastle;
             // : /!\rock = rock - rockNeedForCastle;
             _rock = _rock - rockNeedForCastle;

            woodNeedForCastle = 400;
            rockNeedForCastle = 400;

            Level_Castle = 3;
            print("Château amélioré !");

            cl2.SetActive(false);
            cl3.SetActive(true);

            YcanUpForge = 1;

        }
    }

    //Améliorer la Forge

    public void UpForge()
    {
        //Améliorer au level 2
        // : /!\if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        if (_wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 1 && YcanUpForge == 1)
        {

            YcanUpForge = 0;

             // : /!\wood = wood - woodNeedForForge;
             _wood = _wood - woodNeedForForge;
             // : /!\rock = rock - rockNeedForForge;
             _rock = _rock - rockNeedForForge;

            woodNeedForForge = 80;
            rockNeedForForge = 80;

            Level_Forge = 2;
            print("Forge amélioré !");

            fl1.SetActive(false);
            fl2.SetActive(true);

            YcanUpCastle = 1;

        }

        //Améliorer au level 3
        // : /!\if (wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        if (_wood >= woodNeedForForge && rock >= rockNeedForForge && Level_Forge == 2 && YcanUpForge == 1)
        {
            YcanUpForge = 0;

            // : /!\wood = wood - woodNeedForForge;
            _wood = _wood - woodNeedForForge;
            // : /!\rock = rock - rockNeedForForge;
            _rock = _rock - rockNeedForForge;

            woodNeedForForge = 120;
            rockNeedForForge = 120;

            Level_Forge = 3;
            print("Forge amélioré !");

            fl2.SetActive(false);
            fl3.SetActive(true);

            YcanUpCastle = 1;

        }
    }

    //Afficher le nombre de ressources
// : /!\
    //private int wood
    //{
    //    get { return _wood; }
    //    set
    //    {
    //        _wood = value;
    //        woodtext.text = "wood : " + _wood.ToString();
     //   }
    //}

   // private int rock
   // {
   //     get { return _rock; }
   //     set
   //     {
   //         _rock = value;
    //        rocktext.text = "rock : " + _rock.ToString();
     //   }
    //}

    public void OnMouseDown()
    {
        if (NumberCutRock != 0)
        {
            // : /!\rock = rock + RockCollect;
            _rock = _rock + RockCollect;
            NumberCutRock = NumberCutRock - 1;
            RockCollect = RockCollect + 3;

            Debug.Log("Ils vous reste " + NumberCutRock);
            Debug.Log("Vous avez récolté " + RockCollect);
        }
        else
        {
            Rock.SetActive(false);
        }


        if (NumberCut != 0)
        {
            // : /!\wood = wood + WoodCollect;
            _wood = _wood + WoodCollect;
            NumberCut = NumberCut - 1;
            WoodCollect = WoodCollect + 3;

            Debug.Log("Ils vous reste " + NumberCut);
            Debug.Log("Vous avez récolté " + WoodCollect);
        }

        else
        {
            Tree.SetActive(false);
        }
    }
}
J'ai pas vérifié le code, j'ai fait un copier-coller et modif directe dans Firefox, il y a peut-être des erreurs...

Platypuss
Messages : 13
Inscription : 07 Juil 2019 20:30

Re: [DB-AL] Problème pour que mon perso récolte du bois

Message par Platypuss » 04 Août 2019 19:46

Bonjour a tous ! Je voulais revenir vers pour vous annoncer que je viens de finir la première partie de mon jeu !

(Bon celle avec le château et la forge, j'ai pas encore trouvé de solution).

Je voulais vous remercier pour toute l'aide que vous m'avez apportée !

Bonne soirée !

Platypuss.

Répondre

Revenir vers « (C#) CSharp »