| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- namespace Tutorial010.Sprites
- {
- public class Ball : Sprite
- {
- private float _timer = 0f; // Incrementing the speed over time
- private Vector2? _startPosition = null;
- private float? _startSpeed;
- private bool _isPlaying;
- public Score Score;
- public int SpeedIncrementSpan = 10; // How often the speed will increment
- public Ball(Texture2D texture)
- : base(texture)
- {
- Speed = 3f;
- }
- public override void Update(GameTime gameTime, List<Sprite> sprites)
- {
- if (_startPosition == null)
- {
- _startPosition = Position;
- _startSpeed = Speed;
- Restart();
- }
- if (Keyboard.GetState().IsKeyDown(Keys.Space))
- _isPlaying = true;
- if (!_isPlaying)
- return;
- _timer += (float)gameTime.ElapsedGameTime.TotalSeconds;
- if (_timer > SpeedIncrementSpan)
- {
- Speed++;
- _timer = 0;
- }
- foreach (var sprite in sprites)
- {
- if (sprite == this)
- continue;
- if (this.Velocity.X > 0 && this.IsTouchingLeft(sprite))
- this.Velocity.X = -this.Velocity.X;
- if (this.Velocity.X < 0 && this.IsTouchingRight(sprite))
- this.Velocity.X = -this.Velocity.X;
- if (this.Velocity.Y > 0 && this.IsTouchingTop(sprite))
- this.Velocity.Y = -this.Velocity.Y;
- if (this.Velocity.Y < 0 && this.IsTouchingBottom(sprite))
- this.Velocity.Y = -this.Velocity.Y;
- }
- if (Position.Y <= 0 || Position.Y + _texture.Height >= Game1.ScreenHeight)
- Velocity.Y = -Velocity.Y;
- if (Position.X <= 0)
- {
- Score.Score2++;
- Restart();
- }
- if (Position.X + _texture.Width >= Game1.ScreenWidth)
- {
- Score.Score1++;
- Restart();
- }
- Position += Velocity * Speed;
- }
- public void Restart()
- {
- var direction = Game1.Random.Next(0, 4);
- switch (direction)
- {
- case 0:
- Velocity = new Vector2(1, 1);
- break;
- case 1:
- Velocity = new Vector2(1, -1);
- break;
- case 2:
- Velocity = new Vector2(-1, -1);
- break;
- case 3:
- Velocity = new Vector2(-1, 1);
- break;
- }
- Position = (Vector2)_startPosition;
- Speed = (float)_startSpeed;
- _timer = 0;
- _isPlaying = false;
- }
- }
- }
|