kolizja ze ścianami w snake

0

Witam,
czytałam sporo podobnych artykułów w związku z grą snake, kolizjami etc. jednak mam cały czas problem jak to napisać. Jak napisać kolizję ze ścianami. Snake mam na podstawie listy

 List<Point> snake = new List<Point>(); 

mam klasę planszę, snake no i form. Gdzie mam tę kolizję ulokować? w snake? i na jakiej zasadzie ma wyglądać warunek??

0

No chyba mnie więcej tak:
( w zależności gdzie twój snake ma 'głowe')

if(snakeBody[0]/snakeBody[snakebody.Lenght-1].X/Y == 0 || X == Width || Y == Height)
Metoda();

1

Musisz sprawdzać, czy głowa po wykonaniu ruchu nie będzie z czymś kolidować.

2

Chodzi chyba o to gdzie ten warunek fizycznie ulokować.

mam klasę planszę, snake no i form. Gdzie mam tę kolizję ulokować? w snake? i na jakiej zasadzie ma wyglądać warunek??

Ja bym zrobił coś w rodzaju:

W klasie snake:

private Point Head { get { return snake[0]; } } // helper

public void Move()
{
    this.ChangePosition(); // przesunięcie głowy węża i reszty ciała za nią
    if (!board.IsValidPosition(Head)) // sprawdzenie czy wąż stoi na dozwolonej pozycji, warunek to 0<=x && 0<=y && x<width && y<=height
    {
        Die(); // Zabij węża, ustaw jakieś flagi, zmień stan gry, cokolwiek
    }
}
0

To nie dzielenie.
Jeżeli głowa znajduje się w liście o indeksie 'q' wtedy :


if(snakeBody[q].X ==0 || snakeBody[q].Y == 0 || snakeBody[q].X == okno.Width || snakeBody[q].Y == okno.Height)
         JakaśMetodaOdpowiedzialnaZaZakończenieGry();
2
Czarny Kot napisał(a):

To nie dzielenie.
Jeżeli głowa znajduje się w liście o indeksie 'q' wtedy :


if(snakeBody[q].X ==0 || snakeBody[q].Y == 0 || snakeBody[q].X == okno.Width || snakeBody[q].Y == okno.Height)
         JakaśMetodaOdpowiedzialnaZaZakończenieGry();

Dlaczego == a nie <=?

Na razie to dokładnie to samo, ale co jesli w przyszłości:

  • dojdzie "ulepszenie węża" gdzie wąż będzie skakał/chodził co dwa pola (i wąż przeskoczy ścianę)
  • dojdzie jakiś teleport, i wąż zostanie przeniesiony poza planszę (i wąż znajdzie się za planszą)
  • plansza z jakiegoś powodu zostanie zmniejszona w środku gry (i wąż znajdzie się za nią)
  • i jeszcze duzo więcej zmian wymagań które trudno przewidzieć

To tylko gra w węża pisana prawdopodobnie dla zabawy, ale moim zdaniem dużo bardziej 'future proof' jest stosowanie < albo <= zamiast == wszędzie gdzie się da.

1

Ma Pan 100% rację, ale jako, że autorowi chodziło o klasycznego snake'a to starałem się udzielić odpowiedzi zgodnej z jego wymaganiami.
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1