using System; using System.Collections.Generic; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using DW.Stream; namespace DWGame.Player { public class AI { //struct to hold fighter attributes public struct enemyFighter { public Vector2 position; public Texture2D enemyShip; public Rectangle enemyBox; } //struct used to hold missle attributes public struct missle { public Vector2 mPosition; public Rectangle mBox; public Texture2D mTex; } //instances of enemy and missle public static enemyFighter enemy; public static missle missle1; //lists to hold all the enemy fighters and their missles public static List enemies; public static List missles; //variables used to hold counter for elapsed time public static GameTime gametime; public static int timeCounter; //constructor public AI() { missle1 = new missle(); missles = new List(); enemy = new enemyFighter(); enemies = new List(); missle1.mTex = Renderer.content.Load("ships/Missle"); enemy.enemyShip = Renderer.content.Load("ships/EnemyFighter"); timeCounter = 0; gametime = new GameTime(); } //method used to generate missles fired by enemies public static void fire(enemyFighter inFighter) { missle1.mPosition.X = (int)(inFighter.position.X - 30); missle1.mPosition.Y = (int)(inFighter.position.Y + 8); missle1.mBox = new Rectangle((int)missle1.mPosition.X, (int)missle1.mPosition.Y, (int)missle1.mTex.Width, (int)missle1.mTex.Height); missles.Add(missle1); } //method used to pass missle list to Collision public static List getMissles() { return missles; } //method used to set missle list with updated list from Collision public static void setMissles() { missles = Collision.getEMissles(); } //method used to pass enemies list to Collision public static List getFighters() { return enemies; } //method used to update the positions of the enemy fighters and their missles public static void Update(int inCounter) { if (PhoenixGame.gameTimer.IsRunning) { timeCounter = (int)gametime.ElapsedGameTime.TotalSeconds; switch (inCounter) { case 3: if (enemies.Count < 1 && (timeCounter % 300 == 0)) { enemy.position.X = (int)(750); enemy.position.Y = 200; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); enemy.position.X = (int)(750); enemy.position.Y = 275; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); enemy.position.X = (int)(750); enemy.position.Y = 350; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); Background.fgCounter = 0; } break; case 4: if (enemies.Count < 1 && (timeCounter % 300 == 0)) { enemy.position.X = (int)(750); enemy.position.Y = 275; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); enemy.position.X = (int)(750); enemy.position.Y = 325; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); Background.fgCounter = 0; } break; case 5: if (enemies.Count < 1 && (timeCounter % 300 == 0)) { enemy.position.X = (int)(750); enemy.position.Y = 300; enemy.enemyBox = new Rectangle((int)enemy.position.X, (int)enemy.position.Y, 50, 40); enemies.Add(enemy); Background.fgCounter = 0; } break; } for (int i = 0; i < enemies.Count; i++) { enemyFighter temp = enemies[i]; temp.position.X = (int)temp.position.X - 1; temp.enemyBox.X = (int)temp.position.X; enemies[i] = temp; Random rand = new Random(); int holder = rand.Next(100); if (holder == 3) AI.fire(enemies[i]); if (enemies[i].position.X < 15) enemies.RemoveAt(i); } for (int i = 0; i < missles.Count; i++) { missle temp = missles[i]; temp.mPosition.X = (int)temp.mPosition.X - 5; temp.mBox.X = (int)temp.mPosition.X; missles[i] = temp; if (missles[i].mPosition.X < 15) missles.RemoveAt(i); } } } //method used to draw enemy fighters and their missles public static void Draw() { for (int i = 0; i < enemies.Count; i++) { Renderer.spriteBatch.Draw(enemies[i].enemyShip, enemies[i].enemyBox, Color.White); } for (int i = 0; i < missles.Count; i++) { Renderer.spriteBatch.Draw(missles[i].mTex, missles[i].mBox, Color.White); } } } }