AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Tetris mit Canvas funktioniert nicht wie es soll
Thema durchsuchen
Ansicht
Themen-Optionen

Tetris mit Canvas funktioniert nicht wie es soll

Ein Thema von fox67 · begonnen am 13. Feb 2013 · letzter Beitrag vom 21. Mär 2013
 
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#27

AW: Tetris mit Canvas funktioniert nicht wie es soll

  Alt 6. Mär 2013, 13:07
Delphi-Quellcode:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons;

type
  TBlock = class;
  THaupt = class;

  TForm2 = class(TForm)
    Spielfeld: TImage;
    Timer1: TTimer;
    Button1: TSpeedButton;
    Edit1: TEdit;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);


  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  Haupt : THaupt;


  end;

  THaupt = class(TObject)

   Block : array of TBlock;
   Anzahl : integer;
   kannbewegen : boolean;
   IDs : Integer;
   procedure Neu();
   procedure Neufallen();
   procedure verschiebenlinks();
   procedure verschiebenrechts();
   procedure findelinie();
   procedure arraykurzen();
  procedure Drehen();
  function CanMoveLast(const deltaX, deltaY: integer): boolean;
  // procedure Prufen();
  // procedure Entfernen();
  private

  public
  zufall: integer;
  gedreht : integer;
  temp : array[1..16] of Integer;
  end;


  TBlock = class(TObject)

    private
    fFarbe : TColor;
    fPosition : TPoint;
    fID : Integer;
    public
    procedure zeichen;
    property Farbe : TColor read fFarbe write fFarbe;
    property Position : Tpoint read fPosition write fPosition;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

//Code Block
procedure TBlock.zeichen;
begin
form2.Spielfeld.Canvas.Brush.Color := fFarbe;
form2.Spielfeld.Canvas.Brush.Style := bssolid;
form2.Spielfeld.Canvas.Rectangle(fPosition.X*24, fPosition.Y*24, fPosition.X*24+24, fPosition.Y*24+24 );
end;

//Code Haupt
procedure THaupt.Neu;


