Ejemplo n.º 1
0
        protected override void Update(GameTime gameTime)
        {
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }

            if (currState == State.Start)
            {
                KeyboardState keys = Keyboard.GetState();

                if (keys.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space))
                {
                    grid.UpdateGrid();
                    playerBoats.UpdateCell(grid.Cell);
                    computerBoats.UpdateCell(grid.Cell);
                    currState = State.Place;
                }

                if (keys.IsKeyDown(Keys.Up) && prevKeyState.IsKeyUp(Keys.Up))
                {
                    grid.NumHorizontal++;
                    grid.NumVertical++;
                }
                else if (keys.IsKeyDown(Keys.Down) && prevKeyState.IsKeyUp(Keys.Down))
                {
                    grid.NumHorizontal--;
                    grid.NumVertical--;
                }

                if (keys.IsKeyDown(Keys.Tab) && prevKeyState.IsKeyUp(Keys.Tab))
                {
                    computerBoats.LimitOn = !computerBoats.LimitOn;
                    playerBoats.LimitOn   = !playerBoats.LimitOn;
                }

                prevKeyState = keys;
            }
            else if (currState == State.Place)
            {
                var           mouse = Mouse.GetState();
                KeyboardState keys  = Keyboard.GetState();

                if (keys.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space) && playerBoats.Sum == 16)
                {
                    computerBoats.RandomLayout(grid.NumVertical, grid.NumHorizontal);
                    currState = State.Player;
                }
                prevKeyState = keys;

                if (mouse.LeftButton == ButtonState.Pressed && prevMouseState == ButtonState.Released)
                {
                    Vector2 loc = grid.WichCell(mouse.X, mouse.Y);
                    if (!boatPlace.Contains(loc) && loc.X != -1)
                    {
                        boatPlace.Add(loc);
                    }
                }
                prevMouseState = mouse.LeftButton;

                if (boatPlace.Count == 1 && grid.Screen.Contains(mouse.X, mouse.Y))
                {
                    playerBoats.UpdateTemp(boatPlace[0], grid.WichCell(mouse.X, mouse.Y));
                }
                else if (boatPlace.Count == 2 && (boatPlace[0].X == boatPlace[1].X ^ boatPlace[0].Y == boatPlace[1].Y))
                {
                    playerBoats.Place(boatPlace);
                    boatPlace.Clear();
                }
            }
            else if (currState == State.Player)
            {
                computerBoats.HasFired = false;

                var           mouse = Mouse.GetState();
                KeyboardState keys  = Keyboard.GetState();

                if (mouse.LeftButton == ButtonState.Pressed && prevMouseState == ButtonState.Released && !playerBoats.HasFired)
                {
                    Vector2 loc = grid.WichCell(mouse.X, mouse.Y);
                    playerBoats.HasFired = computerBoats.FireAt(loc);
                }
                prevMouseState = mouse.LeftButton;

                if (keys.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space) && playerBoats.HasFired)
                {
                    currState = State.Computer;
                    if (!playerBoats.Alive || !computerBoats.Alive)
                    {
                        currState = State.End;
                    }
                }

                prevKeyState = keys;
            }
            else if (currState == State.Computer)
            {
                playerBoats.HasFired = false;
                KeyboardState keys = Keyboard.GetState();

                if (!computerBoats.HasFired)
                {
                    computerBoats.HasFired = computerBoats.Fire(playerBoats, grid.NumVertical, grid.NumHorizontal);
                }

                if (keys.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space) && computerBoats.HasFired)
                {
                    currState = State.Player;
                    if (!playerBoats.Alive || !computerBoats.Alive)
                    {
                        currState = State.End;
                    }
                }

                prevKeyState = keys;
            }
            else if (currState == State.End)
            {
                KeyboardState keys = Keyboard.GetState();

                if (keys.IsKeyDown(Keys.Space) && prevKeyState.IsKeyUp(Keys.Space))
                {
                    playerBoats.Reset();
                    computerBoats.Reset();
                    currState = State.Start;
                }

                prevKeyState = keys;
            }

            base.Update(gameTime);
        }