2017-07-15 1 views
-1

Je cherche à faire une pluie violette sous forme de fenêtres en C#, tout comme celle de cette vidéo https://www.youtube.com/watch?v=KkyIDI6rQJI Hes utilise un traitement appelé ide avec le langage de programmation Java.Purple Rain in C#

Voici mon code à ce jour:

using System; 
using System.Diagnostics; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 

namespace PurpleRain 
{ 

public partial class MainForm : Form 
{ 
    public MainForm() 
    { 

    } 
    float x=150; 
    float y=1; 
    float yspeed=1; 

    public void fall() 
    { 
     y=y+yspeed; 
     if (y>=350) 
     { 
      y=0; 
     } 
    } 
    public void show(float a,float b) 
    { 
     Graphics g; 
     g = this.CreateGraphics(); 
     Pen myPen = new Pen(Color.MediumPurple); 
     myPen.Width = 2; 
     Pen myErase = new Pen(Color.Lavender); 
     myErase.Width = 2; 
     g.DrawLine(myErase, a, b-1, a, b+15); 
     g.DrawLine(myPen, a, b, a, b+15); 
    } 

    void draw() 
    { 
     for (int i=0;i<10;i++){ 
      show(x,y); 
      fall(); 
     } 
    } 

    void Timer1Tick(object sender, EventArgs e) 
    { 
     draw(); 
    } 
} 

Qu'est-ce que ce code est de dessiner une seule ligne violette et faire tomber au fond en effaçant la ligne tracée précédente. Mon problème est d'ajouter cette ligne violette peut-être une centaine pour simuler une pluie comme dans la vidéo et de les faire commencer à des positions aléatoires x et y ainsi. J'ai essayé des boucles, liste en vain.

+1

Vous devez encapsuler la longueur de position et la vitesse dans une classe personnalisée. Fournissez cette classe avec une fonction de dessin. Créez une liste de ces objets, remplissez les données et commencez à dessiner :-) – Stefan

+0

Il n'utilise pas Java. Le traitement est son propre langage de programmation * basé * sur Java. On pourrait argumenter qu'il est plus proche d'une bibliothèque d'abstraction de cadre ou de haut niveau que d'un langage, mais ce n'est certainement pas un IDE. – stybl

+0

Comme le dit @Stefan, où est votre classe 'Drop'? C'est montrer dans la vidéo comment l'utiliser, pourquoi ne pas l'implémenter? – oerkelens

Répondre

0

Pas le meilleur code, mais il peut être un bon point de départ pour quelque chose de mieux:

using System; 
using System.Collections.Generic; 
using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     List<Drop> rain = new List<Drop>(); // keeps all drops in one place 
     Random rnd = new Random();   // for generating random numbers 


     public Form1() 
     { 
      InitializeComponent(); 

      for (int i = 0; i < 100; i++) // creates 100 drops at random position and with random speed 
       rain.Add (CreateRandomDrop()); 
     } 


     private Drop CreateRandomDrop() 
     { 
      return new Drop // create drop with random position and speed 
      { 
       Position = new PointF (rnd.Next (this.Width), rnd.Next (this.Height)), 
       YSpeed = (float) rnd.NextDouble() * 3 + 2 // 2..5 
      }; 
     } 


     private void UpdateRain() // changes Y position for each drop (falling), also checks if a drop is outside Main form, if yes, resets position to 0 
     { 
      foreach (var drop in rain) 
      { 
       drop.Fall(); 

       if (drop.Position.Y > this.Height) 
        drop.Position.Y = 0; 
      } 
     } 


     private void RenderRain() 
     { 
      using (var grp = this.CreateGraphics()) // using will call IDisposable.Dispose 
      { 
       grp.Clear (Color.DarkBlue); 

       foreach (var drop in rain) 
        grp.DrawLine (Pens.White, drop.Position, new PointF (drop.Position.X, drop.Position.Y + 3)); 
      } 
     } 


     private void timer1_Tick (object sender, EventArgs e) 
     { 
      UpdateRain(); 
      RenderRain(); 
     } 
    } 


    class Drop 
    { 
     public PointF Position; 
     public float YSpeed; 

     public void Fall() => Position.Y += YSpeed; 
    } 
} 
+0

merci! @apocalypse. J'ai réussi à le faire fonctionner. Pour quelqu'un qui est nouveau à C# et la programmation orientée objet lui-même cela a beaucoup aidé. :) –