Skocz do zawartości
Zamknięcie Forum PC LAB

Szanowny Użytkowniku,

Informujemy, że za 30 dni tj. 30 listopada 2024 r. serwis internetowy Forum PC LAB zostanie zamknięty.

Administrator Serwisu Forum PC LAB - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie: wypowiada całość usług Serwisu Forum PC LAB z zachowaniem miesięcznego okresu wypowiedzenia.

Administrator Serwisu Forum PC LAB informuje, że:

  1. Z dniem 29 listopada 2024 r. zakończy się świadczenie wszystkich usług Serwisu Forum PC LAB. Ważną przyczyną uzasadniającą wypowiedzenie jest zamknięcie Serwisu Forum PC LAB
  2. Dotychczas zamowione przez Użytkownika usługi Serwisu Forum PC LAB będą świadczone w okresie wypowiedzenia tj. do dnia 29 listopada 2024 r.
  3. Po ogłoszeniu zamknięcia Serwisu Forum od dnia 30 października 2024 r. zakładanie nowych kont w serwisie Forum PC LAB nie będzie możliwe
  4. Wraz z zamknięciem Serwisu Forum PC LAB, tj. dnia 29 listopada 2024 r. nie będzie już dostępny katalog treści Forum PC LAB. Do tego czasu Użytkownicy Forum PC LAB mają dostęp do swoich treści w zakładce "Profil", gdzie mają możliwość ich skopiowania lub archiwizowania w formie screenshotów.
  5. Administrator danych osobowych Użytkowników - Ringier Axel Springer Polska sp. z o.o. z siedzibą w Warszawie zapewnia realizację praw podmiotów danych osobowych przez cały okres świadczenia usług Serwisu Forum PC LAB. Szczegółowe informacje znajdziesz w Polityce Prywatności

Administrator informuje, iż wraz z zamknięciem Serwisu Forum PC LAB, dane osobowe Użytkowników Serwisu Forum PC LAB zostaną trwale usunięte ze względu na brak podstawy ich dalszego przetwarzania. Proces trwałego usuwania danych z kopii zapasowych może przekroczyć termin zamknięcia Forum PC LAB o kilka miesięcy. Wyjątek może stanowić przetwarzanie danych użytkownika do czasu zakończenia toczących się postepowań.

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Pulpit

[C++] Implementacja fragmentu algorytmu tetrisa

Rekomendowane odpowiedzi

Mam takie pytanie otóż nie do końca rozumiem jak zaimplementować pewien algorytm od tetrisa otóż konkretnie chodzi mi o "zapamiętywanie" klocków, mam pętlę nieskończoną, która pokazuje klocek, który spada na dół i jak dojdzie na dół to do tablicy zapisuje się jego pozycia na osi X no i właśnie, pętla przechodzi kolejny raz i poprzedni klocek znika, a z góry spada kolejny i tak w sumie w nieskończoność. Jak to zrobić w allegro, żeby "zapamiętywało" klocki na ekranie? Pętla wygląda mniej więcej tak

BITMAP *bufor = NULL;
BITMAP *box = NULL;

bufor = create_bitmap(window_x, window_y);
box = load_bitmap("media/items/box.bmp", NULL);
int box_x[5], box_y[5], no = 0, box_pos[5];

while (!key[KEY_ESC]) {
	clear_to_color(bufor, makecol(255, 255, 255));
	blit(box, bufor, 0, 0, box_x[no], box_y[no], box->w, box->h);		
	box_y[no]+=10;			
	if (key[KEY_LEFT]) if (box_x[no]-1 > 150) box_x[no]-=10;
	if (key[KEY_RIGHT]) if (box_x[no]+1 < 479) box_x[no]+=10;

	if (box_y[no] == 450) {
		box_pos[no] = box_x[no];
		no++;
	}
	blit(bufor, screen, 0, 0, 0, 0, window_x, window_y);
	clear_keybuf();
	speed--;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Z pobeiznego przejrzenia kodu wydaje mi sie ze poprostu spuszaczasz na dol bitmape z obrakiem danego klocka itp itd.

Ja bym to zrobil tak:

1. tworze tablice 2D w ktorej bedzie przechowywany caly 'rejon' w ktorym beda sie poruszac klocki

2. klocki skladaly by sie tez z tablicy 2D o wymiarach 4x4<gdyby pokombinowac to obylo by sie bez tych tablic na klocki>

3. kazdy klocek bylby podzielony na kwadraciki ktore bylyby wypelnione jakas bitmapa

4. kazdy spadajacy klocek by zapisywal do tablicy 'rejonu' po kolei swoja widoczna zawartosc

5. jezeli dol klocka osiagnal by najnizszy poziom rejonu to przemieszczanie klocka mozna uznac za zakonczone, natomiast dane klocka pozostaly by w tablicy rejonu i klocek bylby widoczny na ekranie.

6. reszta to warunki na kasowanie linii i kolizje klockow.

 

Najlepiej pracowac tu, moim zdaniem, na klasach.

 

Tetrisa nie pisalem ale zabieralbym sie do niego wlasnie od stworzenia jakichs klas do tego co napisalem powyzej<moze niejasno ale nie mam glowy do doglebnego zastanawiania sie nad tym, wiec nie traktuj tego co napisalem jako wykladnik do ktorego sie nalezy zastosowac, bo jest to jedynie pewne naprowadzenie cie>

 

Pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ok zrobiłem (znowu przy nakierowaniu z gamedev), zamiast

blit(box, bufor, 0, 0, box_x[no], box_y[no], box->w, box->h);

dałem

for (int i=0;i<box_numbers;i++) if (box_y[i] != 0) blit(box, bufor, 0, 0, box_x[i], box_y[i], box->w, box->h);

i działa jak należy.

 

P.S: Jest jakaś funkcja, która pozwala wyświetlać ile program ma klatek na sekundę? Szukałem w googlach, na gamedev i manuala allegro ale nie natknąłem się na takie coś. Po prostu chcę albo w wybranym miejscu, albo w którymś rogu programu wyświetlać ilość klatek na sekundę.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
P.S: Jest jakaś funkcja, która pozwala wyświetlać ile program ma klatek na sekundę? Szukałem w googlach, na gamedev i manuala allegro ale nie natknąłem się na takie coś. Po prostu chcę albo w wybranym miejscu, albo w którymś rogu programu wyświetlać ilość klatek na sekundę.

a nie wpadles na pomysl zeby po prostu w kazdej klatce mierzyc jaki czas uplynal od poprzedniej klatki i przeliczyc na fps? :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Najlepiej pracowac tu, moim zdaniem, na klasach.

 

Tetrisa nie pisalem ale zabieralbym sie do niego wlasnie od stworzenia jakichs klas do tego co napisalem powyzej<moze niejasno ale nie mam glowy do doglebnego zastanawiania sie nad tym, wiec nie traktuj tego co napisalem jako wykladnik do ktorego sie nalezy zastosowac, bo jest to jedynie pewne naprowadzenie cie>

 

Pozdrawiam.

Ja pisalem kiedys tetrisa i zrobilem to dokladnie tak jak mowisz.

Troche jest kombinowania przy tym jak klocek ma zostac na planszy, ale to tylko tablica 2d. Mojego niedoskonalego tetrisa mozna pobrac tutaj.

 

Co do fps, to raczej sie ich nie liczy po to zeby synchronizowac animacje z tego co wiem tylko tak informacyjnie, a tak to jakas delta czasu i na podstawie tego dt tworzy sie animacje.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

No właśnie, ja się chciałem tylko w celach informacyjnych dowiedzieć, a nie że jakieś cuda niewidy zaraz robić ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...