| Programa.cs |
namespace Acompanhamento
{
static class TPrograma
{
static void Main (string[] args)
{
using (TAcompanhamento Jogo= new TAcompanhamento ())
Jogo.Run ();
}
} } |
| Principal.cs |
namespace Acompanhamento
{
public class TAcompanhamento_Base: Microsoft.Xna.Framework.Game
{
protected bool Atirou;
protected double Decorrido, Tempo;
protected float Angulo;
protected GraphicsDeviceManager Dispositivo;
protected int TiroInc;
protected MouseState Dispositivo_Ponteiro;
protected SpriteBatch Titulo, UFO, UFOTiro;
protected SpriteFont TituloFonte;
protected Texture2D UFOTextura, UFOTiroTextura;
protected Vector2 Destino, Direcao, Olhando, Origem, OrigemTiro, Posicao, TituloPosicao;
protected Viewport Dispositivo_VP;
public TAcompanhamento_Base ()
{
Dispositivo = new GraphicsDeviceManager (this);
Content.RootDirectory= "Content";
}
protected override void Initialize ()
{
base.Initialize ();
this.IsMouseVisible= true;
Atirou = false;
Decorrido = 0.0f;
Destino = new Vector2 (0, 0);
Direcao = new Vector2 (0, 0);
}
protected override void LoadContent ()
{
Dispositivo_VP= Dispositivo.GraphicsDevice.Viewport;
UFO = new SpriteBatch (GraphicsDevice);
UFOTiro = new SpriteBatch (GraphicsDevice);
Titulo = new SpriteBatch (GraphicsDevice);
TituloFonte = Content.Load<SpriteFont> ("Courier New");
UFOTextura = Content.Load<Texture2D> (@"objeto\ufo");
UFOTiroTextura= Content.Load<Texture2D> (@"objeto\ufotiro");
TituloPosicao = new Vector2 (0, 0);
Posicao = new Vector2 (Dispositivo_VP.Width/2, Dispositivo_VP.Height/2);
Origem = new Vector2 (UFOTextura.Width/2, UFOTextura.Height/2);
Olhando = new Vector2 (Posicao.X, Dispositivo_VP.Height-1);
OrigemTiro = new Vector2 (Olhando.X-UFOTiroTextura.Width/2, Posicao.Y-UFOTiroTextura.Height/2);
}
protected override void Update (GameTime AGT)
{
if (GamePad.GetState (PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit ();
Tempo += AGT.ElapsedGameTime.TotalMilliseconds;
Dispositivo_Ponteiro= Mouse.GetState ();
base.Update (AGT);
}
protected override void Draw (GameTime AGT)
{
Dispositivo.GraphicsDevice.Clear (Color.Black);
Disparar_AoDesenhar ();
base.Draw (AGT);
}
protected virtual void Disparar_AoDesenhar ()
{
}
} } |
| Maquina.cs |
namespace Acompanhamento
{
class TAcompanhamento: TAcompanhamento_Base
{
protected override void Disparar_AoDesenhar ()
{
Destino.X= Dispositivo_Ponteiro.X;
Destino.Y= Dispositivo_Ponteiro.Y;
Angulo = OlharPara (Posicao, Olhando, Destino);
MostrarTitulo ();
MostrarUFO ();
MostrarTiro ();
}
protected virtual void MostrarTiro ()
{
Vector2 P;
if (Atirou) {
P = new Vector2 (OrigemTiro.X + Direcao.X*TiroInc, OrigemTiro.Y + Direcao.Y*TiroInc);
TiroInc+= 10;
UFOTiro.Begin (SpriteBlendMode.Additive);
UFOTiro.Draw (UFOTiroTextura, P, Color.White);
UFOTiro.End ();
if ((P.X < 0) || (P.X > Dispositivo_VP.Width) || (P.Y < 0) || (P.Y > Dispositivo_VP.Height))
Atirou= false;
}
else if (Tempo - Decorrido >= 500.0f) {
TiroInc = 0;
Atirou = true;
Decorrido= Tempo;
Direcao = Destino-Posicao;
Direcao.Normalize ();
}
}
protected virtual void MostrarTitulo ()
{
string TituloTexto;
TituloTexto= "Ponteiro (" + Destino.X.ToString () + ", " + Destino.Y.ToString () + ") " +
Math.Truncate (MathHelper.ToDegrees (Angulo)).ToString () + " graus";
Titulo.Begin ();
Titulo.DrawString (TituloFonte, TituloTexto, TituloPosicao, Color.LightGreen);
Titulo.End ();
}
protected virtual void MostrarUFO ()
{
UFO.Begin (SpriteBlendMode.Additive);
UFO.Draw (UFOTextura, Posicao, null, Color.White, Angulo, Origem, 1.0f, SpriteEffects.None, 0.0f);
UFO.End ();
}
protected virtual float OlharPara (Vector2 APosicao, Vector2 APosicaoOlhando, Vector2 APosicaoDesejada)
{
Vector2 Direcao, Origem;
Origem = APosicaoOlhando-APosicao;
Direcao= APosicaoDesejada-APosicao;
// Ângulo entre vetores
return (float) (Math.Atan2 (Direcao.Y, Direcao.X) - Math.Atan2 (Origem.Y, Origem.X));
}
} } |
