/// <summary> /// Allows the game to run logic such as updating the world, /// checking for collisions, gathering input, and playing audio. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) { this.Exit(); } KeyboardState keyState = Keyboard.GetState(); switch (gameState) { case GameStates.TitleScreen: titleScreenTimer += (float)gameTime.ElapsedGameTime.TotalSeconds; if (titleScreenTimer >= titleScreenDelayTime) { if ((Keyboard.GetState().IsKeyDown(Keys.Space)) || (GamePad.GetState(PlayerIndex.One).Buttons.A == ButtonState.Pressed)) { gameState = GameStates.Playing; } } break; case GameStates.Playing: if (keyState.IsKeyDown(Keys.Down) && snake1.Facing != 2) { snake1.Facing = 0; } else if (keyState.IsKeyDown(Keys.Right) && snake1.Facing != 3) { snake1.Facing = 1; } else if (keyState.IsKeyDown(Keys.Up) && snake1.Facing != 0) { snake1.Facing = 2; } else if (keyState.IsKeyDown(Keys.Left) && snake1.Facing != 1) { snake1.Facing = 3; } if (snake1.CheckCollisions(this.Window) || snake1.isAlive == false) { snake1.isAlive = false; gameState = GameStates.GameOver; } if (timeRemaining == 0.0f) { snake1.Update(); if (snake1.DidEatPellet(Pellet)) { NewPellet(); score++; } timeRemaining = timeTotal; } timeRemaining = MathHelper.Max(0, timeRemaining - (float)gameTime.ElapsedGameTime.TotalSeconds); break; case GameStates.GameOver: snake1 = new Snake(600, 200, 22, WhiteScheme.ToList()); break; } base.Update(gameTime); }