• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Gra Snake, poruszanie ciała za głową

Object Storage Arubacloud
0 głosów
613 wizyt
pytanie zadane 25 lutego 2018 w JavaScript przez Yashe Dyskutant (7,720 p.)

Witam bardzo serdecznie,

Postanowiłem napisać grę Snake w canvasie + JS, jako, że jestem początkujący natrafiłem na problem poruszania się ogona względem głowy węża. Na forum przeczytałem poradę, że jedynymi częściami jakie się ruszają w wężu to głowa i ostania część ciała.. lecz dalej mam problem z napisaniem tego w kodzie. 

Potrzebuje porady na malowanie tych części ciała.

To co wykonałem to sprawdzenie czy wąż porusza się po osi X, a oś Y jest nie zmienna... i gdy tak się dzieje (zarówno musi trafić w jedzenie).. do prawej strony węża doklejam kolejny jego człon.

https://media.giphy.com/media/2sixpYm6WJtsso3uCR/giphy.gif

 

3 odpowiedzi

0 głosów
odpowiedź 25 lutego 2018 przez jegor377 Stary wyjadacz (13,230 p.)
Musisz (zaczynając od końca) przekopiować koordynaty następnych części węża do aktualnej nogi zmierzając w kierunku głowy. Kiedy trafisz na głowę przerwij pętle. Zawsze najpierw rób ruch głową o ile się nie mylę w tym snaku.
komentarz 25 lutego 2018 przez Yashe Dyskutant (7,720 p.)
if (snakeX == x && snakeY == y)
{
	function ogon()
	{
		ctx.fillStyle = 'grey';		
		ctx.fillRect(snakeX + ruch,snakeY,snakeSize, snakeSize);
						
		//console.log(snakeX + ruch,snakeY);
	}
					
	ruch = ruch + 10;
	setInterval(ogon, 100);
}

speedY i speedX  = 10  // szybkość
snakeX  i snakeY = koordynaty węża
snakeSize = 10 // wielkość węża
x i y = koordynaty jedzenia

Nie mam pojęcia jak się do tego zabrać. Patrzę na to tak:

Gdy koordynaty głowy węża będą takie same jak koordynaty jedzenia to -> ... no właśnie. Wypadałoby aby dodawał kolejną część... ciała i to jeszcze zależną od kierunku w jakim się porusza. Ten kod wyżej przedstawia tylko moment gdy doda nam kolejny "ogon" do lewej strony głowy. I to tylko iluzja, bo tam ten kwadrat nogi jest tam gdzie głowa, lecz po dotknięciu jedzenia przesuwa go o x + 10 

 

komentarz 28 lutego 2018 przez jegor377 Stary wyjadacz (13,230 p.)
jeżeli nastąpiła kolizja głowy z jabłkiem, wąż ma dodać sobie kolejną część ogonu. Poruszasz jedynie głową, a reszta ciała ma kopiować nogi o indexie o 1 mniejszym (zakładając, że trzymasz snake'a w jakiejś tablicy, która rośnie zależnie od długościu snake'a i ostatni jej element to koniec nogi snake'a). Głowa może być też uznawana za nogę w grze, tylko musisz pamiętać, żeby nie kopiowała pozycji następnej, bo będzie Ci aplikacja wywalać, bo nie można w C++/C używać w kodzie indexu w tablicy 0-1 = -1 bo taki index dla tablicy nie istnieje. :P Gównianie tłumaczę, ale robię co mogę. Sam miałem kiedyś taki problem, aż sam zajarzyłem. To co mówię wystarczy Ci spokojnie do zrobienia snake'a. Pomyśl tylko nad tym co pisze. Kierunki są potrzebne tylko do poruszania głową i możesz je trzymać w enumie (tak chyba najwygodniej), albo w stałych. Jak wolisz.
1
komentarz 28 lutego 2018 przez Yashe Dyskutant (7,720 p.)
Podsunąłeś mi bardzo dużo pomysłów, dziękuje bardzo za przekazaną wiedzę !
komentarz 1 marca 2018 przez jegor377 Stary wyjadacz (13,230 p.)
Nie ma problemu. Sam kiedyś miałem taki sam problem. ;)
komentarz 1 marca 2018 przez jegor377 Stary wyjadacz (13,230 p.)
a, i możesz trzymać sobie tę tablicę nóg w obiekcie vector. Jest to taka cppsowa lista jak tablica, tylko posiada metody (np. push_back, czyli dodaj na koniec) i może Ci się bardzo przydać. Ale polecam najpierw spróbować napisać sobie własną implementację takiego push_back dla zwykłej tablicy, bo możesz fajnie poćwiczyć i dużo się pouczyć. :)
0 głosów
odpowiedź 25 lutego 2018 przez Mikołaj Kawczynski Dyskutant (9,160 p.)
Sprawdzasz czy ruch głową nie kończy gry, jeśli nie to rysujesz głowę w nowym miejscu a jej poprzednie położenie zastępujesz ciałem. następnie w miejscu ogona rysujesz teren a w miejscu przedostatniego fragmentu ciała ogon i cała filozofia. Wyjątkiem jest powiększenie węża w tedy po prostu rysujesz głowę ale pomijasz skracanie z tyłu.
0 głosów
odpowiedź 4 grudnia 2022 przez mastersam Nowicjusz (170 p.)
zapraszam na moje rozwiązanie

 

https://github.com/mastersam2015/snake-html

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 17 stycznia 2017 w Java przez MyWash Bywalec (2,640 p.)
0 głosów
0 odpowiedzi 138 wizyt
0 głosów
0 odpowiedzi 175 wizyt

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...