All pastes #418589 Raw Edit

BJ

public text v1 · immutable
#418589 ·published 2007-03-31 18:31 UTC
rendered paste body
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;
using System.Threading;

namespace CannonBallGame
{
    class Cannon
    {
        private Panel box;
        private float angle;
        private int velocity;
        private int height;
        private int current = 0;
        //private static int xSize = 10;
        //private static int ySize = 10;
        private SizeF pSize = new SizeF(5.0f, 5.0f);
        private float currentX = 0;
        private float currentY;
        PointF pt = new PointF();

        Matrix xform = new Matrix();
			

        public Cannon(Panel p, int z, int x, int y)
        {
            box = p;
            angle = z * (float)(Math.PI/180);
            velocity = x;
            height = y;
            currentY = height;
            xform.Scale(1.0f, -1.0f);
            xform.Translate(0, -box.Height);
        }    

        /**
        * Use code below to check if projectile has hit a target
        * if(projectile.IntersectsWith(target)){
        * score++;
        * cancel projectile animation;
        * remove the target from window;
        * }
        **/

        //// Below follows projectile trajectory calculations
        //// Convert IA to radian, radian = degrees * (PI/180)
        //angle = Convert.ToInt32( (IA * (Math.PI/180)) );

        //// Find X and Y values at time “current“
        //int currentX = ((velocity * Math.Cos(angle) * current)) / 2;
        //int currentY = (((velocity * Math.Sin(angle) * current) - (.5 * 9.8 * (current * current))) / 2);

        public void draw()
        {
            Graphics g = box.CreateGraphics();
            g.Transform = xform;
            Brush blackBrush = new SolidBrush(Color.Black);
            pt = new PointF(height, 0);
            RectangleF rectA = new RectangleF(pt, pSize);
            g.FillEllipse(blackBrush, rectA);
        }

        public void move()
        {
            Graphics g = box.CreateGraphics();
            
            g.Transform = xform;

            Brush blackBrush = new SolidBrush(Color.Black);
            Brush bgBrush = new SolidBrush(box.BackColor);
            
            
            // Visually remove "old" projectile by drawing over it with background color
            RectangleF rect1 = new RectangleF(pt, pSize);
            g.FillEllipse(bgBrush, rect1);

            //current++;

            //float distance = (float)(((velocity * Math.Cos(angle) * current)) / 9.8f) *
            //                            (float)(velocity * Math.Sin(angle) +
            //                                Math.Sqrt(((velocity * Math.Sin(angle)) *
            //                                    (velocity * Math.Sin(angle))) + (2 * 9.8f * height)));
            //currentX = distance;

            // Find X and Y values at time “current“
            currentX = (float)((velocity * Math.Cos(angle) * current)) / 2.0f;
            currentY = (float)(((velocity * Math.Sin(angle) * current) - (.5f * 9.8f * (current * current))) / 2.0f);
            

            //float heights = (float)((currentX * Math.Tan(angle)) - (((9.8f * currentX) *
            //                        (9.8f * currentX)) / (2 * ((velocity * Math.Cos(angle)) *
            //                                (velocity * Math.Cos(angle))))) + height);
            //currentY = -heights;

            PointF tempPT = new PointF(currentX, -currentY);
            pt = tempPT;

            // Draw the projectile in its new position
            RectangleF rect2 = new RectangleF(pt, pSize);
            g.FillEllipse(blackBrush, rect2);
        }

        public void fire()
        {
            draw();
            pt = new PointF(currentX, -currentY);
            while (currentX < box.Size.Width)
            {
                current = current + 2;
                move();
                Thread.Sleep(100);
            }
            Graphics g = box.CreateGraphics();
            Brush bgBrush = new SolidBrush(box.BackColor);
            RectangleF rectB = new RectangleF(pt, pSize);
            g.FillEllipse(bgBrush, rectB);
        }
    }
}