begin
 gedreht := 0;
 form2.Timer1.Enabled := false;
  if (form2.Edit1.text = '') then
   begin
  repeat
  zufall := random(5) +1;
  until (zufall <> 0) ;

   end
   else
   begin
   try
   zufall := strtoint(form2.Edit1.Text);
    except
    showmessage('keine Zahl');
    repeat
  zufall := random(5) +1;
  until (zufall <> 0) ;
   end;
   end;

  case zufall of
  1: begin // Quadrat
      IDs := IDs +4;
      setlength(Block, Length(Block)+4);
      Block[high(Block)-3] := TBlock.Create;
      Block[high(Block)-3].Farbe := clred ;
      Block[high(Block)-3].fPosition.X:= 4 ;
      Block[high(Block)-3].fPosition.Y:= -2 ;
      Block[high(Block)-3].fID := IDS-3;
      Block[high(Block)-2] := TBlock.Create;
      Block[high(Block)-2].Farbe := clred ;
      Block[high(Block)-2].fPosition.X:= 5 ;
      Block[high(Block)-2].fPosition.Y:= -2 ;
      Block[high(Block)-2].fID := IDs-2;
      Block[high(Block)-1] := TBlock.Create;
      Block[high(Block)-1].Farbe := clred ;
      Block[high(Block)-1].fPosition.X:= 4 ;
      Block[high(Block)-1].fPosition.Y:= -1 ;
      Block[high(Block)-1].fID := IDs-1;
      Block[high(Block)] := TBlock.Create;
      Block[high(Block)].Farbe := clred ;
      Block[high(Block)].fPosition.X:= 5 ;
      Block[high(Block)].fPosition.Y:= -1 ;
      Block[high(Block)].fID := IDs;
      //showmessage('Quadrat');
     form2.Timer1.Enabled := true;

     end;

  2: begin // Winkellinks
      IDs := IDs +4 ;
      setlength(Block, Length(Block)+4);
      Block[high(Block)-3] := TBlock.Create;
      Block[high(Block)-3].Farbe := clyellow ;
      Block[high(Block)-3].fPosition.X:= 4 ;
      Block[high(Block)-3].fPosition.Y:= -2 ;
      Block[high(Block)-3].fID := IDs-3;
      Block[high(Block)-2] := TBlock.Create;
      Block[high(Block)-2].Farbe := clyellow ;
      Block[high(Block)-2].fPosition.X:= 4 ;
      Block[high(Block)-2].fPosition.Y:= -1 ;
      Block[high(Block)-2].fID := IDs-2;
      Block[high(Block)-1] := TBlock.Create;
      Block[high(Block)-1].Farbe := clyellow ;
      Block[high(Block)-1].fPosition.X:= 5 ;
      Block[high(Block)-1].fPosition.Y:= -1 ;
      Block[high(Block)-1].fID := IDs-1;
      Block[high(Block)] := TBlock.Create;
      Block[high(Block)].Farbe := clyellow ;
      Block[high(Block)].fPosition.X:= 6 ;
      Block[high(Block)].fPosition.Y:= -1 ;
      Block[high(Block)].fID := IDs;
       //showmessage('Winkel');
     form2.Timer1.Enabled := true;

     end;

  3: begin //Winkelrechts
      IDS := IDs +4;
      setlength(Block, Length(Block)+4);
      Block[high(Block)-3] := TBlock.Create;
      Block[high(Block)-3].Farbe := clblue ;
      Block[high(Block)-3].fPosition.X:= 6 ;
      Block[high(Block)-3].fPosition.Y:= -2 ;
      Block[high(Block)-3].fID := IDs-3;
      Block[high(Block)-2] := TBlock.Create;
      Block[high(Block)-2].Farbe := clblue ;
      Block[high(Block)-2].fPosition.X:= 4 ;
      Block[high(Block)-2].fPosition.Y:= -1 ;
      Block[high(Block)-2].fID := IDs-2;
      Block[high(Block)-1] := TBlock.Create;
      Block[high(Block)-1].Farbe := clblue ;
      Block[high(Block)-1].fPosition.X:= 5 ;
      Block[high(Block)-1].fPosition.Y:= -1 ;
      Block[high(Block)-1].fID := IDs-1;
      Block[high(Block)] := TBlock.Create;
      Block[high(Block)].Farbe := clblue ;
      Block[high(Block)].fPosition.X:= 6 ;
      Block[high(Block)].fPosition.Y:= -1 ;
      Block[high(Block)].fID := IDs;
       //showmessage('Winkel');
      form2.Timer1.Enabled := true;

     end;

  4: begin //T
      IDS := IDs +4;
      setlength(Block, Length(Block)+4);
      Block[high(Block)-3] := TBlock.Create;
      Block[high(Block)-3].Farbe := cllime ;
      Block[high(Block)-3].fPosition.X:= 5 ;
      Block[high(Block)-3].fPosition.Y:= -2 ;
      Block[high(Block)-3].fID := IDs-3;
      Block[high(Block)-2] := TBlock.Create;
      Block[high(Block)-2].Farbe := cllime ;
      Block[high(Block)-2].fPosition.X:= 4 ;
      Block[high(Block)-2].fPosition.Y:= -1 ;
      Block[high(Block)-2].fID := IDs-2;
      Block[high(Block)-1] := TBlock.Create;
      Block[high(Block)-1].Farbe := cllime ;
      Block[high(Block)-1].fPosition.X:= 5 ;
      Block[high(Block)-1].fPosition.Y:= -1 ;
      Block[high(Block)-1].fID := IDs-1;
      Block[high(Block)] := TBlock.Create;
      Block[high(Block)].Farbe := cllime ;
      Block[high(Block)].fPosition.X:= 6 ;
      Block[high(Block)].fPosition.Y:= -1 ;
       //showmessage('T');
      form2.Timer1.Enabled := true;

     end;

  5: begin // Rechteck
      IDs := IDs +4;
      setlength(Block, Length(Block)+4);
      Block[high(Block)-3] := TBlock.Create;
      Block[high(Block)-3].Farbe := clpurple ;
      Block[high(Block)-3].fPosition.X:= 5 ;
      Block[high(Block)-3].fPosition.Y:= -4 ;
      Block[high(Block)-3].fID := IDs-3;
      Block[high(Block)-2] := TBlock.Create;
      Block[high(Block)-2].Farbe := clpurple ;
      Block[high(Block)-2].fPosition.X:= 5 ;
      Block[high(Block)-2].fPosition.Y:= -3 ;
      Block[high(Block)-2].fID := IDs-2;
      Block[high(Block)-1] := TBlock.Create;
      Block[high(Block)-1].Farbe := clpurple ;
      Block[high(Block)-1].fPosition.X:= 5 ;
      Block[high(Block)-1].fPosition.Y:= -2 ;
      Block[high(Block)-1].fID := IDs-1;
      Block[high(Block)] := TBlock.Create;
      Block[high(Block)].Farbe := clpurple ;
      Block[high(Block)].fPosition.X:= 5 ;
      Block[high(Block)].fPosition.Y:= -1 ;
      Block[high(Block)].fID := IDs;
       //showmessage('REchteck');
       form2.Timer1.Enabled := true;

     end;
  end;



