Bouncing ball example? - Programmers Heaven

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Categories

Bouncing ball example?

MordienMordien Posts: 34Member
Hi!

I wonder if anyone could show me an example in C# of an application of a ball (filled circle) that moves around within the limits of a window.
I feel a little stupid asking this question because I have no idea how much code this requires. All I know is that I need a timer that redraws the window with the ball and that I have to know how the new coordinates for the ball for every "Timer-tick".

Or do you guys know of any websites that has similar examples in C#?

Comments

  • yuvalyuval Posts: 13Member

    Hi

    Here is a complete prog.
    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Timers;

    namespace bouncingBall
    {
    ///
    /// Summary description for Form1.
    ///
    public class Form1 : System.Windows.Forms.Form
    {
    public static int x =0;
    public static int y =0 ;
    public static int counter =0;
    bool bottom=false, left=false, right=false,top=true;

    private System.ComponentModel.Container components = null;

    public Form1()
    {
    InitializeComponent();

    }

    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if (components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    }

    #region
    private void InitializeComponent()
    {
    // Activates double buffering
    SetStyle(ControlStyles.UserPaint, true);
    SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    SetStyle(ControlStyles.DoubleBuffer, true);
    //
    // Form1
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 266);
    this.Name = "Form1";
    this.Text = "Form1";
    this.Load += new System.EventHandler(this.Form1_Load);

    }
    #endregion

    ///
    /// The main entry point for the application.
    ///
    [STAThread]
    static void Main()
    {
    Application.Run(new Form1());
    }

    protected override void OnPaint(PaintEventArgs pe)
    {
    Graphics g = pe.Graphics;
    Pen myPen= new Pen(Color.Black, 2);
    SolidBrush myBrush = new SolidBrush(Color.Red);

    g.DrawEllipse(myPen,x, y, 30,30);
    g.FillEllipse(myBrush,x,y, 30,30);
    Invalidate();
    }

    public void bounceTheBall()
    {
    if((y+67)==this.Bounds.Bottom)
    {
    right=true;
    left=false;
    top=false;
    bottom=false;
    }

    if((x+43)==this.Bounds.Right)
    {
    right=false;
    left=false;
    top=true;
    bottom=false;
    }

    if((x)==this.Bounds.Left)
    {
    right=false;
    left=false;
    top=false;
    bottom=true;
    }

    if((y)==this.Bounds.Top)
    {
    right=false;
    left=true;
    top=false;
    bottom=false;
    }



    if (bottom==true)
    {
    ++x;
    ++y;

    }

    if (top==true)
    {
    --x;
    --y;
    }

    if (left==true)
    {
    --x;
    ++y;
    }

    if (right==true)
    {
    ++x;
    --y;
    }




    Invalidate();


    }


    private void Form1_Load(object sender, System.EventArgs e)
    {
    Form1 f = new Form1();
    x = (f.Width/2)-60 ;
    myTimer mT = new myTimer ();

    }

    }
    }

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Timers;

    namespace bouncingBall
    {
    ///
    /// Summary description for myTimer.
    ///
    public class myTimer: System.Windows.Forms.Control
    {

    Form1 f ;

    public myTimer()
    {
    f = new Form1();

    System.Timers.Timer rotateTimer = new System.Timers.Timer();
    rotateTimer.Elapsed += new ElapsedEventHandler(Timer1_Tick);
    //you can change the speed here!!!
    rotateTimer.Interval=10;
    rotateTimer.Enabled=true;

    }
    private void Timer1_Tick(object Sender, System.Timers.ElapsedEventArgs e)
    {

    f.bounceTheBall();


    }
    }//end of class
    }// end of name


  • MordienMordien Posts: 34Member
    :Hi! I managed to do the application myself, but I can see your solution is a lot more accurate and correct. Thank you very much.

    /Mordien


    : Hi
    :
    : Here is a complete prog.
    : using System;
    : using System.Drawing;
    : using System.Collections;
    : using System.ComponentModel;
    : using System.Windows.Forms;
    : using System.Data;
    : using System.Timers;
    :
    : namespace bouncingBall
    : {
    : ///
    : /// Summary description for Form1.
    : ///
    : public class Form1 : System.Windows.Forms.Form
    : {
    : public static int x =0;
    : public static int y =0 ;
    : public static int counter =0;
    : bool bottom=false, left=false, right=false,top=true;
    :
    : private System.ComponentModel.Container components = null;
    :
    : public Form1()
    : {
    : InitializeComponent();
    :
    : }
    :
    : protected override void Dispose( bool disposing )
    : {
    : if( disposing )
    : {
    : if (components != null)
    : {
    : components.Dispose();
    : }
    : }
    : base.Dispose( disposing );
    : }
    :
    : #region
    : private void InitializeComponent()
    : {
    : // Activates double buffering
    : SetStyle(ControlStyles.UserPaint, true);
    : SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    : SetStyle(ControlStyles.DoubleBuffer, true);
    : //
    : // Form1
    : //
    : this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    : this.ClientSize = new System.Drawing.Size(292, 266);
    : this.Name = "Form1";
    : this.Text = "Form1";
    : this.Load += new System.EventHandler(this.Form1_Load);
    :
    : }
    : #endregion
    :
    : ///
    : /// The main entry point for the application.
    : ///
    : [STAThread]
    : static void Main()
    : {
    : Application.Run(new Form1());
    : }
    :
    : protected override void OnPaint(PaintEventArgs pe)
    : {
    : Graphics g = pe.Graphics;
    : Pen myPen= new Pen(Color.Black, 2);
    : SolidBrush myBrush = new SolidBrush(Color.Red);
    :
    : g.DrawEllipse(myPen,x, y, 30,30);
    : g.FillEllipse(myBrush,x,y, 30,30);
    : Invalidate();
    : }
    :
    : public void bounceTheBall()
    : {
    : if((y+67)==this.Bounds.Bottom)
    : {
    : right=true;
    : left=false;
    : top=false;
    : bottom=false;
    : }
    :
    : if((x+43)==this.Bounds.Right)
    : {
    : right=false;
    : left=false;
    : top=true;
    : bottom=false;
    : }
    :
    : if((x)==this.Bounds.Left)
    : {
    : right=false;
    : left=false;
    : top=false;
    : bottom=true;
    : }
    :
    : if((y)==this.Bounds.Top)
    : {
    : right=false;
    : left=true;
    : top=false;
    : bottom=false;
    : }
    :
    :
    :
    : if (bottom==true)
    : {
    : ++x;
    : ++y;
    :
    : }
    :
    : if (top==true)
    : {
    : --x;
    : --y;
    : }
    :
    : if (left==true)
    : {
    : --x;
    : ++y;
    : }
    :
    : if (right==true)
    : {
    : ++x;
    : --y;
    : }
    :
    :
    :
    :
    : Invalidate();
    :
    :
    : }
    :
    :
    : private void Form1_Load(object sender, System.EventArgs e)
    : {
    : Form1 f = new Form1();
    : x = (f.Width/2)-60 ;
    : myTimer mT = new myTimer ();
    :
    : }
    :
    : }
    : }
    :
    : using System;
    : using System.Drawing;
    : using System.Collections;
    : using System.ComponentModel;
    : using System.Windows.Forms;
    : using System.Data;
    : using System.Timers;
    :
    : namespace bouncingBall
    : {
    : ///
    : /// Summary description for myTimer.
    : ///
    : public class myTimer: System.Windows.Forms.Control
    : {
    :
    : Form1 f ;
    :
    : public myTimer()
    : {
    : f = new Form1();
    :
    : System.Timers.Timer rotateTimer = new System.Timers.Timer();
    : rotateTimer.Elapsed += new ElapsedEventHandler(Timer1_Tick);
    : //you can change the speed here!!!
    : rotateTimer.Interval=10;
    : rotateTimer.Enabled=true;
    :
    : }
    : private void Timer1_Tick(object Sender, System.Timers.ElapsedEventArgs e)
    : {
    :
    : f.bounceTheBall();
    :
    :
    : }
    : }//end of class
    : }// end of name
    :
    :
    :

  • yuvalyuval Posts: 13Member


    Glad it helped you.
    Please note the double buffering!!! A very important
    feature to disable flickering

    regards
    yuval



    :Hi! I managed to do the application myself, but I can see your solution is a lot more accurate and correct. Thank you very much.
    :
    : /Mordien
    :
    :
    : : Hi
    : :
    : : Here is a complete prog.
    : : using System;
    : : using System.Drawing;
    : : using System.Collections;
    : : using System.ComponentModel;
    : : using System.Windows.Forms;
    : : using System.Data;
    : : using System.Timers;
    : :
    : : namespace bouncingBall
    : : {
    : : ///
    : : /// Summary description for Form1.
    : : ///
    : : public class Form1 : System.Windows.Forms.Form
    : : {
    : : public static int x =0;
    : : public static int y =0 ;
    : : public static int counter =0;
    : : bool bottom=false, left=false, right=false,top=true;
    : :
    : : private System.ComponentModel.Container components = null;
    : :
    : : public Form1()
    : : {
    : : InitializeComponent();
    : :
    : : }
    : :
    : : protected override void Dispose( bool disposing )
    : : {
    : : if( disposing )
    : : {
    : : if (components != null)
    : : {
    : : components.Dispose();
    : : }
    : : }
    : : base.Dispose( disposing );
    : : }
    : :
    : : #region
    : : private void InitializeComponent()
    : : {
    : : // Activates double buffering
    : : SetStyle(ControlStyles.UserPaint, true);
    : : SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    : : SetStyle(ControlStyles.DoubleBuffer, true);
    : : //
    : : // Form1
    : : //
    : : this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    : : this.ClientSize = new System.Drawing.Size(292, 266);
    : : this.Name = "Form1";
    : : this.Text = "Form1";
    : : this.Load += new System.EventHandler(this.Form1_Load);
    : :
    : : }
    : : #endregion
    : :
    : : ///
    : : /// The main entry point for the application.
    : : ///
    : : [STAThread]
    : : static void Main()
    : : {
    : : Application.Run(new Form1());
    : : }
    : :
    : : protected override void OnPaint(PaintEventArgs pe)
    : : {
    : : Graphics g = pe.Graphics;
    : : Pen myPen= new Pen(Color.Black, 2);
    : : SolidBrush myBrush = new SolidBrush(Color.Red);
    : :
    : : g.DrawEllipse(myPen,x, y, 30,30);
    : : g.FillEllipse(myBrush,x,y, 30,30);
    : : Invalidate();
    : : }
    : :
    : : public void bounceTheBall()
    : : {
    : : if((y+67)==this.Bounds.Bottom)
    : : {
    : : right=true;
    : : left=false;
    : : top=false;
    : : bottom=false;
    : : }
    : :
    : : if((x+43)==this.Bounds.Right)
    : : {
    : : right=false;
    : : left=false;
    : : top=true;
    : : bottom=false;
    : : }
    : :
    : : if((x)==this.Bounds.Left)
    : : {
    : : right=false;
    : : left=false;
    : : top=false;
    : : bottom=true;
    : : }
    : :
    : : if((y)==this.Bounds.Top)
    : : {
    : : right=false;
    : : left=true;
    : : top=false;
    : : bottom=false;
    : : }
    : :
    : :
    : :
    : : if (bottom==true)
    : : {
    : : ++x;
    : : ++y;
    : :
    : : }
    : :
    : : if (top==true)
    : : {
    : : --x;
    : : --y;
    : : }
    : :
    : : if (left==true)
    : : {
    : : --x;
    : : ++y;
    : : }
    : :
    : : if (right==true)
    : : {
    : : ++x;
    : : --y;
    : : }
    : :
    : :
    : :
    : :
    : : Invalidate();
    : :
    : :
    : : }
    : :
    : :
    : : private void Form1_Load(object sender, System.EventArgs e)
    : : {
    : : Form1 f = new Form1();
    : : x = (f.Width/2)-60 ;
    : : myTimer mT = new myTimer ();
    : :
    : : }
    : :
    : : }
    : : }
    : :
    : : using System;
    : : using System.Drawing;
    : : using System.Collections;
    : : using System.ComponentModel;
    : : using System.Windows.Forms;
    : : using System.Data;
    : : using System.Timers;
    : :
    : : namespace bouncingBall
    : : {
    : : ///
    : : /// Summary description for myTimer.
    : : ///
    : : public class myTimer: System.Windows.Forms.Control
    : : {
    : :
    : : Form1 f ;
    : :
    : : public myTimer()
    : : {
    : : f = new Form1();
    : :
    : : System.Timers.Timer rotateTimer = new System.Timers.Timer();
    : : rotateTimer.Elapsed += new ElapsedEventHandler(Timer1_Tick);
    : : //you can change the speed here!!!
    : : rotateTimer.Interval=10;
    : : rotateTimer.Enabled=true;
    : :
    : : }
    : : private void Timer1_Tick(object Sender, System.Timers.ElapsedEventArgs e)
    : : {
    : :
    : : f.bounceTheBall();
    : :
    : :
    : : }
    : : }//end of class
    : : }// end of name
    : :
    : :
    : :
    :
    :

Sign In or Register to comment.