Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#20

Re: HQ9+fuck Interpreter

  Alt 22. Jan 2010, 14:13
Also das BF-Programm erzeugt ein Bild in Form von Text (A-Z),
dazu hab ich mir ein Programm geschrieben (in Delphi), welches diesen Text in ein Bitmap übersetzt.
- A bis Z als Intensität und das Leerzeichen, bzw. alles Andere als ganz Schwarz.

Beitrag #11
> mandelbrot.txt = BF-Programm
> Mandelbrot - Text2Image.exe = der Converter

Der Converter ist auch nix Besonderes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  i, i2: Integer;
  S: String;
begin
  Memo1.Hide; Button1.Hide; CheckBox1.Hide;
  SL := TStringList.Create;
  SL.Text := Memo1.Text;
  i2 := 0;
  for i := SL.Count - 1 downto 0 do
    if Trim(SL[i]) = 'then SL.Delete(i)
    else i2 := Max(Length(Trim(SL[i])), i2);
  with Image1.Picture.Bitmap do begin
    Width := i2;
    Height := SL.Count * 2;
    Canvas.Brush.Color := clBlack;
    Canvas.FillRect(Rect(0, 0, Width, Height));
    for i := Height div 2 - 1 downto 0 do begin
      S := SL[i];
      for i2 := Width - 1 downto 0 do
        if (i2 < Length(S)) and (S[i2 + 1] in ['A'..'Z']) then begin
          Canvas.Pixels[i2, i * 2] := (Ord(S[i2 + 1]) - Ord('@')) * 255 div 26 * $010101;
          Canvas.Pixels[i2, i * 2 + 1] := Canvas.Pixels[i2, i * 2];
        end;
    end;
    if CheckBox1.Checked then SaveToFile(ChangeFileExt(ParamStr(0), '.bmp'));
  end;
  SL.Free;
end;

Aber theoretisch wäre es möglich das Bitmap auch direkt in BF zu erzeugen und abzuspeichern.


Dieses BF-Programm erzeugt z.B. in der Standardausgabe ein Datei, welche man direkt als .COM abspeichern lassen sollte.
Diese .COM wiederrum ist ein 8-Bit-BF-Interpreter, mit welchem man ein BF-Programm "abspielen" kann.

Quasi das Henne-Ei-Problem, denn was war nun zuerst da?
> das BF-Programm, welches die .COM erzeugt
> oder die .COM, welche das BF-Programm verarbeiten kann



Aber Einiges kann ich schonmal sagen:
- ein BF-Programm zu schreiben ist relativ leicht, wenn man einmal verstanden hat, wie's geht
- dabei hilfreich ist auch der geringe Sprachumfang, von nur 6 Befehlen
- aber die Speicherverwaltung ist ein Akt
- man muß sich genau überlegen was man wie wo ablegt, um
> möglichst geringe Wege und und damit auch wenig/übersichtlichen Code zu erzeugen

Ein kleiner Fehler am Anfang (z.B. eine Variable/Speicherstelle vergessen und schon darf man womöglich das halbe Programm umschreiben.

Also ich kann es jedem nur empfehlen ... man lernt ganz neue Denkweisen, welche bestimmt auch in Delphi gut anzuwenden sind.
Angehängte Dateien
Dateityp: txt bf8_423.txt (2,3 KB, 4x aufgerufen)
Dateityp: txt bf8-interpreter_source_488.txt (27,6 KB, 2x aufgerufen)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat