Exemplo n.º 1
0
        public static PosAndDir GetNewBodyPos(PosAndDir pad)
        {
            PosAndDir newpad = new PosAndDir();

            newpad.Dir = pad.Dir;
            const int delta = 18;

            switch (pad.Dir)
            {
            case 0:
                newpad.X = pad.X - delta;
                newpad.Y = pad.Y;
                break;

            case 1:
                newpad.X = pad.X + delta;
                newpad.Y = pad.Y;
                break;

            case 2:
                newpad.Y = pad.Y + delta;
                newpad.X = pad.X;
                break;

            case 3:
                newpad.Y = pad.Y - delta;
                newpad.X = pad.X;
                break;
            }
            return(newpad);
        }
Exemplo n.º 2
0
        /// <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)
        {
            KeyboardState keyboardState = Keyboard.GetState();

            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            {
                Exit();
            }
            GenerateFoodPosition();
            PosAndDir oldSnakePosition = snake.snakePosition;

            snake.Move();
            snake.Turn(keyboardState);

            if (snake.snakePosition.X > Window.ClientBounds.Width - snake.snakeTexture.Width - 1 || snake.snakePosition.X < 0 || snake.snakePosition.Y > Window.ClientBounds.Height - snake.snakeTexture.Height - 1 || snake.snakePosition.Y < 0)
            {
                snake.X = 4;
            }

            if (Collide())
            {
                Increase();
                snake.snakeBody.Add(PosAndDir.Zero);
                if (snake.BodySize > 1)
                {
                    for (int i = snake.BodySize - 1; i > 0; i--)
                    {
                        snake.snakeBody[i] = SnakeParam.GetNewBodyPos(snake.snakeBody[i - 1]);
                    }
                }
                snake.snakeBody[0] = SnakeParam.GetNewBodyPos(oldSnakePosition);
                foodPosition       = Vector2.Zero;
            }
            else
            {
                if (snake.BodySize > 1)
                {
                    for (int i = snake.BodySize - 1; i > 0; i--)
                    {
                        snake.snakeBody[i] = SnakeParam.GetNewBodyPos((snake.snakeBody[i - 1]));
                    }
                }
                if (snake.BodySize > 0)
                {
                    snake.snakeBody[0] = SnakeParam.GetNewBodyPos(oldSnakePosition);
                }
            }
            base.Update(gameTime);
        }
Exemplo n.º 3
0
 public SnakeParam()
 {
     snakeBody         = new List <PosAndDir>();
     snakePosition     = PosAndDir.Zero;
     snakeBodyPosition = Vector2.Zero;
 }