Delphi-PRAXiS
Seite 2 von 5     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Tetris mit Canvas funktioniert nicht wie es soll (https://www.delphipraxis.net/173237-tetris-mit-canvas-funktioniert-nicht-wie-es-soll.html)

fox67 14. Feb 2013 18:51

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Zitat:

Zitat von Volker Z. (Beitrag 1203582)
Hallo,

Zitat:

Delphi erkenn die Pfeiltasten nicht als eingabe unter onkeydown? Keypreview habe ich auf true gestetzt.
Du hast ein TButton auf Deinem Formular. Der macht Dir einen Strich durch die Rechnung. Die Pfeiltasten werden vom Button verarbeitet und nicht mehr ans Form durchgereicht.

Gruß

Kann man das verhindern?

Gruß Arni

Bjoerk 14. Feb 2013 18:57

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Mach aus dem Button ein Speedbutton.

fox67 14. Feb 2013 19:03

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Danke :thumb:

fox67 16. Feb 2013 11:22

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Hallo
Es ist wieder ein Problem erschienn aber diesmal liegt es an mir ich erkenne den Felher nicht
Delphi-Quellcode:
procedure THaupt.Neufallen;
var
i :integer;
kannbewegen : boolean;
begin


  Form2.Spielfeld.Canvas.Brush.Color := clwhite;
  Form2.Spielfeld.Canvas.Brush.Style := bssolid;
  Form2.Spielfeld.Canvas.Rectangle(0,0,form2.Spielfeld.Width, form2.Spielfeld.Height);
  kannbewegen:= false;
  for i := 0 to high(Block) do
  begin

    if (i<>high(block)-3) and (i<>high(block)-2) and (i<>high(block)-1) and (i<>high(block)-0) then
    begin
    if not (Block[high(Block)-3].fPosition.y +1 = Block[i].fPosition.y) and (Block[high(Block)-3].fPosition.y +1 <>0) then
    begin
      if not (Block[high(Block)-2].fPosition.y +1 = Block[i].fPosition.y) and (Block[high(Block)-2].fPosition.y +1 <>0) then
      begin
        if not (Block[high(Block)-1].fPosition.y +1 = Block[i].fPosition.y) and (Block[high(Block)-1].fPosition.y +1 <>0) then
        begin
          if not (Block[high(Block)-0].fPosition.y +1 = Block[i].fPosition.y) and (Block[high(Block)-0].fPosition.y +1 <>0) then
          begin
            kannbewegen:= true;
          end;
        end;

      end;

    end;

    end;
  end;


  if kannbewegen then
  begin
  Block[high(Block)-3].fPosition.Y := Block[high(Block)-3].fPosition.Y +1 ;
  Block[high(Block)-2].fPosition.Y := Block[high(Block)-2].fPosition.Y +1 ;
  Block[high(Block)-1].fPosition.Y := Block[high(Block)-1].fPosition.Y +1 ;
  Block[high(Block)].fPosition.Y  := Block[high(Block)].fPosition.Y +1 ;
  end;


  for i := 0 to high(Block) do
    begin
      Block[i].zeichen;
    end;
  if not kannbewegen then neu;
Die Blöcke fallen nicht sondern werden sofort neu erzeugt?

Bjoerk 16. Feb 2013 15:33

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Kumpel, du machst mich echt fertig. :)

Delphi-Quellcode:
Block[high(Block) - 3].fPosition.Y
Das ist sehr unsauber (und geht auch nur, weil TBlock in der selben unit steht). Spendier' TBlock mal eine property X und Y, wie ich‘s dir letztens gezeigt habe.

