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

Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

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.