/// <summary> /// Generuje nowe jedzenie /// </summary> private void FoodPlace() { food = new SnakeBody(); Random generator = new Random(); int maxHeight = pictureBoxGameBoard.Size.Height / tileHeight; // dostosowanie generowania jedzenia dla węża do podziału pola gry na kratki int maxWidth = pictureBoxGameBoard.Size.Width / tileWidth; food.X = generator.Next(0, maxHeight); food.Y = generator.Next(0, maxWidth); }
/// <summary> /// Start Gry /// </summary> private void GameStart() { timerGame.Interval = 1000 / difficulty; SettingsClear(); labelPressEnter.Visible = false; SnakeBody head = new SnakeBody(); //tworzenie pierwszej części węża - głowy, którą poruszamy się na początku head.X = 10; // X oraz Y definiują startową pozycję głowy węża head.Y = 10; snake.Add(head); FoodPlace(); }
/// <summary> /// Aktualizacja kierunku ruchu oraz sprawdzanie kolizji /// </summary> private void UpdateSnake() { for (int i = snake.Count - 1; i >= 0; i--) { // poruszanie się głowy węża (cała logika kolizji zawarta jest w głowie) if (i == 0) { switch (direction) { case 1: snake[i].Y--; break; case 2: snake[i].Y++; break; case 3: snake[i].X++; break; case 4: snake[i].X--; break; } // kolizja z obramówką pola gry int maxXPosition = pictureBoxGameBoard.Size.Height / tileHeight; int maxYPosition = pictureBoxGameBoard.Size.Width / tileWidth; if (snake[i].X < 0 || snake[i].X >= maxXPosition || snake[i].Y < 0 || snake[i].Y >= maxYPosition) { gameover = true; } // kolizja z ciałem for (int j = 1; j < snake.Count; j++) { if (snake[i].X == snake[j].X && snake[i].Y == snake[j].Y) { gameover = true; } } //kolizja z jedzeniem if (snake[i].X == food.X && snake[i].Y == food.Y) { SnakeBody part = new SnakeBody(); part.X = snake[snake.Count - 1].X; part.Y = snake[snake.Count - 1].Y; snake.Add(part); FoodPlace(); score += difficulty; labelScoreShow.Text = score.ToString(); } } // poruszanie się reszty ciała (ciało porusza się za głową, sterowaną przez gracza) else { snake[i].X = snake[i - 1].X; snake[i].Y = snake[i - 1].Y; } } }