i edit your code:

Code:
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin

//You are drawing before check DXDraw1.CanDraw
  DXDraw1.Surface.Fill(0);
  DXSpriteEngine1.Draw;
  DXImageList1.Items.Find('Earth').Draw(DXDraw1.Surface, Earthx, Earthy,0);
  DXImageList1.Items.Find('Explode1').Draw(DXDraw1.Surface, Explode1x, Explode1y,0);
  DXImageList1.Items.Find('Explode2').Draw(DXDraw1.Surface, Explode2x, Explode2y,0);
  DXImageList1.Items.Find('Planet').Draw(DXDraw1.Surface, Planetx, planety,0);
  if not DXDraw1.CanDraw then Exit;

  DXInput1.Update;
  DXSpriteEngine1.Move(1);
  DXSpriteEngine1.Dead;
  DXSpriteEngine1.Draw;
  if (player.Deaded) then begin
  if &#40;Player_No <= 2&#41; then
  NewPlayer
  else
  GameEnd;

//here you disable dx timer...you will be unable to print anything on video by doing this!!!!
//by disabling DX timer you "freeze" the game because the procedure TForm1.DXTimer1Timer is NEVER called.


end;
  with DXDraw1.Surface.Canvas do
    begin
      Brush.Style &#58;= bsClear;
      Font.Size &#58;= 12;
      Font.Color &#58;= clTeal;
      Textout&#40;0,60, 'FPS&#58; '+inttostr&#40;DXTimer1.FrameRate&#41;&#41;;
      TextOut&#40;0,0,'Time&#58; ' + IntToStr&#40;Seconds&#41; + ', Enemy Ships left&#58; ' + IntToStr&#40;enimies&#41;&#41;;
      TextOut&#40;0,40, 'Lives left&#58; ' + IntToStr&#40;Lives&#41;&#41;;
  If &#40;Enimies = 0&#41; Then
    begin
      DXTimer1.Enabled &#58;= False;
      Timer1.Enabled &#58;= False;
      DXWaveList1.Items.Find&#40;'Tada'&#41;.Play&#40;False&#41;;
      Font.Size &#58;= 26;
      Font.Color &#58;= clYellow;
      TextOut&#40;290,220,'Game Over, your time&#58; ' + IntToStr&#40;Seconds&#41; + ' seconds'&#41;;
     end;
     Release;
end;
DXDraw1.Flip;
end;
hope it help!
i suggest you to do not use Dx timer except of inizialize, finalize and print on video.