Einzelnen Beitrag anzeigen

Benutzerbild von Wuaegner
Wuaegner

Registriert seit: 8. Feb 2004
406 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 7. Jan 2005, 19:48
Hi Oxmyx,
danke für deinen spontanen Einfall, habe die Funktion an mein Programm angeglichen und berichtigt (
Code:
Stein[i].x - Stein[0].x := Stein[i].y - Stein[0].y;
) das gab ne fehlermeldung also hab ich mathematisch korrekt einfach auf beiden seiten |+Stein[0].x gemacht, also vom Sinn her eigentlich nichts geändert.
HIer meine angeglichene Version:
Code:
function TEngine.Rotate90(SpSt: TSpielStein): boolean;
var
  temp,i: Integer;
  AltSpF: TSpielfeld;
begin
 result:= false;
 AltSpF:= FSpielfeld;
 for i:= 1 to 4 do       // alten SpSt löschen da er bei erfolgr. Drehung nicht da wäre
  FSpielfeld[FSpielStein[i].x,FSpielStein[i].y]:= FFreeColor;

  for i := 1 to 4 do                 // Koord. werden verschoben
  begin
    temp := -SpSt[i].x - SpSt[0].x ;
    SpSt[i].x := SpSt[i].y - SpSt[0].y+ SpSt[0].x;
    SpSt[i].y := temp+ SpSt[0].y;
  end;

 if SpielSteinPasst(SpSt) then
   begin
   FSpielStein:= SpSt;
   MacheSpStZuEchtem(SpSt);
   result:= true;
   FStatus.DrehungWarMoeglich:= true; // Status wird akt.
   end
  else
   begin
   FSpielfeld:= AltSpF;   // Spielfeld zurücksetzen
   FStatus.DrehungWarMoeglich:= false; // Status wird akt.
   end;
end;
Jetzt funktioniert es nur nich ganz, manchmal dreht es die Steine richtig aber manchmal kommen auch negative X-Werte für die Steine raus, obwohl ein Stein in der Mitte des Spielfeldes gedreht wird.
Drum is meine Frage ob du mal sagn kannst wie du zu deinen Gleichungn obn kommst und was für einen Drehpunkt sie benötigt, hab das noch nicht ganz durchschaut.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat