DEFCOM1

Computer Controlled Sprites

 Add a new sprite Create new Texture and Position Load new texture Draw Sprite Update cube Random Number

If you have forgotten how see lesson 3

2. Create new Texture and Position

In the Global Variabls where you created your textures and Vectors for the ufo add the code for asteroidTex and asteroidPos

```// This is a texture we can render.
Texture2D ufoTex;
Texture2D asteroidTex;

// Set the coordinates to draw the sprite at.
Vector2 ufoPos = Vector2.Zero;
Vector2 asteroidPos = Vector2.Zero;
```

```asteroidTex = Content.Load<Texture2D>("asteroid");
```

4. Draw Sprite

We can edit the void Draw function to draw our asteroid

add the spriteBatch.Draw(asteroidTex... after the ufoTex

```spriteBatch.Begin();
spriteBatch.Draw(ufoTex, ufoPos, Color.White);
spriteBatch.Draw(asteroidTex, asteroidPos, Color.White);      //NEW LINE
spriteBatch.End();
```

Pressing F5 should display your cube

5. Update asteroid

We now need to add code to the Update function.

To make the asteroid move we just add 5 to it's current Y position each frame

Add this line just before the if statements for moving your ufo

```//update asteroid
asteroidPos.Y += 5;
```

Pressing F5 should show your asteroid falling off the bottom of the screen never to be seen again :(

We are now going to instruct our asteroid to reset to above the screen and randomly pick a new X position

```if (asteroidPos.Y > 800)
{
Random rand = new Random();
asteroidPos.X = rand.Next(800 - asteroidTex.Width);
asteroidPos.Y = -asteroidTex.Height;
}
```

rand.Next(800 - cubeTex.Width) generates a number between 0 and 800 take away the width of the cube

The Complete Listing should now look something like this.

```public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

// This is a texture we can render.
Texture2D ufoTex;
Texture2D asteroidTex;

// Set the coordinates to draw the sprite at.
Vector2 ufoPos = Vector2.Zero;
Vector2 asteroidPos = Vector2.Zero;

public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
}

protected override void Initialize()
{

graphics.PreferredBackBufferWidth = 800;
graphics.PreferredBackBufferHeight = 600;

graphics.IsFullScreen = false;
graphics.ApplyChanges();

base.Initialize();
}

{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);

}

{
// TODO: Unload any non ContentManager content here
}

protected override void Update(GameTime gameTime)
{
// Allows the game to exit
this.Exit();

//update asteroid
asteroidPos.Y += 5;

if (asteroidPos.Y > 800)
{
Random rand = new Random();
asteroidPos.X = rand.Next(800 - asteroidTex.Width);
asteroidPos.Y = -asteroidTex.Height;
}

//update ufo
KeyboardState key = Keyboard.GetState();

if (key.IsKeyDown(Keys.Left) && ufoPos.X > 0)
{
ufoPos.X -= 5;
}
if (key.IsKeyDown(Keys.Right) && ufoPos.X < 800- ufoTex.Width)
{
ufoPos.X += 5;
}
if (key.IsKeyDown(Keys.Up) && ufoPos.Y > 0)
{
ufoPos.Y -= 5;
}
if (key.IsKeyDown(Keys.Down) && ufoPos.Y < 600 - ufoTex.Height)
{
ufoPos.Y += 5;
}

base.Update(gameTime);
}

protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(ufoTex, ufoPos, Color.White);
spriteBatch.Draw(asteroidTex, asteroidPos, Color.White);
spriteBatch.End();

base.Draw(gameTime);
}
}
```