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?
Gra w rzutki
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 13042
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ść).
- Rejestracja: dni
- Ostatnio: dni
- Postów: 7
A możecie powiedzieć coś więcej o tej kolizji? Jak to zrealizowac?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 7
http://www.polskaanglia.pl/kimet/17692_2.jpg Tu jest tarcza taką jak ja mam.
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
- Postów: 13042
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.
- Rejestracja: dni
- Ostatnio: dni
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)));
- Rejestracja: dni
- Ostatnio: dni
- Postów: 7
A moglibyście mi jakoś podpowiedzieć jak to zrobić w tablicy? Wybaczcie ale nie bardzo się w tym orientuję.