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); }