Example #1
0
        public Game(ref char[] ScreenBuffer, Size ScreenSize)
        {
            this.Snake_Status = SnakeStatus.Alive;
            this.ScreenSize   = ScreenSize;
            this.ScreenBuffer = ScreenBuffer;
            int StartPos = ScreenSize.Width * (ScreenSize.Height / 2) - ScreenSize.Width / 2;

            this.Snake = new SnakeAnimationHandle(SnakeStartLen, ScreenBuffer.Length, StartPos, StartDirection);
        }
Example #2
0
        /// <summary>
        /// Update the game and write in the buffer
        /// </summary>
        public void UpdateGame()
        {
            UpdateDirection();

            // New Head Position
            int SnakeHead = Snake.SnakePos[0];
            int size      = ScreenSize.Height * ScreenSize.Width; // Compute the value a unique time

            switch (Snake.SnakeDirection)
            {
            case Direction.Right:
                if (SnakeHead % ScreenSize.Width == ScreenSize.Width - 1) // Check if the snake hits the Screen Corner
                {
                    SnakeHead -= (ScreenSize.Width - 1);                  // Set To the Left Side
                }
                else
                {
                    SnakeHead++;      // Move to right
                }
                break;

            case Direction.Left:
                if (SnakeHead % ScreenSize.Width == 0)      // Check if the snake hits the Screen Corner
                {
                    SnakeHead += (ScreenSize.Width - 1);    // Set To the Right Side
                }
                else
                {
                    SnakeHead--;      // Move to Left
                }
                break;

            case Direction.Up:
                if (SnakeHead >= 0 && SnakeHead <= ScreenSize.Width)                      // Check if the snake hits the Screen Corner
                {
                    SnakeHead = (size - ScreenSize.Width) + SnakeHead % ScreenSize.Width; // Set Snake to botton
                }
                else
                {
                    SnakeHead -= (ScreenSize.Width);      // Move Up
                }
                break;

            case Direction.Down:
                if (SnakeHead >= size - ScreenSize.Width && SnakeHead <= size) // Check if the snake hits the Screen Corner
                {
                    SnakeHead = SnakeHead % ScreenSize.Width;                  // Set Snake to Top
                }
                else
                {
                    SnakeHead += (ScreenSize.Width);      // Move Down
                }
                break;
            }

            // Draw Food
            Random food = new Random();

            while (FoodCount < MaxFood)
            {
                int rnd = food.Next(0, ScreenBuffer.Length);
                if (ScreenBuffer[rnd] != SnakeBody)
                {
                    ScreenBuffer[rnd] = FoodChar;
                    FoodCount++;
                }
            }

            // Check Food
            if (ScreenBuffer[SnakeHead] == FoodChar)
            {
                Snake.SnakeSize++;
                FoodCount--;
            }

            // Check Self Hit
            if (ScreenBuffer[SnakeHead] == SnakeBody)
            {
                this.Snake_Status = SnakeStatus.Death;
            }

            // Draw the new Head
            ScreenBuffer[SnakeHead] = SnakeBody;
            ScreenBuffer[Snake.SnakePos[Snake.SnakeSize]] = '\0';

            // Update the Snake Position
            Snake.SnakePos    = SnakeAnimationHandle.ShiftPos(Snake.SnakePos, Snake.SnakeSize);
            Snake.SnakePos[0] = SnakeHead;
        }