Tetris - zapełniona linia nie kasuje się

0

Witam wszystkich serdecznie.

Potrzebna mi wasza pomoc ! Myślę, staram się i nic mi nie przychodzi do głowy.

Jak zrobić aby po zapełnieniu wiersza klockami nastąpiło ich zniknięcie. Chodzi mi przede wszystkim o sam sposób postępowanie - niekoniecznie kod.
Albo chociaż jak zrobić, żeby program "dowiedział" się, że nastąpiło zapełnienie wiersza.
Klocki umieszczane są za pomocą współrzędnych przechowywanych w dwóch tablicach (posX oraz posY).
Na zdjęciu wypisane współrzędne są współrzędnymi klocków zaznaczonych na żółto.

teris.png
wspol.png

3

pierwsze co przychodzi mi do głowy to policzenie, że 9 klocków ma taką samą współrzędną Y i to oznacza, że cała linia jest zapełniona. Wtedy pewnie usuwasz te klocki a całej reszcie z mniejszą wartością Y dodajesz tą wartość żeby spadły niżej

0

Stworzyłem taki kod:

	public void checkLine(){
		int howY=0;
		for(int i =0;i<posY.size()-1;i++)
			if(posY.get(i).equals(430))
				howY++;
		if(howY==9)
			for(int i =0;i<posY.size();i++)
				if(posY.get(i).equals(430)){
					posY.remove(i);
					posX.remove(i);
					count--;
					i=-1;
				}
	}

Działa :)
Ale tylko dla Y=490 a jak to zastosować dla całej planszy ? Aby zrobić i się nie narobić :D

dodanie znacznika <code class="java"> - @furious programming

1

nie wiem ile wynosi u Ciebie różnica między jednym wierszem a drugim ale jeśli jest to np. 50 to pętla od Y pierwszego wiersza ze skokiem o 50 aż do Y ostatniego wiersza i w każdym obrocie pętli w kolejnej pętli jadącej po klockach zliczasz ilość klocków z Y, który akurat obsługiwany jest przez tą "nadrzędną" pętlę. Mam nadzieję, że nie zamotałem. PSEUDOKOD:

for(y=20; y< 520; y+=50){
   for(Klocek k: klocki){
      sprawdź czy k.pozY == y i ewentualnie zwiększ licznik. 
   }
   Jeśli licznik dobił do 9 to usuwanie itd i po wszystkim zerowanie licznika
}
 
0

Działa idealnie :)
Bardzo dziękuje za pomoc :)

Jednak nie było to takie trudne jak mi się z początku wydawało.

Miłego dnia :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1