end;

procedure THaupt.Neufallen;
var
i :integer;
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;




 if CanMoveLast(0,1) then kannbewegen:= true;


  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;

  if (Block[high(Block)-3].fPosition.y = 27) or (Block[high(Block)-2].fposition.y = 27) or (Block[high(Block)-1].fposition.y = 27) or (Block[high(Block)-0].fposition.y = 27) then kannbewegen:= false;

  for i := 0 to high(Block) do
    begin
      Block[i].zeichen;
    end;
  if not kannbewegen then findelinie;

end;

procedure THaupt.Drehen;
begin
 kannbewegen := false;
  case Zufall of
  1: begin
      //passiert nichts

     end;
  2: begin
       case gedreht of
       0: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +0;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x+1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y+1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0 ;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x-1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
       gedreht := 1;

          end;
       1: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +2;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +0;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x +1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x - 1 ;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y +1;
       gedreht := 2;

          end;
       2 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -0;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y -0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x +1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y +1;
       gedreht := 3;

           end;
       3 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -2 ;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +0;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x +0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y +0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x +1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
           gedreht := 0;
           end;

        end;
     end;
  3: begin
     case gedreht of
       0: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -2;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -0;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x+1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0 ;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x-1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
       gedreht := 1;

          end;
       1: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -0;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x +1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x - 1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y + 1;
       gedreht := 2;

          end;
       2 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +2;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +0;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x + 1 ;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y + 1;
       gedreht := 3;

           end;
       3 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -0 ;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y +0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x +1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
           gedreht := 0;
           end;

        end;
     end;
  4: begin
     case gedreht of
       0: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -1;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +1;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x+1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x-1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
       gedreht := 1;

          end;
       1: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +1;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +1;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x +1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x - 1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y + 1;
       gedreht := 2;

          end;
       2 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +1;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -1;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x + 1 ;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y + 1;
       gedreht := 3;

           end;
       3 : begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -1;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -1;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x -1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y +0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x +1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
           gedreht := 0;
           end;

        end;
     end;
  5: begin
     case gedreht of
       0: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x -2;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y +2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x-1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y +1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y - 0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x+1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y -1;
       gedreht := 1;

          end;
       1: begin
       Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.x +2;
       Block[high(Block)-3].fPosition.Y:= Block[high(Block)-3].fPosition.Y -2;
       Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.x +1;
       Block[high(Block)-2].fPosition.Y:= Block[high(Block)-2].fPosition.Y -1;
       Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.x -0;
       Block[high(Block)-1].fPosition.Y:= Block[high(Block)-1].fPosition.Y -0;
       Block[high(Block)].fPosition.X:= Block[high(Block)].fPosition.x - 1;
       Block[high(Block)].fPosition.Y:= Block[high(Block)].fPosition.Y + 1;
       gedreht := 0;

          end;

     end;
  end;
  end;
end;


procedure THaupt.verschiebenlinks;
var
i : Integer;
begin
if (Block[high(Block)-3].fPosition.x = 0) or (Block[high(Block)-2].fPosition.x = 0) or (Block[high(Block)-1].fPosition.x = 0) or (Block[high(Block)-0].fPosition.x = 0) then
begin

end
else
begin


