Войти
ФлеймФорумПрограммирование

Почему некоторые программисты выбирают Delphi? (183 стр)

Страницы: 1180 181 182 183 184 185 Следующая »
#2730
18:04, 1 июня 2011

DevilDevil
> List.Free;
не нужно если прога после этого убивается(в вин NT+).


#2731
18:05, 1 июня 2011

SNVampyre
> где в делфи или шарпе больше возможностей или более лаконичный синтаксис
В с++ нету свойств.
Нет нормального RTTI (с созданием объектов по имени класса и прочими радостями)
Нету GC.
Нету инициализации строк символами.
Нету нормальной модульности
Невероятно долгое время компиляции
Его синтаксис чудовищен (да еще и неоднозначен). Даже пришлось ввестии слово auto, чтобы спрятать ужасные названия типов.

#2732
18:08, 1 июня 2011

DevilDevil
> давай поставим за приоритет - скорость компиляции
пользователи оценят такой приоритет

DevilDevil
> я не буду говорить что С++ гомно ровно до того момента, как не появятся
> упоротые сипиписты, которые будут кричать об убогости Delph
я никуда не уходил

DevilDevil
> в реальных программистских задачах лучше C#
fxd

DevilDevil
> для меня "не особо долго жуёт" - это секунда максимум
> дальше меня процесс сборки начинает раздражать
если не программировать методом перебора, то скорость сборки не особо напрягает

DevilDevil
> или аська
поспорил бы, ибо разница между 10 метровым квипом и 60 метровим MS Live сильно напрягает при несравнимых возможностях

DevilDevil
> или редактор видеоизображений
только нативные языки

DevilDevil
> или игра с некст-ген графикой
сам наверное понимаешь что тут у С++ в ближайшие лет 5-10 конкурентов не будет

#2732
18:08, 1 июня 2011

Super_inoy
> не нужно если прога после этого убивается(в вин NT+).
не люблю говнокод и говнокодеров

kipar
+1

SNVampyre
> А что-нибудь близкое к реальным задачам?

procedure TForm1.FillMapBitmap(const PathMapResult: PPathMapResult; const jpg_file_name: string = '');
var
  TileNum: byte;
  Hexagonal: boolean;
  BitmapMask: TBitmap;
  i, j: integer;
  P: TPoint;
  Canvas: TCanvas;
  PathPoint: PPoint;
  JI: TJpegImage;
  used_tiles: array[0..TILES_COUNT-1] of boolean;


  procedure DrawBitmap(Bitmap: TBitmap);
  begin
    if (BitmapMask = nil) then
    begin
      Canvas.Draw(P.X, P.Y, Bitmap);
    end else
    begin
      MaskBlt(Canvas.Handle, P.X, P.Y, FULL_TILE_SIZE, FULL_TILE_SIZE,
              Bitmap.Canvas.Handle, 0, 0,
              BitmapMask.Handle, 0, 0, MakeRop4($00AA0029, SrcCopy));
    end;
  end;

  procedure DrawTile(X, Y: integer; TileNum: byte {255 - excluded});
  begin
    P := MapToScreen(X, Y, false);
    if (P.X >= MAP_WIDTH*TILE_SIZE - TILE_SIZE div 2) or
       (P.Y >= MAP_HEIGHT*TILE_SIZE - TILE_SIZE div 2) then exit;


    // без тайла
    if (TileNum = 255) or (not used_tiles[TileNum]) then
    begin
      if (Hexagonal) then
      begin
        if (TileNum = 255) then DrawBitmap(GreyCell)
        else DrawBitmap(WhiteCell);
      end else
      begin
        if (TileNum = 255) then Canvas.Brush.Color := clGray
        else Canvas.Brush.Color := clWhite;

        Canvas.FillRect(Bounds(P.X, P.Y, TILE_SIZE, TILE_SIZE));
      end;

      exit;
    end;

    // с тайлом
    DrawBitmap(TileBitmaps[TileNum*3 + 1 + ord(Hexagonal)]);
  end;

  procedure LineTo(const offsX, offsY: integer);
  begin
    inc(P.X, offsX);
    inc(P.Y, offsY);
    Canvas.LineTo(P.X, P.Y);    
  end;

