/// <summary> /// Returns the index of the first (ie lowest numbered) /// sprite it colides with -1 if no collision /// the self parameter is there to allow the avoidance of collision texting against yourself /// </summary> /// <param name="s">the sprite to test the list against</param> /// <param name="self">the number of a single sprite to avoid testing</param> /// <returns></returns> public int collisionAA(Sprite3 s, int self) { if (s == null) { return(-1); } if (!s.getVisible()) { return(-1); } if (!s.getActive()) { return(-1); } for (int i = 0; i < highUsed + 1; i++) { if (sprite[i] != null && sprite[i].active) { if (sprite[i].getVisible() && i != self && s.collision(sprite[i])) { return(i); } } } return(-1); }
public override void Update(GameTime gameTime) { prevKeyState = keyState; keyState = Keyboard.GetState(); timer += 1; explostionTimer += 1; explosionAnimation.animationTick(gameTime); mineExplostionAnimation.animationTick(gameTime); missileSmoke.Update(gameTime); exLimSound.Update(gameTime); previousMouseState = currentMouseState; currentMouseState = Mouse.GetState(); mouse_x = currentMouseState.X; mouse_y = currentMouseState.Y; // Sets up mine if (currentMouseState.LeftButton == ButtonState.Pressed) { minePos.X = mouse_x; minePos.Y = mouse_y; drawMines = true; mine.active = true; mineCount = 1; } // Controls player movements if (keyState.IsKeyDown(Keys.Left)) { if (player.getPosX() > Dir.leftBoundary) { player.setPosX(player.getPosX() - 4); // Moves player 3 units left player.setFlip(SpriteEffects.FlipHorizontally); } } if (keyState.IsKeyDown(Keys.Right)) { if (player.getPosX() < (Dir.rightBoundary - (player.getWidth() - 5))) { player.setPosX(player.getPosX() + 4); // Moves player 3 units right player.setFlip(SpriteEffects.None); } } // Moves enemy sprite enemy1.setPosX(enemy1.getPosX() + Dir.rnd.Next(1, 3)); enemy2.setPosX(enemy2.getPosX() - Dir.rnd.Next(1, 3)); // If enemy runs off screen, reset position to random x postion if (enemy1.getPosX() > Dir.rightBoundary + 60) { enemy1.setPos(Dir.rnd.Next(-400, -250), Dir.rnd.Next(200, 700)); } if (enemy2.getPosX() < Dir.leftBoundary - (enemy2.getWidth() + 50)) { enemy2.setPos(Dir.rnd.Next(Dir.rightBoundary, Dir.rightBoundary + 200), Dir.rnd.Next(200, 700)); } // Shoot missile if (keyState.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space)) { missile.setPos(player.getPosX() + player.getWidth() / 2, player.getPosY() - missile.getHeight()); missile.active = true; drawSmoke(); drawMissile = true; if (missileCount > 0) { missileCount--; } } if (missileCount == 0) { missileCount = 5; } if (missile.getPosY() < 185 + missile.getHeight()) { missile.setPos(player.getPos()); drawMissile = false; missileSmoke.deActivate(); } if (timer % 361 == 360) { anchor.setPos(enemy1.getPosX() + enemy1.getWidth() / 2, enemy1.getPosY() + enemy1.getHeight() / 2); anchorDraw = true; } if (anchor.getPosY() > Dir.bottomBoundary + anchor.getHeight()) { anchor.active = false; anchorDraw = false; } // Collision Control enemy1Collision = missile.collision(enemy1); enemy2Collision = missile.collision(enemy2); if (enemy1Collision) { enemy1.hitPoints = enemy1.hitPoints - 10; currXMissile = enemy1.getPosX() + enemy1.getWidth() / 2; currYMissile = enemy1.getPosY() - enemy1.getHeight() / 2; if (enemy1.hitPoints <= 0) { collision1 = true; enemy1.hitPoints = 10; Dir.enemy1Count++; missileSmoke.deActivate(); } getSetMissile(); } if (enemy2Collision) { missileSmoke.deActivate(); enemy2.hitPoints = enemy2.hitPoints - 10; drawMissile = false; if (enemy2.hitPoints <= 0) { currXMissile = enemy2.getPosX() + enemy2.getWidth() / 2; currYMissile = enemy2.getPosY() - enemy2.getHeight() / 2; collision2 = true; Dir.enemy2Count++; enemy2.hitPoints = 20; } getSetMissile(); } // Gain 10 hp if missile hits the anchor preserve bool lifeGain = missile.collision(life); if (lifeGain == true) { if (player.hitPoints < 50) { player.hitPoints = player.hitPoints + 10; } lifeGain = false; drawMissile = false; life.active = false; life.setPos(new Vector2(Dir.rnd.Next(250, 800), Dir.rnd.Next(400, 600))); missile.active = false; missile.setPos(player.getPosX(), player.getPosY()); missileSmoke.deActivate(); } bool anchorCollision = anchor.collision(player); if (anchorCollision) { anchorDraw = false; anchor.setActiveAndVisible(false); anchor.setPos(new Vector2(-100, -100)); player.hitPoints = player.hitPoints - 20; } mineCollission = mine.collision(enemy1); if (mineCollission) { mine.active = false; drawMines = false; mineCurrPos = mine.getPos(); mine.setPos(new Vector2(-100, 0)); enemy1.setPos(Dir.rnd.Next(-400, -250), Dir.rnd.Next(200, 700)); mineCollisionToggle = true; score += 150; mineCount = 0; Dir.enemy1Count += 1; exLimSound.playSoundIfOk(); } mineCollission2 = mine.collision(enemy2); if (mineCollission2) { mine.active = false; drawMines = false; mineCurrPos = mine.getPos(); mine.setPos(new Vector2(-100, 0)); enemy2.setPos(Dir.rnd.Next(-400, -250), Dir.rnd.Next(200, 700)); mineCollisionToggle2 = true; score += 200; mineCount = 0; Dir.enemy2Count += 1; exLimSound.playSoundIfOk(); } // Toggle BB if (keyState.IsKeyDown(Keys.B) && prevKeyState.IsKeyUp(Keys.B)) { showBB = !showBB; } // Pause if (keyState.IsKeyDown(Keys.P) && !prevKeyState.IsKeyDown(Keys.P)) { gameStateManager.pushLevel(3); } // Help State if (keyState.IsKeyDown(Keys.F1) && !prevKeyState.IsKeyDown(Keys.F1)) { gameStateManager.pushLevel(5); } if (player.hitPoints < 0) { player.hitPoints = 0; } // End State if (score >= 1000 || player.hitPoints <= 0) { if (timer % 181 == 180) { gameStateManager.setLevel(4); } } }
public void UpdateL1(GameTime gameTime) { ks = Keyboard.GetState(); yarnBalls.moveDeltaXY(); // collision test for (int i = 0; i < yarnBalls.count(); i++) { Sprite3 s = yarnBalls.getSprite(i); bool coll = playerSprite.collision(s); if (coll) { kachingSound.playSoundIfOk(); s.setActive(false); points++; } } // used to move the kitty cat to the left if (ks.IsKeyDown(Keys.Left)) { playerSprite.moveByDeltaXY(); playerSprite.animationTick(gameTime); successSound.playSoundIfOk(); playerSprite.active = true; background.Update(gameTime); } if (ks.IsKeyDown(Keys.Right)) { // NOTE: the move right functionality does not work currently background.Update(gameTime); } if (ks.IsKeyDown(Keys.B)) { showBB = !showBB; } /// increases the player's jump speed - this is a secret function if (ks.IsKeyDown(Keys.Z)) { playerJumpSpeed++; } // decreases the player's jump speed - this is another secret function if (ks.IsKeyDown(Keys.X)) { playerJumpSpeed--; } // this gives the small kitty cat the ability to jump around the screen if (playerJump) { playerVec.Y += playerJumpSpeed; playerJumpSpeed += 1; playerSprite.setPosY(playerVec.Y); if (playerVec.Y >= prevPos.Y) { playerSprite.setPosY(prevPos.Y); playerJump = false; } } else { if (ks.IsKeyDown(Keys.Up)) { playerJump = true; jumpoSound.playSoundIfOk(); playerJumpSpeed = -14; playerSprite.setPosY(playerVec.Y); } } // transition over to level 2 if (points == 5) { state = 3; } }
public override void Update(GameTime gameTime) { prevKeyState = keyState; keyState = Keyboard.GetState(); timer += 1; explosionAnimation.animationTick(gameTime); missileSmoke.Update(gameTime); if (keyState.IsKeyDown(Keys.Left)) { if (player.getPosX() > Dir.leftBoundary) { player.setPosX(player.getPosX() - 4); // Moves player 4 units left player.setFlip(SpriteEffects.FlipHorizontally); } } if (keyState.IsKeyDown(Keys.Right)) { if (player.getPosX() < (Dir.rightBoundary - (player.getWidth() - 5))) { player.setPosX(player.getPosX() + 4); // Moves player 4 units right player.setFlip(SpriteEffects.None); } } enemy1.setPosX(enemy1.getPosX() + Dir.rnd.Next(1, 3)); enemy2.setPosX(enemy2.getPosX() - Dir.rnd.Next(1, 3)); enemy3.setPosX(enemy3.getPosX() + Dir.rnd.Next(2, 4)); // If enemy runs off screen, reset position to random x postion if (enemy1.getPosX() > Dir.rightBoundary + 60) { enemy1.setPos(Dir.rnd.Next(-400, -250), Dir.rnd.Next(200, 700)); } if (enemy2.getPosX() < Dir.leftBoundary - (enemy2.getWidth() + 50)) { enemy2.setPos(Dir.rnd.Next(Dir.rightBoundary, Dir.rightBoundary + 200), Dir.rnd.Next(200, 700)); } if (enemy3.getPosX() > Dir.rightBoundary + 60) { enemy3.setPos(Dir.rnd.Next(-400, -250), Dir.rnd.Next(200, 700)); } if (keyState.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space)) { missile.setPos(player.getPosX() + player.getWidth() / 2, player.getPosY() - missile.getHeight()); missile.active = true; drawMissile = true; drawSmoke(); if (missileCount > 0) { missileCount--; } } if (missileCount == 0) { missileCount = 5; } if (missile.getPosY() < 185 + missile.getHeight()) { missile.setPos(player.getPos()); drawMissile = false; missileSmoke.deActivate(); } enemy1Collision = missile.collision(enemy1); enemy2Collision = missile.collision(enemy2); enemy3Collision = missile.collision(enemy3); explostionTimer += 1; if (enemy1Collision) { enemy1.hitPoints = enemy1.hitPoints - 10; currXMissile = enemy1.getPosX() + enemy1.getWidth() / 2; currYMissile = enemy1.getPosY() - enemy1.getHeight() / 2; if (enemy1.hitPoints <= 0) { collision1 = true; Dir.enemy1Count++; enemy1.hitPoints = 10; } getSetMissile(); } if (enemy2Collision) { missileSmoke.deActivate(); enemy2.hitPoints = enemy2.hitPoints - 10; drawMissile = false; if (enemy2.hitPoints <= 0) { currXMissile = enemy2.getPosX() + enemy2.getWidth() / 2; currYMissile = enemy2.getPosY() - enemy2.getHeight() / 2; collision2 = true; Dir.enemy2Count++; enemy2.hitPoints = 20; } getSetMissile(); } if (enemy3Collision) { enemy3.hitPoints = enemy3.hitPoints - 10; currXMissile = enemy3.getPosX() + enemy3.getWidth() / 2; currYMissile = enemy3.getPosY() - enemy3.getHeight() / 2; if (enemy3.hitPoints <= 0) { collision3 = true; Dir.enemy3Count++; enemy3.hitPoints = 10; } getSetMissile(); } // Toggle showing Boundary Box if (keyState.IsKeyDown(Keys.B) && prevKeyState.IsKeyUp(Keys.B)) { showBoundary = !showBoundary; } if (keyState.IsKeyDown(Keys.P) && !prevKeyState.IsKeyDown(Keys.P)) { gameStateManager.pushLevel(3); } if (keyState.IsKeyDown(Keys.F1) && !prevKeyState.IsKeyDown(Keys.F1)) { gameStateManager.pushLevel(5); } if (score >= 300) { if (timer % 181 == 180) { gameStateManager.setLevel(2); } } exLimSound.Update(gameTime); }