コード例 #1
0
        private void tsSave_Click(object sender, EventArgs e)
        {
            #region Notes et pseudocode

            //      Identifier le fichier à créer
            //      Préparer l'objet à sérialiser
            //      Ouvrir le fichier et sérialiser
            //      S'assurer qu'on a traité tous les champs globaux.

            #endregion Notes et pseudocode

            #region CODE

            //      Identifier le fichier à créer
            SaveFileDialog d = new SaveFileDialog();
            d.Title = "Fichier où enregistrer la grille";
            if (d.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }

            //      Préparer l'objet à sérialiser
            Contenu[,] jeu = new Contenu[N, N];
            for (int row = 0; row < N; row++)
            {
                for (int col = 0; col < N; col++)
                {
                    jeu[row, col] =
                        new Contenu(row, col, grille[row, col].Text[0], grille[row, col].originale);
                    // Si on est en mode conception, les cases non vides sont toutes des cases originales
                    if ((etat == Etat.Création) && (grille[row, col].Text[0] != ' '))
                    {
                        jeu[row, col].originale = true;
                    }
                }
            }
            //      Ouvrir le fichier et sérialiser
            BinaryFormatter bf = new BinaryFormatter();
            FileStream      f  = new FileStream(d.FileName, FileMode.Create, FileAccess.Write, FileShare.None);
            bf.Serialize(f, jeu);
            f.Close();

            //      S'assurer qu'on a traité tous les champs globaux.
            hasChanged = false;

            #endregion CODE
        }
コード例 #2
0
        private void MenuAnnuler_Click(object sender, EventArgs e)
        {
            // case cs = sender as case;
            Case    precedents = null;
            Contenu preds      = null;

            //  preds = historique[historique.count - 1];
            //     precedents = grille[preds.row, preds.col];
            //if ((precedents != cs))
            //     historique.removeat(historique.count - 1);
            if (historique.Count != 0)
            {
                preds      = historique[historique.Count - 1];
                precedents = grille[preds.row, preds.col];
                historique.RemoveAt(historique.Count - 1);
                //preds = historique[historique.Count - 1];
                //precedents = grille[preds.row, preds.col];
                historique.RemoveAt(historique.Count - 1);
            }



            #region Notes et pseudocode
            // Il faut restaurer le dernier Contenu de l'historique


            // Rappel: on ne peut arriver ici que si historique
            //         contient au moins un élément.
            // Mais, on va quand même vérifier.
            // Annuler la dernière action
            // Le bouton annuler est-il encore disponible?
            #endregion
            #region CODE
            // L'écriture de cette méthode est laissée en TP.
            #endregion
        }
コード例 #3
0
        private void Case_Click(object sender, EventArgs e)
        {
            #region Notes et pseudocode
            // Obtenir une référence sur la case cliquée.
            // Si la case est originale, on ne peut la changer.
            // Sauvegarder l'état actuel de la case (pour pouvoir annuler)
            //    Ici, il faut faire attention, si on clique la même case,
            //    on ne doit sauver qu'un historique.
            // Changer la valeur de la case ==> annotations aussi.
            // La grille est-elle complétée?
            //   Si oui, arrêter le temps, désactiver le menu annuler, afficher un message.
            //   Si non, activer le menu annuler, en jeu, activer le timer.
            #endregion
            #region CODE
            // Obtenir une référence sur la case cliquée.
            Case c = sender as Case;

            // Si la case est originale, on ne peut la changer.
            if (c.originale)
            {
                return;
            }

            // Sauvegarder l'état actuel de la case (pour pouvoir annuler)
            //    Ici, il faut faire attention, si on clique la même case,
            //    on ne doit sauver qu'un historique.
            Case    precedent = null;
            Contenu pred      = null;
            if (historique.Count > 0)
            {
                pred      = historique[historique.Count - 1];
                precedent = grille[pred.row, pred.col];
            }
            if ((precedent != c))
            {
                historique.Add(new Contenu(c.row, c.col, c.Text[0], false));
            }
            // Changer la valeur de la case ==> annotations aussi.
            switch (c.Text[0])
            {
            case ' ': c.SetValue("0"); break;

            case '0': c.SetValue("1"); break;

            case '1': c.SetValue(" "); break;
            }
            // La grille est-elle complétée?
            //   Si oui, arrêter le temps, désactiver le menu annuler,
            //      afficher un message.


            //   Si non, activer le menu annuler, en jeu, activer le timer.
            hasChanged          = true;
            MenuAnnuler.Enabled = true;
            if (etat == Etat.Initial)
            {
                etat = Etat.EnJeu;
            }
            timer.Enabled = (etat == Etat.EnJeu);
            #endregion
        }