示例#1
0
        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";

            camera = new BasicCamera(this);
            bar = new Cube(this);
            ball = new Ball(this);

            for (int i = 0; i < levels.Length; i++)
                levels[i] = new Level(this);

            currentLevel = levels[0];

            Components.Add(camera);
            Components.Add(ball);
            Components.Add(bar);

            Services.AddService(typeof(ICameraService), camera);
        }
示例#2
0
 public void ClearLastCollision()
 {
     lastCollision = null;
 }
示例#3
0
        public bool CheckCollision(Ball ball)
        {
            bool verticalChange = false;
            bool cubeDestroyed = false;

            foreach (Cube cube in cubes)
            {
                if (cube != lastCollision && cube.Enabled && ball.BoundingSphere.Intersects(cube.BoundingBox))
                {
                    if ((IsBetween(ball.Position.Y, cube.Position.Y, cube.Size.Y) ||
                        (ball.Position.Y < cube.Position.Y && ball.Velocity.Y < 0.0f) ||
                        (ball.Position.Y > cube.Position.Y && ball.Velocity.Y > 0.0f)) && ball.Velocity.X != 0.0f)
                        ball.Velocity *= new Vector2(-1.0f, 1.0f);
                    else if (!verticalChange)
                    {
                        ball.Velocity *= new Vector2(1.0f, -1.0f);
                        verticalChange = true;
                    }

                    if (cube.Lives > 0 && --cube.Lives == 0)
                    {
                        cube.Enabled = cube.Visible = false;
                        score.Play();
                        cubeDestroyed = true;
                    }
                    else
                        bounce.Play();

                    lastCollision = cube;
                }
            }

            return cubeDestroyed;
        }
示例#4
0
        public override void Initialize()
        {
            base.Initialize();

            if (Difficulty == 0)
            {
                for (int i = 0; i < 3; i++)
                {
                    Cube cube = new Cube(Game);
                    cube.Position = new Vector2(0.0f, i * (cubeHeight + space) + offsetY);
                    cube.Size = new Vector2(cubeWidth, cubeHeight);
                    cube.Lives = 3 - i;
                    cubes.Add(cube);
                }
            }
            else if (Difficulty == 1)
            {
                int count = 0;

                for (int i = 0; i < rows; i++)
                    for (int j = 0; j < cols; j++)
                    {
                        Cube cube = new Cube(Game);
                        cube.Position = new Vector2(((1 - cols) / 2.0f + j) * (cubeWidth + space), i * (cubeHeight + space) + offsetY);
                        cube.Size = new Vector2(cubeWidth, cubeHeight);
                        cube.Lives = count++ % 4;
                        cubes.Add(cube);
                    }
            }
            else
            {
                for (int i = 0; i < rows; i++)
                    for (int j = 0; j < cols; j++)
                    {
                        Cube cube = new Cube(Game);
                        cube.Position = new Vector2(((1 - cols) / 2.0f + j) * (cubeWidth + space), i * (cubeHeight + space) + offsetY);
                        cube.Size = new Vector2(cubeWidth, cubeHeight);
                        cube.Lives = i % 4;
                        cubes.Add(cube);
                    }
            }

            Cube[] walls = new Cube[3];

            for (int i = 0; i < 3; i++)
                walls[i] = new Cube(Game);

            walls[0].Position = new Vector2(-(Width + wallSize) / 2.0f, Height / 2.0f);
            walls[0].Size = new Vector2(wallSize, Height + 2.0f * wallSize);

            walls[1].Position = new Vector2((Width + wallSize) / 2.0f, Height / 2.0f);
            walls[1].Size = new Vector2(wallSize, Height + 2.0f * wallSize);

            walls[2].Position = Vector2.UnitY * (Height + wallSize/ 2.0f);
            walls[2].Size = new Vector2(Width + 2.0f * wallSize, wallSize);

            cubes.AddRange(walls);

            foreach (Cube cube in cubes)
                cube.Initialize();
        }