public override void Update(GameTime gameTime) { base.Update(gameTime); if (_scoreText.Alpha < 1) { _scoreText.Alpha += 0.1f; } if (!_snakeHead.Alive) { if (FlxG.Keyboard.AnyJustReleased(new Keys[] { Keys.Space, Keys.R })) { FlxG.ResetState(); } return; } FlxG.Overlap(_snakeHead, _fruit, CollectFruit); FlxG.Overlap(_snakeHead, _snakeBody, GameOver); if (FlxG.Keyboard.AnyPressed(new Keys[] { Keys.Up, Keys.W }) && _currentDirection != FlxObjectDirection.DOWN) { _nextDirection = FlxObjectDirection.UP; } else if (FlxG.Keyboard.AnyPressed(new Keys[] { Keys.Down, Keys.S }) && _currentDirection != FlxObjectDirection.UP) { _nextDirection = FlxObjectDirection.DOWN; } else if (FlxG.Keyboard.AnyPressed(new Keys[] { Keys.Left, Keys.A }) && _currentDirection != FlxObjectDirection.RIGHT) { _nextDirection = FlxObjectDirection.LEFT; } else if (FlxG.Keyboard.AnyPressed(new Keys[] { Keys.Right, Keys.D }) && _currentDirection != FlxObjectDirection.LEFT) { _nextDirection = FlxObjectDirection.RIGHT; } }
void MoveSnake() { _headPositions.Insert(0, new Vector2(_snakeHead.X, _snakeHead.Y)); if (_headPositions.Count > _snakeBody.Members.Count) { _headPositions.RemoveAt(_headPositions.Count - 1); } switch (_nextDirection) { case FlxObjectDirection.LEFT: _snakeHead.X -= BLOCK_SIZE; break; case FlxObjectDirection.RIGHT: _snakeHead.X += BLOCK_SIZE; break; case FlxObjectDirection.UP: _snakeHead.Y -= BLOCK_SIZE; break; case FlxObjectDirection.DOWN: _snakeHead.Y += BLOCK_SIZE; break; } _currentDirection = _nextDirection; FlxSpriteUtil.ScreenWrap(_snakeHead); List <Vector2> headpositions = _headPositions.ToList(); for (int i = 0; i < _headPositions.Count; i++) { _snakeBody.Members[i].SetPosition(headpositions[i].X, headpositions[i].Y); } }