Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   - JAVA - Tetris - volle Reihen entfernen... (https://www.delphipraxis.net/42219-java-tetris-volle-reihen-entfernen.html)

flomei 15. Mär 2005 23:39


- JAVA - Tetris - volle Reihen entfernen...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Freitag is Abgabe meiner Facharbeit und momentan hänge ich an einem wichtigen Punkt fest.
Und zwar hapert es Entfernen komplett gefüllter Reihen.
Ich weiss nicht wie ich das klären soll...
Habe in einer Liste alle gelegten Blöcke und kann diese nach ihrer X und Y Position fragen. In eine Reihe passen 10 Blöcke nebeneinander.
Wie kann ich nun am Besten überprüfen ob 10 Blöcke direkt nebeneinander in meiner Liste rumgammeln.
Habe mal mit Paint ne Skizze gemacht um das anschaulich zu machen... ;)

Der Rest ist eigentlich kaum nen Problem.
Ich würde die Reihe entfernen und würde dann alle Blöcke die noch da sind versuchen "einen tiefer" rutschen zu lassen...

Also wie mach ich das jetzt am Besten?

MFG Florian :hi:

P.S.: Bitte ne Lösung mit Schleifen und meiner Liste. Hab genug Streß weil ich 1,5mal neu anfangen durfte... :roll:

sniper_w 16. Mär 2005 11:35

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Jedes mal wenn ein Block runterfählt, merkst du das in einem Feld (10*Hoche) (2d array). Danach überprüfst du ob eine ganze Reie voll "besetz" ist.
z.B. so ungefähr
Delphi-Quellcode:
const Hoche : integer = 20; // das kannst du ändern

var Field:array[0..9] of array[0..Hoche] of Boolean;

// ANNAHME -> Wenn Field[x,y]=TRUE dann ist das besetzt, sonst frei

function ReieVoll(reie:integer):Boolean;
 var i:integer;
begin
 result := True;
 for i:=0 to 9 do
   if Field[i,reie] then
    begin
     Result := False;
     Exit;
    end;
end;
....
 for a:=0 to Hoche-1 do
  if ReieVoll(a) then
   begin
      // heir machst du was du schon willst
   end;

flomei 16. Mär 2005 20:12

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Einfachere Lösungsmöglichkeiten?
Würde gerne heute Abend bzw. Nacht die Arbeit vollenden, bzw. so gut wie vollenden...
Notfalls lass ich das Entfernen der Reihen halt raus. Ist zwar nicht toll aber ich schreib dann schon was Nettes in die Bewertung der Arbeit...

MFG Florian :hi:

Pr0g 16. Mär 2005 20:16

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Ich würde es auch so machen, wie sniper_w vorgeschlagen hat.

Oder du nimmst ein weiteres Arrays, in welchem du für jede Reihe die Anzahl der besetzen Blöcke speicherst. Nach jedem Stein musst du halt ausrechnen wie viele Blöcke welcher Reihe hinzugefügt werden, danach kannst du das Array durchgehen und prüfen ob eine Reihe voll ist. Wenn ja, die Reihe löschen und alle Werte (in dem Array und in deinem Array mit den Blöcken) eins nach unten schieben, bzw. nach oben je nach dem, wie du es aufgebaut hast.

MfG Pr0g

sniper_w 16. Mär 2005 20:38

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Zitat:

Einfachere Lösungsmöglichkeiten?
:roll: :gruebel: :shock: :?
Und das war nicht einfach ? :dp:

flomei 16. Mär 2005 21:05

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Das war schon einfach aber ob es für den Lehrer einfach genug ist... :roll:

MfG Florian :hi:

atreju2oo0 16. Mär 2005 21:16

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Ich denke mal Du willst das Array umgehen, da Du ja ne Liste hast, richtig?

Dann würde ich einfach ne Funktion schreiben die das so macht:

Delphi-Quellcode:
procedure getReihe
var reihe:array[1..Hoehe]of integer;
begin
   while Blockliste.next <> nil do  // Wie das mit JAva geht weiß ich nciht... gemeint ist halt die Liste mit deinen Blöcken
    begin
      Blockliste:=Blockliste.next;
      inc(reihe[Blockliste.y]);
    end;
    // Diese while Schleife durchläuft deine ganzen Blöcke und erhöht jeweils den Eintrag der Liste in dem der Stein ist.
       Wenn jetzt am Ende ein Feld der reihe=10 ist so muss zwangsläufig die Reihe voll sein!
       Wie Du das prüfst und so schaffste schon alleine!

end;

GuenterS 16. Mär 2005 21:55

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Statt dem Array könntest Du auch die ersten 10 Bit eines Integers verwenden. Damit würdest Dir das "Array" sparen und würdest noch Kenntnisse mit BitOperatoren nachweisen.

atreju2oo0 16. Mär 2005 22:06

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Nen Array braucht man aber trotzdem, da ja pro Zeile Werte von 0 bis 10 gespeichert werden müssen.
Da denk ich ist meine Version besser geeignet oder hab ich Dich falsch verstanden?

GuenterS 16. Mär 2005 22:17

Re: - JAVA - Tetris - volle Reihen entfernen...
 
Nun du brauchst pro Zeile eine Zahl, die aber sicher größer als 10 wird.

Wenn Du jede Reihe durchgehst und das entsprechende Bit setzt oder löscht, je nachdem ob da ein Stein ist oder nicht, kommst Du auf eine bestimmten Wert der Reihe. Wenn die Reihe voll ist, brauchst Du die Wertigkeit der Reihe nur mit 1023 vergleichen. Ist sie gleich, ist die Reihe voll, wenn nicht fehlt mindestens 1 Stein.

Dazu fängt man unten an und geht mit einer schleife nach oben. Nicht vergessen darf man aber, nach jedem erfolgreichen durchgehen die Steine runterrutschen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz