IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Niveau suivant via bouton? [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Par défaut Niveau suivant via bouton?
    Bonjour !

    C'est encore moi et mon petit jeu memory !
    Donc pour vous expliquez mon projet, je dois réaliser un jeu "mémory" qui se présente comme ceci :

    -http://img4.hostingpics.net/pics/181692325.png
    -http://img4.hostingpics.net/pics/730413Sanstitre.png

    Et un petit soucis c'est que lorsque je clique sur next (dans la deuxieme image rien ne se passe) alors que j'aimerais passer au niveau suivant.

    J'ai créer un tableau bidimensionnelle pour 18 niveaux et 7 images puis j'ai mis quelle image a quelle position.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public static int[,] tabReponseTest = new int[18,7] { { -1, -1, 3, 1, -1, -1, -1 }, { -1, -1, 6, 3, -1, -1, -1 }, { -1,-1, 1, 3, -1, -1, -1 }, { -1, 1, 3, 6, -1, -1, -1 }, { -1, 3, 6, 1, -1, -1, -1 }, { -1, 6, 3, 1, -1, -1, -1 }, { -1, 6, 3, 2, 1, -1, -1 }, { -1, 6, 2, 1, 3, -1, -1 }, { -1, 2, 6, 3, 1, -1, -1 }, { -1, 1, 3, 5, 6, 2, -1 }, { -1, 6, 5, 2, 3, 1, -1 }, { -1, 2, 6, 3, 1, 5, -1 }, { -1, 5, 2, 6, 1, 4, 3 }, { -1, 5, 1, 3, 4, 6, 2 }, { -1, 3, 6, 2, 4, 1, 5 }, { 2, 6, 5, 1, 3, 7, 4 }, { 3, 5, 7, 4, 1, 2, 6 }, { 4, 2, 1, 3, 6, 5, 7 }};
    Puis voici mon btnNext, qui me donne rien, j'ai du mal codé quelque chose mais je sais pas quoi, et je me suis dis aussi, vu que mes classes sont dans un Panel, si je veux obtenir un autre niveau je dois peut etre remove ma form?

    Classe en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     class Test : Pere
        {
            Timer timer1;
            Button btnNextLevel;
            int niveau;
     
            public Test(): base()
            {
                niveau = 0;
                memoriseImages();            
            }
            public void memoriseImages()
            {
                this.timer1 = new Timer();
                this.timer1.Interval = 2000;
                this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
                timer1.Start();
     
                for (int i = 0; i < nbImages; i++)
                {
                    if (tabReponseTest[niveau, i] != -1)
                        tabPictureBoxHaut[i].Image = tabBmp[categorieChoisie, tabReponseTest[niveau, i]];
                    else
                        tabPictureBoxHaut[i].Image = null;
                }
            }
     
            public void ActionImages()
            {
                this.btnNextLevel = new Button();
                this.btnNextLevel.Location = new System.Drawing.Point(800, 200);
                this.btnNextLevel.Name = "btnNextLevel";
                this.btnNextLevel.Size = new System.Drawing.Size(75, 23);
                this.btnNextLevel.TabIndex = 0;
                this.btnNextLevel.Text = "Next Level";
                this.btnNextLevel.UseVisualStyleBackColor = true;
                this.btnNextLevel.Click += new System.EventHandler(this.btnNextLevel_Click);
                this.Controls.Add(btnNextLevel);
     
                timer1.Stop();
                PictureBoxBas();
                EncadrePictureBoxBas();
                ActiverDragandDrop();
            }
     
            private void timer1_Tick(object sender, EventArgs e)
            {
     
                ActionImages();
     
                for (int i = 0; i < tabPictureBoxHaut.Length; i++)
                {
                    tabPictureBoxHaut[i].Image = null;
                }
            }
     
            private void btnNextLevel_Click(object sender, EventArgs e)
            {
                bool verifieImage = false;
     
                for (int _i = 0; _i < nbImages; _i++)
                {
                    if (tabPictureBoxHaut[_i].Image == tabBmp[categorieChoisie, tabReponseTest[niveau, _i]])
                    {
     
                        for (int i = 0; i < nbImages; i++)
                        {
                            tabPictureBoxHaut[i].BackColor = Color.Transparent;
     
                        }
                        verifieImage = true;
     
                    }
                    else
                    {
                        for (int i = 0; i < nbImages; i++)
                        {
                            tabPictureBoxHaut[i].BackColor = Color.Red;
                            btnNextLevel.Enabled = false;
                        }
                    }
                }
     
                if (verifieImage)
                {
                    MessageBox.Show("Bien joué ! niveau suivant ->");
                    niveau++;
                }
            }   
        }
    }
    Je pense que le problème est principalement dans l'evenement "BtnNext".

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Par défaut
    Bonjour,

    Elle te donne rien, c'est à dire? Elle génère une erreur ou elle se comporte correctement?
    En tout cas, je trouve que tu as un gros souci dans ta méthode...

    - A chaque itération de _i, tu change la couleur de fond de toutes tes images. En plus d'être un gros problème de performances (un for dans un for, il faut faire attention), seule la dernière itération sera prise en compte (à moins que j'ai loupé quelque chose dans le code).
    - Dans l'une de tes boucles, tu rend inactif le bouton NextLevel : pourquoi le rendre inactif dans la boucle? tu fais nbImages cette opération alors qu'une seule fois suffirait...
    - Tu positionne des variables selon tes cas if/else. Sauf que comme tu gères pas toutes les variables dans tes conditions, tu peux très bien arriver à la fin de la méthode et avoir verifieImage à true et ton bouton grisé avec les fonds des images en rouge... As-tu pensé à ce cas de figure?

    Commence déjà à faire un travail d'optimisation sur cette méthode, on verra ensuite ce que ça donne au niveau de l'exécution

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Par défaut
    Bonsoir,
    Tout d'abord merci d'avoir répondu,
    J'ai enlevé ce qui était inutile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     private void btnNextLevel_Click(object sender, EventArgs e)
            {
                bool verifieImage = false;
     
                for (int _i = 0; _i < nbImages; _i++)
                {
                    if (tabPictureBoxHaut[_i].Image == tabBmp[categorieChoisie, tabReponseTest[niveau, _i]])
                    {                   
                            tabPictureBoxHaut[_i].BackColor = Color.Transparent;
                            verifieImage = true;
                    }
                    else
                    {
                            tabPictureBoxHaut[_i].BackColor = Color.Red;
                            verifieImage = false;
                    }
                }
     
                if (verifieImage)
                {
                    labelBravo.Text = "Congratulation ! click on Next!";
                    niveau++;
                }
            }
    ll me dit au niveau de mon premier if, l'index se trouve en dehors des limites du tableau,

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 95
    Par défaut
    Tu as comparé le contenu de la variable nbImages avec la taille du tableau tabPictureBoxHaut?
    Si ces valeurs sont différentes, le souci est là, est-ce que tu peux boucler sur la taille du tableau plutôt que sur nbImages ?

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2014
    Messages : 15
    Par défaut
    Oui c'est bon super !
    J'ai fais ce que vous m'aviez dis puis j'ai remove ma classe pour faire aparaître le niveau suivant dans ma form.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public void niveauSuivant()
            {
                niveau++;
                this.Controls.Remove(test);
                test = new Test(niveau, this);
                this.Controls.Add(test);
            }
    Et j'en profite pour une autre question : en fait je dois faire un bouton " How to Play" et directement arrivé sur une vidéo (celle-ci contiendra les explication pour comprendre comment jouer au jeu)
    J'ai un peu chercher et j'ai vu que je pouvais introduire dans visual studio le lecteur windows media (c'est plutôt pas mal !)
    Mais le truc c'est que je dois passer directement a la lecture au moment de l'impulsion du bouton
    Je vois pas comment...
    Ce code la passe par une recherche d'un fichier dans un répertoire pour pouvoir ensuite la lire, mais moi je veux sauter cette étape.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    fichier = openFileDialog1.SafeFileNames;
                    chemins = openFileDialog1.FileNames;
                    for(int i = 0; i< fichier.Length; i++)
                    {
                        listBox1.Items.Add(fichier[i]);
                    }
                }
            }
     
            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                axWindowsMediaPlayer1.URL = chemins[listBox1.SelectedIndex];
            } 
     
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 21
    Dernier message: 25/12/2008, 21h44
  2. sous formulaire dans un principal via bouton
    Par tomas dans le forum IHM
    Réponses: 1
    Dernier message: 23/01/2007, 14h59
  3. Réponses: 2
    Dernier message: 22/01/2007, 15h31
  4. Réponses: 2
    Dernier message: 15/06/2005, 23h56
  5. Réponses: 2
    Dernier message: 03/02/2005, 08h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo