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 :

Animation style Matrix [Débutant]


Sujet :

C#

  1. #1
    Invité
    Invité(e)
    Par défaut Animation style Matrix
    Bonjour à tous, j'explique ma situation, je suis étudiant en développement et je dois réaliser une animation style Matrix pour un projet, l'animation fonctionne, je peux changer la couleur ainsi que la taille de la fenêtre.

    Cependant je n'arrive pas à ralentir l'animation (La pluie est assez rapide sur mon pc), je précise que je l'affiche dans une console. Et je me demande aussi s'il est possible d'afficher une vitesse différente aux colonnes, de façon à ce qu'elles n'aient pas toutes la même rapidité ?

    Merci d'avance !

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Zefaster Voir le message
    Bonjour à tous, j'explique ma situation, je suis étudiant en développement et je dois réaliser une animation style Matrix pour un projet, l'animation fonctionne, je peux changer la couleur ainsi que la taille de la fenêtre.

    Cependant je n'arrive pas à ralentir l'animation (La pluie est assez rapide sur mon pc), je précise que je l'affiche dans une console. Et je me demande aussi s'il est possible d'afficher une vitesse différente aux colonnes, de façon à ce qu'elles n'aient pas toutes la même rapidité ?

    Merci d'avance !
    Je pense qu'il nous manque des informations pour t'aider... Comment t'y prends-tu pour faire ces animations?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    Je pense qu'il nous manque des informations pour t'aider... Comment t'y prends-tu pour faire ces animations?
    Et bien j'ai une boucle qui parcours la table ascii et grâce à un random il me sort les caractères au hasard, ensuite j'affiche dans la première colonne trois caractères vert, 6 vert foncé et ensuite un espace, ensuite une fois que la première colonne est affiché il passe à la deuxième et ainsi de suite...
    Ça donne une impression de pluie aléatoire

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    beh poste ton code et on pourra te proposer des solutions...
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par Zefaster Voir le message
    Et bien j'ai une boucle qui parcours la table ascii et grâce à un random il me sort les caractères au hasard, ensuite j'affiche dans la première colonne trois caractères vert, 6 vert foncé et ensuite un espace, ensuite une fois que la première colonne est affiché il passe à la deuxième et ainsi de suite...
    Ça donne une impression de pluie aléatoire
    Dans ce cas, un sleep pourrait ralentir l'exécution du code et donc te permettre de ralentir la "pluie".

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai ajouté ça dans un fichier texte en pièce-jointe, ça sera plus compréhensible je pense
    Dernière modification par Invité ; 08/01/2016 à 11h50.

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    sinon, tu peux t'inspirer de ce que fait ce gars :

    http://www.programgood.net/2009/02/2...onsoleApp.aspx
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    sinon, tu peux t'inspirer de ce que fait ce gars :

    http://www.programgood.net/2009/02/2...onsoleApp.aspx
    Je m'en suis déjà inspiré justement ^^

  9. #9
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (true)
                {
                    UpdateAllColumns(width, height, y);
                    Thread.Sleep(100);
                }

    Ca devrait faire l'affaire si tu utilises donc le code du lien

    Tu remplaces le 100 par ce que tu veux puisque là, j'ai mis une attente de 100 ms en 2 mise à jour d'écran !
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  10. #10
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    while (true)
                {
                    UpdateAllColumns(width, height, y);
                    Thread.Sleep(100);
                }

    Ca devrait faire l'affaire si tu utilises donc le code du lien

    Tu remplaces le 100 par ce que tu veux puisque là, j'ai mis une attente de 100 ms en 2 mise à jour d'écran !
    Merci c'est parfait , et sinon tu pense qu'il est possible de changer la vitesse que de certaines colonnes ?

  11. #11
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    certaines colonnes ?

    A priori, pas avec le code que tu utilises car la mise à jour se fait avec une boucle for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for (x = 0; x < width; ++x)
                {
                    // the bright green character
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.SetCursorPosition(x, y[x]);
                    Console.Write(AsciiCharacter);
    par contre, tu pourrais utiliser des "timers" ou bien utiliser un unique Timer et avoir des colonnes qui soient rafraichis uniquement sur des multiples de ce timer.
    A ce moment là, il faudrait modifier le code de la fonction UpdateallColumn par une méthode genre : UpdateOneColumn (vu que c'est une boucle, ça devrait
    pouvoir se faire)...

    Donc, faisable oui, mais pas en 30 secondes (mais pas 1h non plus)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  12. #12
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    un truc du genre :

    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
    static void Main()
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WindowLeft = Console.WindowTop = 0;
                Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
                Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;
                Console.WriteLine("Hit Any Key To Continue");
                Console.ReadKey();
                Console.CursorVisible = false;
     
                int width, height;
                // setup array of starting y values
                int[] y;
     
                // width was 209, height was 81
                // setup the screen and initial conditions of y
                Initialize(out width, out height, out y);
     
                // do the Matrix effect
                // every loop all y's get incremented by 1
                int[] timer = new int[width];
                int maxspeed = 10;
                for (int i = 0; i < width; i++)
                {
                    timer[i] = rand.Next(1,maxspeed);
                }
     
                int count = 1;
                while (true)
                {
                    for (int i = 0; i < width; i++)
                    {
                        if(count % timer[i] == 0)
                        {
                            UpdateOneColumn(i, height, y);                        
                        }
                    }
                    count++;
                    if (count > maxspeed)
                    {
                        count = 1;
                    }
     
                    //UpdateAllColumns(width, height, y);
                    Thread.Sleep(5);
                }
            }
     
            private static void UpdateOneColumn(int width, int height, int[] y)
            {
                int x = width;
                Console.ForegroundColor = ConsoleColor.Green;
                Console.SetCursorPosition(x, y[x]);
                Console.Write(AsciiCharacter);
     
                // the dark green character -  2 positions above the bright green character
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                int temp = y[x] - 2;
                Console.SetCursorPosition(x, inScreenYPosition(temp, height));
                Console.Write(AsciiCharacter);
     
                // the 'space' - 20 positions above the bright green character
                int temp1 = y[x] - 20;
                Console.SetCursorPosition(x, inScreenYPosition(temp1, height));
                Console.Write(' ');
     
                // increment y
                y[x] = inScreenYPosition(y[x] + 1, height);
            }
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par theMonz31 Voir le message
    un truc du genre :

    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
    static void Main()
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WindowLeft = Console.WindowTop = 0;
                Console.WindowHeight = Console.BufferHeight = Console.LargestWindowHeight;
                Console.WindowWidth = Console.BufferWidth = Console.LargestWindowWidth;
                Console.WriteLine("Hit Any Key To Continue");
                Console.ReadKey();
                Console.CursorVisible = false;
     
                int width, height;
                // setup array of starting y values
                int[] y;
     
                // width was 209, height was 81
                // setup the screen and initial conditions of y
                Initialize(out width, out height, out y);
     
                // do the Matrix effect
                // every loop all y's get incremented by 1
                int[] timer = new int[width];
                int maxspeed = 10;
                for (int i = 0; i < width; i++)
                {
                    timer[i] = rand.Next(1,maxspeed);
                }
     
                int count = 1;
                while (true)
                {
                    for (int i = 0; i < width; i++)
                    {
                        if(count % timer[i] == 0)
                        {
                            UpdateOneColumn(i, height, y);                        
                        }
                    }
                    count++;
                    if (count > maxspeed)
                    {
                        count = 1;
                    }
     
                    //UpdateAllColumns(width, height, y);
                    Thread.Sleep(5);
                }
            }
     
            private static void UpdateOneColumn(int width, int height, int[] y)
            {
                int x = width;
                Console.ForegroundColor = ConsoleColor.Green;
                Console.SetCursorPosition(x, y[x]);
                Console.Write(AsciiCharacter);
     
                // the dark green character -  2 positions above the bright green character
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                int temp = y[x] - 2;
                Console.SetCursorPosition(x, inScreenYPosition(temp, height));
                Console.Write(AsciiCharacter);
     
                // the 'space' - 20 positions above the bright green character
                int temp1 = y[x] - 20;
                Console.SetCursorPosition(x, inScreenYPosition(temp1, height));
                Console.Write(' ');
     
                // increment y
                y[x] = inScreenYPosition(y[x] + 1, height);
            }
    J'ai testé dans mon code c'est exactement ce que je voulais, merci beaucoup pour ton aide !

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

Discussions similaires

  1. Animation style "aspirateur"
    Par Gob59 dans le forum Android
    Réponses: 0
    Dernier message: 20/05/2013, 21h24
  2. [C#][Winform] - Effet animé style Compiz
    Par toxycyty dans le forum Windows Forms
    Réponses: 0
    Dernier message: 07/03/2012, 16h44
  3. création d'un animation style matlab en C#
    Par dronix dans le forum C#
    Réponses: 3
    Dernier message: 09/04/2010, 14h55
  4. Effet matrix + animation
    Par Oups.. dans le forum Débuter
    Réponses: 6
    Dernier message: 02/04/2008, 20h18
  5. [FLASH MX2004]Animation Style 3D qui pivote sur elle même.
    Par °°° Zen-Spirit °°° dans le forum Flash
    Réponses: 1
    Dernier message: 06/06/2006, 21h47

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