if canmovelast(-1,0) then
begin

Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.X -1;
Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.X -1;
Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.X -1;
Block[high(Block)-0].fPosition.X:= Block[high(Block)-0].fPosition.X -1;
Form2.Spielfeld.Canvas.Brush.Color := clwhite;
Form2.Spielfeld.Canvas.Brush.Style := bssolid;
Form2.Spielfeld.Canvas.Rectangle(0,0,form2.Spielfeld.Width, form2.Spielfeld.Height);
 for i := 0 to high(Block) do
    begin
      Block[i].zeichen;
    end;
end;
end;
end;

procedure Thaupt.verschiebenrechts;
var
i : Integer;
begin
if (Block[high(Block)-3].fPosition.x = 15) or (Block[high(Block)-2].fPosition.x = 15) or (Block[high(Block)-10].fPosition.x = 15) or (Block[high(Block)-0].fPosition.x = 15) then
begin

end
else
begin
if canmovelast(1,0) then
begin
Block[high(Block)-3].fPosition.X:= Block[high(Block)-3].fPosition.X +1;
Block[high(Block)-2].fPosition.X:= Block[high(Block)-2].fPosition.X +1;
Block[high(Block)-1].fPosition.X:= Block[high(Block)-1].fPosition.X +1;
Block[high(Block)-0].fPosition.X:= Block[high(Block)-0].fPosition.X +1;
Form2.Spielfeld.Canvas.Brush.Color := clwhite;
Form2.Spielfeld.Canvas.Brush.Style := bssolid;
Form2.Spielfeld.Canvas.Rectangle(0,0,form2.Spielfeld.Width, form2.Spielfeld.Height);
 for i := 0 to high(Block) do
    begin
      Block[i].zeichen;
    end;
end;
end;
end;

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].fPosition.X + deltaX = Block[I].fPosition.X)
         and (Block[N - J].fPosition.y + deltaY = Block[I].fPosition.Y) then
           Result := false;

end;

procedure THaupt.findelinie;
var
i,j,k,max,anzahl : integer;


begin
max := 0;
J := 0;
for i := 1 to high(Block) do
  begin
     if 27-Block[i].fPosition.Y > max then max := 27-Block[i].fPosition.Y ;
  end;
while (j < max) and (anzahl<>16) do
  begin
    anzahl := 1;
    for i := 1 to high(Block) do
     begin
        if Block[i].fPosition.Y = j+27 then
        begin
         temp[anzahl] := Block[i].fID;
         anzahl:=anzahl+1;
        if anzahl = 16 then
        begin
        arraykurzen
        end
        else
        begin
          neu();
        end;
        end;
     end;
  end;
end;

procedure THaupt.arraykurzen;
var
i,j,x : integer;
begin
for i := 1 to high(Block) do
  begin
    for j := 1 to 16 do
     begin
       if block[i].fID = temp[j] then
        begin
          x := i+1;
          repeat
            Block[x-1].fPosition.X := Block[x].fPosition.x;
            Block[x-1].fPosition.X := Block[x].fPosition.y;
            Block[x-1].fFarbe := Block[x].fFarbe;
            Block[x-1].fID := Block[x].fID;
            x := x+1;
            setlength(Block, length(Block)-1);
          until (x = high(Block)) ;
        end;

     end;

  end;
  findelinie;
end;

//Fenster
procedure TForm2.Button1Click(Sender: TObject);
begin
Haupt.Neu();

end;



procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : integer;
begin

for i := 1 to high(Haupt.Block) do
begin
Haupt.Block[i].Free;
end;

Haupt.Free;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin

 Haupt := THaupt.Create;
setlength(Haupt.Block, 0);
Haupt.IDs := 0;
end;

procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key = VK_UP then Haupt.Drehen;
if key = VK_left then Haupt.verschiebenlinks;
if key = Vk_right then Haupt.verschiebenrechts;
if key = vk_down then Haupt.Neufallen;




end;


procedure TForm2.Timer1Timer(Sender: TObject);
begin
Haupt.Neufallen();

end;




end.
hab das ganze jetzt geändert. Es tut sich leider aber immer noch nichts
  Mit Zitat antworten Zitat
 


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 06:10 Uhr.
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