Witam. Próbuję zrobić prostą grę w rzutki i mam problem ponieważ nie mogę wymyślić funkcji która pozycje suwaków jako współrzędne będzie przerabiała na ilość punktów. Możecie mi jakoś pomóc?
Jeżeli masz taką tarczę: http://upload.wikimedia.org/wikipedia/commons/4/42/Dartboard.svg
To będzie trochę roboty; poczytaj o kolizji point in triangle
(point triangle collision
) oraz tej najprostszej, czyli point in circle
(z tym, że też trochę roboty tutaj będzie - lecz wystarczy nieco bardziej matematycznie do tego podejść).
A możecie powiedzieć coś więcej o tej kolizji? Jak to zrealizowac?
http://www.polskaanglia.pl/kimet/17692_2.jpg Tu jest tarcza taką jak ja mam.
Function collision_check(const Point: TPoint; const CircleRadius: uint32): Boolean;
Begin
{ ... }
End;
{ .... }
if (collision_check(PozycjaRzutki, 10)) then
IloscPunktow := 9 Else
if (collision_check(PozycjaRzutki, 30)) then
IloscPunktow := 8 Else
if (collision_check(PozycjaRzutki, 40)) then
IloscPunktow := 7 Else
if (collision_check(PozycjaRzutki, 50)) then
IloscPunktow := 6 Else
{ ... } else
IloscPunktow := 0;
Oczywiście lepszym wyjściem byłoby tutaj użycie tablicy, lecz chciałem przekazać główną ideę:
Na początku sprawdzasz, czy rzutka trafiła w 9 punktów (czyli, czy trafiła w koło na samym środku; przyjąłem, że promień tego koła ma 10 jakichś-tam-jednostek), potem czy trafiła w ósmy (o promieniu 30 jakichś-tam-jednostek), siódmy punkt i tak dalej...
Te promienie najłatwiej wyznaczyć doświadczalnie, tutaj tak tylko zgadywałem poglądowo.
Jeżeli promień każdego kółka jest o R pikseli większy od poprzedniego to:
Pkt:=Max(0,10-Round(Floor(sqrt(sqr(X-10*R)+sqr(Y-10*R))/10)));
A moglibyście mi jakoś podpowiedzieć jak to zrobić w tablicy? Wybaczcie ale nie bardzo się w tym orientuję.
No to najwyższy czas przeczytać kurs