// Create our sprites ship = AddSprite<ShipSprite>(); barrier1 = AddSprite<BarrierSprite>(); barrier2 = AddSprite<BarrierSprite>(); barrier3 = AddSprite<BarrierSprite>(); barrier4 = AddSprite<BarrierSprite>(); missile = AddSprite<MissileSprite>(); ufo = AddSprite<UfoSprite>(); //line = AddSprite<LineSprite>(); // Position the barriers barrier1.X = -60; barrier2.X = -20; barrier3.X = 20; barrier4.X = 60; // Create our texts Player1ScoreText = AddText(new Text { Alignment = HorizontalAlignments.Left, VerticalAlign = VerticalAlignments.Top, Scale = 0.4f, Position = new Vector2(-100f, 100f), Color = Color.White, Value = "Player 1 Score: " + SpaceInvaders.Player1Score }); Player2ScoreText = AddText(new Text { Alignment = HorizontalAlignments.Right, VerticalAlign = VerticalAlignments.Top, Scale = 0.4f,
} PlayScreenModes Mode = PlayScreenModes.Init; // Sprites on the screen public ShipSprite ship; MissileSprite missile; List<AlienMissileSprite> alienMissiles = new List<AlienMissileSprite>(); UfoSprite ufo; BarrierSprite barrier1; BarrierSprite barrier2; BarrierSprite barrier3; BarrierSprite barrier4; //LineSprite line; List<AlienSprite> aliens = new List<AlienSprite>(); List<LivesSprite> lifesprites = new List<LivesSprite>(); float MoveWaitSeconds; float AlienMoveXStep = 10; float AlienMoveYStep = 10; float AlienHitBottomY = -70; float MoveWaitPercent = 0.97f; int level; int alienMoveSound = 1; int AlienCount; public int ActivePlayer; public int Lives = 3; AlienDirections alienDirection; // Text on the screen Text shipStatusText; Text DebugText;
/// <summary> /// Start the play screen /// </summary> public override void StartScene() { if (Mode == PlayScreenModes.Init) { Lives = 3; lifesprites.Clear(); Sprites.RemoveAll(s => s is LivesSprite); Costume lifecostume = new Costume(); lifecostume.Load("Ship"); lifecostume.YCenter = VerticalAlignments.Bottom; float lifeSpacing = 10; for (int i = 1; i <= Lives; i++) { LivesSprite newLifeSprite = AddSprite <LivesSprite>(); newLifeSprite.X = LivesText.Position.X + 21 + ((i - 1) * lifeSpacing); newLifeSprite.Costume = lifecostume; lifesprites.Add(newLifeSprite); } Score = 0; Level = 0; StartLevel(); HighScoreText.Value = "High Score: " + SpaceInvaders.HighScore; ufo.Reset(); MoveWaitSeconds = 1; alienDirection = AlienDirections.Right; ship.Hide(); } ShowPlayerNumber(); }
/// <summary> /// Move all of the aliens /// </summary> void Move() { if (Mode != PlayScreenModes.Playing) { return; } // Move all of the aliens left or right, and keep track if any touched an edge bool TouchedEdge = false; foreach (AlienSprite alien in aliens) { if (alien.State == AlienStates.Alive) { if (alienDirection == AlienDirections.Right) { alien.X += AlienMoveXStep; if (alien.IsTouchingRight()) { TouchedEdge = true; } } else { alien.X -= AlienMoveXStep; if (alien.IsTouchingLeft()) { TouchedEdge = true; } } alien.alienMove(); } } // Did any aliens hit an edge if (TouchedEdge) { // We touched an edge, so next time we'll use a different direction if (alienDirection == AlienDirections.Right) { alienDirection = AlienDirections.Left; } else { alienDirection = AlienDirections.Right; } // Schedule the next move to be down Wait(MoveWaitSeconds, MoveDown); // The time after next, continue moving across Wait(MoveWaitSeconds * 2, Move); } else { // Didn't hit an edge, just schedule the next move Wait(MoveWaitSeconds, Move); } playMoveSound(); }