begin
  // анализ доступности тайлов
  // какие-то тайлы могут восприниматься как препятствия
  for TileNum := 0 to TILES_COUNT-1 do
  used_tiles[TileNum] := (not UseWeights) or (cpfWeightGet(HWeights, TileNum) >= 0.1);


  // подготовка данных для гексагонального режима
  BitmapMask := nil;
  Hexagonal := (MapMode in [mmHexagonal45, mmHexagonal60]);
  if (Hexagonal) then
  begin
    if (MapMode = mmHexagonal45) then BitmapMask := MaskHex45
    else BitmapMask := MaskHex60;

  end;

  // очистить
  Canvas := MapBitmap.Canvas;
  Canvas.Brush.Style := bsSolid;
  Canvas.Brush.Color := clBlack;
  Canvas.FillRect(Rect(0, 0, MapBitmap.Width, MapBitmap.Height));

  // прорисовать тайлы
  for i := 0 to MAP_WIDTH-1 do
  for j := 0 to MAP_HEIGHT-1 do
  begin
    TileNum := TILE_MAP[j, i];
    if (TileNum < TILES_COUNT) then DrawTile(i, j, TileNum);
  end;

  // ExcludedPoints
  for i := 0 to Length(ExcludedPoints)-1 do
  with ExcludedPoints[i] do
  DrawTile(X, Y, 255);


  // линии
  Canvas.Pen.Width := 1;
  if (not Hexagonal) then
  begin
    Canvas.Pen.Color := clGray;

    for i := 1 to MAP_WIDTH-1 do
    begin
      Canvas.MoveTo(i*TILE_SIZE, 0);
      Canvas.LineTo(i*TILE_SIZE, MAP_HEIGHT*TILE_SIZE);
    end;
    for j := 1 to MAP_HEIGHT-1 do
    begin
      Canvas.MoveTo(0, j*TILE_SIZE);
      Canvas.LineTo(MAP_WIDTH*TILE_SIZE, j*TILE_SIZE);
    end;
  end else
  for i := 0 to MAP_WIDTH-1 do
  for j := 0 to MAP_HEIGHT-1 do
  begin
    // прорисовка каждого тайла в хексогональных полях
    Canvas.Pen.Color := TColor($B0B0B0);    
    P := MapToScreen(i, j, false);

    // стартовая точка
    if (MapMode = mmHexagonal45) then inc(P.X, TILE_SIZE div 3)
    else inc(P.X, TILE_SIZE div 2);
    Canvas.MoveTo(P.X, P.Y);

    // прорисовка 6 линий
    if (MapMode = mmHexagonal45) then
    begin
      LineTo((TILE_SIZE div 3)*2, 0);
      LineTo(TILE_SIZE div 3, TILE_SIZE div 2);
      LineTo(-TILE_SIZE div 3, TILE_SIZE div 2);
      LineTo(-(TILE_SIZE div 3)*2, 0);
      LineTo(-TILE_SIZE div 3, -TILE_SIZE div 2);
      LineTo(TILE_SIZE div 3, -TILE_SIZE div 2);
    end else
    begin
      LineTo(TILE_SIZE div 2, TILE_SIZE div 3);
      LineTo(0, (TILE_SIZE div 3)*2);
      LineTo(-TILE_SIZE div 2, TILE_SIZE div 3);
      LineTo(-TILE_SIZE div 2, -TILE_SIZE div 3);
      LineTo(0, -(TILE_SIZE div 3)*2);
      LineTo(TILE_SIZE div 2, -TILE_SIZE div 3);            
    end;
  end; 

  // путь
  if (PathMapResult <> nil) and (PathMapResult.points_count <> 1) then
  begin
    PathPoint := PathMapResult.points;
    Canvas.Pen.Width := 2;
    Canvas.Pen.Color := clRed;
    with MapToScreen(PathPoint.X, PathPoint.Y) do Canvas.MoveTo(X, Y);

    for i := 1 to PathMapResult.points_count-1 do
    begin
      inc(PathPoint);
      with MapToScreen(PathPoint.X, PathPoint.Y) do Canvas.LineTo(X, Y);
    end;
  end;

  // StartPoint, FinishPoint
  Canvas.Brush.Style := bsSolid;
  Canvas.Pen.Width := 2;
  Canvas.Brush.Color := clBlue;
  if (MousePressed = mbLeft) and (CursorPoint.X = StartPoint.X) and (CursorPoint.Y = StartPoint.Y) then Canvas.Brush.Color := clAqua;
  Canvas.Pen.Color := clRed;
  P := MapToScreen(StartPoint.X, StartPoint.Y);
  Canvas.Ellipse(Bounds(P.X -9, P.Y -9, 20, 20));
  Canvas.Pen.Width := 2;
  Canvas.Brush.Color := clRed;
  if (MousePressed = mbLeft) and (CursorPoint.X = FinishPoint.X) and (CursorPoint.Y = FinishPoint.Y) then Canvas.Brush.Color := clFuchsia;
  Canvas.Pen.Color := clBlue;
  P := MapToScreen(FinishPoint.X, FinishPoint.Y);
  Canvas.Ellipse(Bounds(P.X -9, P.Y -9, 20, 20));

  // save
  if (jpg_file_name <> '') then
  begin
    JI := TJpegImage.Create;
    JI.Assign(MapBitmap);
      JI.SaveToFile(jpg_file_name);
    JI.Free;
  end; 
end;
#2734
18:13, 1 июня 2011

kipar
> В с++ нету свойств.
public

> созданием объектов по имени класса
Это есть

> и прочими радостями
Например?

> Нету GC.
Возможно. Правда ни разу не сталкивался с ситуациями где она нужна.

> Нету инициализации строк символами.
Это как?

> Нету нормальной модульности
Поясни.

> Его синтаксис чудовищен
Ну, сложнее чем ассемблер, да. Однако, посмотри на другие языки, и поймёшь, что С++ единственный нормальный по синтаксису.

> слово auto
Никогда не использовал, кстати. Да и в чужом коде не встречал.

#2735
18:15, 1 июня 2011

DevilDevil
> не люблю говнокод и говнокодеров
...
>[code]
> JI := TJpegImage.Create;
> JI.Assign(MapBitmap);
> JI.SaveToFile(jpg_file_name);
> JI.Free;
>[/code]
ты себя не любишь?

#2736
18:15, 1 июня 2011

DevilDevil
> не люблю говнокод и говнокодеров
А дальше выложил трудноразбираемый говнокод, который по нормальному пишется парой строк.

#2737
18:17, 1 июня 2011

CD
чем не понравилось ?

SNVampyre
на С++ ты такое напишешь, тратя в 2-3 раза больше строк кода
и в 10 раз больше времени на отладку

#2738
18:19, 1 июня 2011

DevilDevil
> List.LoadFormFile('files.txt');
> List.Sorted := true;
> List.Add('ya-svoboden.mp3');
ЧТО ЭТО? о_О

#2739
18:22, 1 июня 2011

DevilDevil
> чем не понравилось ?
в случае исключения в SaveToFile имеем утечку памяти

#2740
18:24, 1 июня 2011

DevilDevil
> на С++ ты такое напишешь, тратя в 2-3 раза больше строк кода
> и в 10 раз больше времени на отладку
На своём движке в 10 строк напишу. Только не понятно зачем это. Где это используется? В едакторе материалов или в твоей версии квипа?

#2741
18:24, 1 июня 2011

CD
я как-то не привык, что стабильный Delphi-код даёт эксепшн при сохранении jpg файла 600x400 )

#2742
18:25, 1 июня 2011

SNVampyre
> На своём движке в 10 строк напишу. Только не понятно зачем это. Где это
> используется? В едакторе материалов или в твоей версии квипа?
бла-бла-бла

#2743
18:27, 1 июня 2011

DevilDevil
> я как-то не привык, что стабильный Delphi-код даёт эксепшн при сохранении jpg
> файла 600x400 )
а если мето на винте закончилось? или флешку достали?

#2744
18:36, 1 июня 2011

SNVampyre
> Никогда не использовал, кстати. Да и в чужом коде не встречал.
В Pascal: for p in shapes do p.draw;
В С++ -
for(std::list<Shape*>::const_iterator p=shapes.begin(), e=shapes.end(); p!=e; ++p) {
  (*p)->draw(window);
}

> public
А если потом потребовалось добавить какую-то логику, а не неуправляемый доступ к переменным?

> Это как?
std::string str = "abcde";

Страницы: 1180 181 182 183 184 185 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.