Deine Schleife wird so auch etwas lesbarer. Was soll die eigentlich machen? :gruebel:
Delphi-Quellcode:
  n := high(Block);
  for i := 0 to n do
    if (i <> n - 3) and (i <> n - 2) and (i <> n - 1) and (i <> n - 0) then
      if (Block[n - 3].y + 1 <> Block[i].y) and (Block[n - 3].y + 1 <> 0) then
        if (Block[n - 2].y + 1 <> Block[i].y) and (Block[n - 2].y + 1 <> 0) then
          if (Block[n - 1].y + 1 <> Block[i].y) and (Block[n - 1].y + 1 <> 0) then
            if (Block[n - 0].y + 1 <> Block[i].y) and (Block[n - 0].y + 1 <> 0) then
               kannbewegen := true;

Bjoerk 16. Feb 2013 16:28

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Achso. Verstehe. Probier' mal so (ungetestet):

Delphi-Quellcode:
function THaupt.CanMoveLast(const deltaX, deltaY: integer): boolean;
var
  N, I, J: integer;
begin
  Result := true;
  N := High(Block);
  for I := 0 to N - 4 do
    for J := 0 to 3 do
      if (Block[N - J].X + deltaX = Block[I].X)
        and (Block[N - J].Y + deltaY = Block[I].Y) then
          Result := false;
end;

fox67 16. Feb 2013 22:40

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Zitat:

Zitat von Bjoerk (Beitrag 1203857)
Kumpel, du machst mich echt fertig. :)

Delphi-Quellcode:
Block[high(Block) - 3].fPosition.Y
Das ist sehr unsauber (und geht auch nur, weil TBlock in der selben unit steht). Spendier' TBlock mal eine property X und Y, wie ich‘s dir letztens gezeigt habe.

Deine Schleife wird so auch etwas lesbarer. Was soll die eigentlich machen? :gruebel:
Delphi-Quellcode:
  n := high(Block);
  for i := 0 to n do
    if (i <> n - 3) and (i <> n - 2) and (i <> n - 1) and (i <> n - 0) then
      if (Block[n - 3].y + 1 <> Block[i].y) and (Block[n - 3].y + 1 <> 0) then
        if (Block[n - 2].y + 1 <> Block[i].y) and (Block[n - 2].y + 1 <> 0) then
          if (Block[n - 1].y + 1 <> Block[i].y) and (Block[n - 1].y + 1 <> 0) then
            if (Block[n - 0].y + 1 <> Block[i].y) and (Block[n - 0].y + 1 <> 0) then
               kannbewegen := true;

Ja deine Berbesserungsvorschläge hab ich noch nicht umgestetzt da ich erst mal das gröbst zum laufen bringen wollte und dann mir den Code noch einmal anschauen und verbessern.

fox67 16. Feb 2013 23:01

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Zitat:

Zitat von Bjoerk (Beitrag 1203865)
Achso. Verstehe. Probier' mal so (ungetestet):

Delphi-Quellcode:
function THaupt.CanMoveLast(const deltaX, deltaY: integer): boolean;
var
  N, I, J: integer;
begin
  Result := true;
  N := High(Block);
  for I := 0 to N - 4 do
    for J := 0 to 3 do
      if (Block[N - J].X + deltaX = Block[I].X)
        and (Block[N - J].Y + deltaY = Block[I].Y) then
          Result := false;
end;

Vielen Dank. Es funktioniert zwar noch nicht 100% aber das krieg ich noch hin

fox67 21. Feb 2013 14:10

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Mein Projekt macht Fortschritte :)

http://up.picr.de/13537678nq.jpg

fox67 21. Feb 2013 14:53

AW: Tetris mit Canvas funktioniert nicht wie es soll
 
Liste der Anhänge anzeigen (Anzahl: 1)
Tja und leider auch wieder Probleme. Aber wieder ein Denkfehler beim drehen von winkelrechts.
Ich hab das spiel jetzt so um geschrieben das man zum testen nur die Nummer des jeweiligen steins eingeben muss damit es erscheint.
Für die Verbessrungsvorschläge von Thommas hatte ich bis jetzt noch keine Zeit
Winkelrechts = 3


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:00 Uhr.
Seite 2 von 5     12 34     Letzte »    

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