AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Rotationsalgorithmus für Tetrisspielsteine
Thema durchsuchen
Ansicht
Themen-Optionen

Rotationsalgorithmus für Tetrisspielsteine

Ein Thema von Wuaegner · begonnen am 6. Jan 2005 · letzter Beitrag vom 13. Jan 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Wuaegner
Wuaegner

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

Rotationsalgorithmus für Tetrisspielsteine

  Alt 6. Jan 2005, 18:29
Hallo,
Ich programmiere gerade ein sehr einfach gehaltenen Tetrisklon. Ein Spielstein besteht aus vier Blöcken, weshalb ich einen Typ:
Code:
TBlock = record x,y: integer
habe und den
TSpielstein= array[0..5] of TBlock wobei [5].x die Farbe des Steins speichert und in [0].x und [0].y die Koordinaten des Drehpunkts gespeichert sind.
Mein Spielfeld:
Code:
TSpielfeld= array[0..9,0..19] of TColor;
jedes Feld bestitzt eine Farbe, oder keine ( weiß) und ist somit leer.
Jetz suche ich nach einer geschickten Lösung wie ich die 7 vers. Spielsteine die es gibt drehen lassen kann, ohne jeden Drehzustand jedes Steins gespeichert haben zu müssen und ihn dann abrufe.
Möchte dass irgendwie relativ zum Drehpunkt machen.
Weiß aber noch leider keine Lösung.
Hoffe ihr wisst was.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#2

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 6. Jan 2005, 18:35
Wer sagt's dennn...
Ich habe demnächst (wenn ich die Zeit finde meinen Tetris-Clone weiterzuprogrammieren) das selbe Problem
Lukas
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

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

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 6. Jan 2005, 18:46
Das freut mich für dich , bringt mich aber leider nicht weiter
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#4

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 6. Jan 2005, 19:12
Erster Einfall:

Delphi-Quellcode:
procedure Rotate90(var Stein: TSpielstein);
var
  i, temp: Integer;
begin
  for i := 1 to 4 do begin
    temp := -Stein[i].x - Stein[0].x
    Stein[i].x - Stein[0].x := Stein[i].y - Stein[0].y;
    Stein[i].y - Stein[0].y := temp;
  end;
end;
Ist nur was mir gerade dazu eingefallen ist, ich hab's nicht überprüft, probier einfach mal ob's funktioniert.
  Mit Zitat antworten Zitat
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, 20: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
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#6

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 9. Jan 2005, 15:48
Ich hab mal eine Zeichnung angefertigt. Der graue Spielstein soll um 90° im Uhrzeigersinn in die gelbe Stellung gedreht werden. Dabei gilt dann:
x = y;
y = -x;

http://home.arcor.de/oxmyx/tetris.jpg
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 9. Jan 2005, 16:02
Hat der TetrisClone LAN-Support?
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

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

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 9. Jan 2005, 19:59
Hi Oxmyx,
RESPECT danke für die Zeichnung.
Zitat:
Hat der TetrisClone LAN-Support?
Nein hat er bis jetzt noch nich und ich denke auch nich dass er das noch bekommen wird, weil's eh nich über LAN gespielt wird.
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Benutzerbild von Wuaegner
Wuaegner

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

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 10. Jan 2005, 14:30
So für alle die es interessiert ist hier der Source wie sich bei mir die Steine ohne Fehler drehen:
Code:
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;

// Zuordnen

  for i:= 1 to 4 do     // Drehpunkt: (0|0); Stein darüber : (0|1) usw.
   begin
     SpSt[i].x := SpSt[i].x - SpSt[0].x;
     SpSt[i].y := -SpSt[i].y + SpSt[0].y;
   end;
  SpStAlt := SpSt;

// Drehen

  for i:= 1 to 4 do
   begin
     SpSt[i].x:= SpStAlt[i].y;    // x := y;
     SpSt[i].y:= - SpStAlt[i].x;  // y := -x;
   end;

// Zurück zuordnen

  for i:= 1 to 4 do       // Speilstein erhält wieder seine
   begin                  // Koord. relativ zum Spielfeld, nicht mehr zum Drehpunkt
     SpSt[i].x := SpSt[0].x + SpSt[i].x;
     SpSt[i].y := SpSt[0].y - SpSt[i].y;
   end;
Wuaegner
Gruß Flo
Unternehmensberatung
  Mit Zitat antworten Zitat
Der_Ventilator

Registriert seit: 11. Apr 2004
Ort: Kanada
136 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Rotationsalgorithmus für Tetrisspielsteine

  Alt 12. Jan 2005, 18:54
Zitat von Wuaegner:
Hi Oxmyx,
RESPECT :thumb: danke für die Zeichnung.
Zitat:
Hat der TetrisClone LAN-Support?
Nein hat er bis jetzt noch nich und ich denke auch nich dass er das noch bekommen wird, weil's eh nich über LAN gespielt wird.
Meine Kumpels und ich zocken oft Tetris im LAN, aber nur das alte TetriNet1, das nur eine Auflösung von 640x480 unterstützt. Deswegen such ich eine neuere Tetris-Lan Version.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz