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