[C++]: Snake -> ruch węża
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
Witam!
Napisałem już wężyka, ale nadal nie mogę zbudować odpowiedniej pętli gry ponieważ nie wiem jak mam przypisywać wartość do zmiennej: kierunek_ruchu.
Chodzi o to, że wężyk się rysuje wszystko w porządku, jednak kiedy on sobie leci w stronę np. prawą (domniemanie) to nie mam możliwości zmiany kierunku, a gdy dam instrukcje wczytania to cała gra się zatrzymuje ponieważ program czeka aż użytkownik przypisze klawisz do zmiennej Proszę Was o jakiś pomysł jak to zrobić ponieważ nic od kilku dni nie przychodzi mi do głowy
Napisałem już wężyka, ale nadal nie mogę zbudować odpowiedniej pętli gry ponieważ nie wiem jak mam przypisywać wartość do zmiennej: kierunek_ruchu.
Chodzi o to, że wężyk się rysuje wszystko w porządku, jednak kiedy on sobie leci w stronę np. prawą (domniemanie) to nie mam możliwości zmiany kierunku, a gdy dam instrukcje wczytania to cała gra się zatrzymuje ponieważ program czeka aż użytkownik przypisze klawisz do zmiennej Proszę Was o jakiś pomysł jak to zrobić ponieważ nic od kilku dni nie przychodzi mi do głowy
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
A czy ona nie była czasem w conio.h ?
Tak ogólnie to już sobie poradziłem właśnie tą funkcją. Robiłeś może wężyka pod konsole?
Tak ogólnie to już sobie poradziłem właśnie tą funkcją. Robiłeś może wężyka pod konsole?
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
Kurcze bo mam już sporo, ale nie wiem jak utworzyć tablicę która będzie przechowywała pozycje każdego punktu węża. Nie mogę jej zrobić jako składnika klasy bo musi mieć ona rozmiar \(\displaystyle{ 2 \cdot \text{snake\_length}}\) a to jest nie możliwe bo ta zmienna "długość węża" nie jest stałą
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++]: Snake -> ruch węża
vector ma stały rozmair o ile się nie mylę, jak go przekroczysz to trzeba kopiować całą tablicę do nowej większej
użyj listy
użyj listy
Kod: Zaznacz cały
#include <list>
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
Kurde nie robiłem jeszcze nic z tymi listami Pomyślałem, żeby może stworzyć dynamicznie alokowano tablicę statyczną. Do jej dwóch pierwszych elementów wpisałbym współrzędne głowy węża, a reszta obliczana by była na podstawie ruchu....jednak dynamiczne - statyczna tablica to chyba nic dobrego? Co o tym myślisz?
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++]: Snake -> ruch węża
mozesz zrobic tablicę, ale przemyśl jej rozmair, jeżeli będzie zbyt mała to program się wysypie, jeżeli będzie używał <vector> to po przekraczeniu określonego rozmaru (nie wiem jakiego) komputer przekopiuje wszytko do nowego większego wektora
lista będzie najlepszym rozwiązaniem, szybkie tworzenie, dodawanie i usuwanie elementów. I szczerze mówiąc to ni jest nic trudnego, będziesz używał tylko iteracji po kolejnych elementach listy oraz funkcji insert
lista będzie najlepszym rozwiązaniem, szybkie tworzenie, dodawanie i usuwanie elementów. I szczerze mówiąc to ni jest nic trudnego, będziesz używał tylko iteracji po kolejnych elementach listy oraz funkcji insert
-
- Użytkownik
- Posty: 199
- Rejestracja: 24 maja 2012, o 23:36
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 5 razy
- Pomógł: 30 razy
[C++]: Snake -> ruch węża
Przecież vector z definicji jest to tablica dynamiczna i nie ma żadnego narzuconego rozmiaru.
Jeżeli wąż powiększa się po zjedzeniu punktu, to wtedy nic więcej co użycie tab.push_back, a współrzędne punktów możemy zmieniać poprzez iterację elementów tablicy, gdzie elementem granicznym jest .size()-1.
To jednak by zmuszało nas do reprezentacji współrzednych na zasadzie:
tab[0] = x1;
tab[1] = y1;
tab[2] = x2;
tab[3] = y2;
...
nie jest też to wielkim problemem, bo jak widać współrzędne x są pod parzystymi(łącznie z zerem) indeksami tablicy a odpowiadajace im współrzędne y to n+1.
Choć jak zasugerował Cubus, lista to też dobre rozwiązanie
Kod: Zaznacz cały
vector < int > tab;
To jednak by zmuszało nas do reprezentacji współrzednych na zasadzie:
tab[0] = x1;
tab[1] = y1;
tab[2] = x2;
tab[3] = y2;
...
nie jest też to wielkim problemem, bo jak widać współrzędne x są pod parzystymi(łącznie z zerem) indeksami tablicy a odpowiadajace im współrzędne y to n+1.
Choć jak zasugerował Cubus, lista to też dobre rozwiązanie
- kadiii
- Użytkownik
- Posty: 642
- Rejestracja: 20 gru 2005, o 21:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Pomógł: 130 razy
[C++]: Snake -> ruch węża
Oczywiście jeśli to C++ to zamiast vectora/listy intów lepiej dać vector obieków reprezentujących współrzędne, względnie struktur jeśli jest to program C-style.To jednak by zmuszało nas do reprezentacji współrzednych na zasadzie:
tab[0] = x1;
tab[1] = y1;
tab[2] = x2;
tab[3] = y2;
Jeśli chodzi o samo rozwiązanie to można je zrobić albo w sposób przejrzysty od strony modelu albo "algorytmiczny" usuwając niepotrzebne dane i dodając optymalizacje(kosztem przejrzystości). Nie pierwszy rzut oka widać, że jest parę innych, alternatywnych rozwiązań, które niekoniecznie korzystają z listy współrzędnych. Warto trochę pokombinować, niezależnie jaką drogę finalnie wybierzesz.
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
Panowie, a co myślicie o czymś takim?
static int *tablica = new int [2 * rozmiar_wezyka ];
Sama się ładnie powiększa, a do tego jest statyczna Więc mam dostęp do 'starych współrzędnych'
static int *tablica = new int [2 * rozmiar_wezyka ];
Sama się ładnie powiększa, a do tego jest statyczna Więc mam dostęp do 'starych współrzędnych'
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++]: Snake -> ruch węża
strzelam, że nie miałeś jeszcze klas, więc niech będzie struktura
ale wąż rośnie i co wtedy? kopiujesz całą tablicę? Wężyk naprawdę jest idealnym zastosowaniem listy, nawet interpretacja graficzna listy kojarzy się z wężykiem
ale wąż rośnie i co wtedy? kopiujesz całą tablicę? Wężyk naprawdę jest idealnym zastosowaniem listy, nawet interpretacja graficzna listy kojarzy się z wężykiem
- Peter Zof
- Użytkownik
- Posty: 585
- Rejestracja: 30 cze 2012, o 16:07
- Płeć: Mężczyzna
- Lokalizacja: Warszawa (MIMUW) / Pułtusk
- Podziękował: 88 razy
- Pomógł: 66 razy
[C++]: Snake -> ruch węża
Cały czas używam klas Jednak wydaje mi się, że gdy ta tablica byłaby statyczna to tylko przy powiększeniu wężyka niby te dynamiczne powiększanie dotyczyłoby dwóch nowych elementów o które już odpowiednio zadbam Chyba, że się mylę i chociaż ta tablica będzie statyczna to będzie traciła dane :S
@edit: właśnie list nie miałem, a wężyk ma być jakby projektem który łączy poznaną teorię z praktyką. Niby napisałem te kółko i krzyżyk bo tego wymaga Pani, ale mam ochotę na coś mocniejszego
@edit: właśnie list nie miałem, a wężyk ma być jakby projektem który łączy poznaną teorię z praktyką. Niby napisałem te kółko i krzyżyk bo tego wymaga Pani, ale mam ochotę na coś mocniejszego
-
- Użytkownik
- Posty: 1406
- Rejestracja: 6 maja 2012, o 22:46
- Płeć: Mężczyzna
- Lokalizacja: Polska
- Podziękował: 107 razy
- Pomógł: 145 razy
[C++]: Snake -> ruch węża
tak, ale tych danych nie dodasz raz...
poza tym nie wiem po co Ci akurat ta tablica statyczna, zrob sobie klasę
i zrob tablice , ale to rozwiązanie jest bardzo nie ładne
co do listy, nie musisz wiedzieć co to jest, ani dlaczego to działa. Ciebie interesowałaby tylko funkcja dodawania elementów i usunięcia wszytkiego.
poza tym nie wiem po co Ci akurat ta tablica statyczna, zrob sobie klasę
Kod: Zaznacz cały
class cialo
{
int x,y;
cialo przesun(&cialo);
}
Kod: Zaznacz cały
cialo tab[100]
co do listy, nie musisz wiedzieć co to jest, ani dlaczego to działa. Ciebie interesowałaby tylko funkcja dodawania elementów i usunięcia wszytkiego.