Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 11.01.12 23:49 
Hallo Delphi-Fans,
hier ist mein erster Vorschlag für ein kleines Spiel.
Seit bitte nett zu mir und zerpflückt meinen Quelltext nicht gar zu sehr. Es ist hier wirklich mein erster Versuch.

Beste Grüße
Mathematiker

Rev 1/2: diverse Änderungen durchgeführt.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Mathematiker am Di 30.09.14 07:22, insgesamt 3-mal bearbeitet

Für diesen Beitrag haben gedankt: Anika, kolibri95, lenamarkert
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.01.12 08:26 
Moin und :welcome: in der EE!

Also für einen "ersten Versuch" habe ich schon erheblich viel schlechteres gesehen! :shock: :zustimm:

Kleiner Tipp: deine Code-Formatierung ist allerdings schon etwas überarbeitungsfähig. :nixweiss: Schau dich mal nach einem Styleguide um, wenn du da keine Ahnung hast, wie man das machen könnte. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 12.01.12 08:30 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
hier ist mein erster Vorschlag für ein kleines Spiel.
Das Prinzip ähnelt ja Sudoku. Die Umsetzung ist ein wenig umständlich von der Bedienung her, funktioniert aber soweit gut.
Schlecht:
Du hast Position des Formulars auf poDesktopCenter statt auf poScreenCenter bewirkt. Dadurch erscheint das Fenster bei z.B. zwei Bildschirmen genau auf der Kante dazwischen, da sich der Desktop über beide erstreckt. Deshalb: poScreenCenter ist sinnvoller.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Seit bitte nett zu mir und zerpflückt meinen Quelltext nicht gar zu sehr.
So schlecht ist der gar nicht. ;-)
Deine Formatierung ist allerdings, sorry, grauenhaft. Aber das sieht wohl bei jedem anfangs ähnlich schlecht aus, da man meist erst später erkennt wie wichtig eine gute Formatierung ist.

Ein paar Tipps (der Styleguide wurde ja schon genannt):
  • Erstens gibt es auch Großbuchstaben. Die helfen beim Verständnis enorm. Denn inttostr kann man z.B. schlechter direkt verstehen als IntToStr.
  • Zweitens solltest du dich am Prinzip orientieren nur einen Befehl in eine Zeile zu schreiben.
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    // Also nicht:
      if a then b
        else c;
    // sondern
      if a then
        b
      else
        c;
    Denn sonst besteht die Gefahr, dass man Befehle übersieht, weil diese einfach rechts zusätzlich auftauchen und überlesen werden.
  • Drittens solltest du auf with zumindest bei längeren Passagen verzichten. (Und nach Möglichkeit auch auf so lange Codeblöcke.) Denn sonst muss man immer scrollen um herauszufinden worauf sich der aktuelle Befehl denn nun bezieht. (Ich persönlich verwende with wegen der Übersicht und wegen den deutlich eingeschränkten Debugmöglichkeiten gar nicht.)
  • Und viertens ist es keine gute Idee so viele Variablen global zu deklarieren. Wo es nötig ist, gehören die unter private deiner Klasse, also hier deines Formulars. Und wo es nicht nötig ist, gehören die lokal in deine Prozedur.


Alles in allem heißt das für diesen Quelltext:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
  with bitmap.canvas do begin
    font.name:='Verdana';
    for i:=0 to grad-1 do for j:=0 to grad-1 do begin
       brush.color:=clwhite;
       pen.color:=clgray;
               if (lfeld[i+1,j+1]=0or (lfeld2[i+1,j+1]=2then begin
                                          brush.color:=clblack;
                                          font.color:=clwhite;
                                          end else begin
                                          brush.color:=clwhite;
                              if lfeld2[i+1,j+1]=1 then font.color:=clnavy
                                                   else font.color:=clblack;
                                          end;
       rectangle(xoffset+i*fbreite,yoffset+j*fbreite,
                 xoffset+i*fbreite+fbreite+1,yoffset+j*fbreite+fbreite+1);
                  k:=inttostr(lfeld[i+1,j+1]);
              if hilfe then
                if (loesung[i+1,j+1]=lfeld[i+1,j+1]) and (lfeld2[i+1,j+1]=0)
                   then begin brush.color:=clyellow; font.color:=clblack end
                   else brush.style:=bsclear;
                  font.size:=34;
               if lfeld2[i+1,j+1]>0 then begin
                  textout(xoffset+i*fbreite+(fbreite div 2)-(textwidth(k) div 2),
                          yoffset+j*fbreite+(fbreite div 2)-(textheight(k) div 2),k);
                  end else begin
                  if length(lmoeg[i+1,j+1])=1 then begin
                     k:=lmoeg[i+1,j+1];
                     textout(xoffset+i*fbreite+(fbreite div 2)-(textwidth(k) div 2),
                            yoffset+j*fbreite+(fbreite div 2)-(textheight(k) div 2),k);
                     end else begin
                     if lfeld[i+1,j+1]>0 then begin
                     if cb2.checked then begin
                      font.size:=9;
                      for ii:=1 to 9 do begin
würde ich diese Formatierung vorschlagen:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
  MyCanvas := bitmap.Canvas;
  MyCanvas.Font.Name := 'Verdana';
  for i := 0 to grad - 1 do
    for j := 0 to grad - 1 do
    begin
      MyCanvas.Brush.Color := clWhite;
      MyCanvas.Pen.Color := clGray;
      if (lfeld[i + 1, j + 1] = 0or (lfeld2[i + 1, j + 1] = 2then
      begin
        MyCanvas.Brush.Color := clBlack;
        MyCanvas.Font.Color := clWhite;
      end
      else
      begin
        MyCanvas.Brush.Color := clWhite;
        if lfeld2[i + 1, j + 1] = 1 then
          MyCanvas.Font.Color := clNavy
        else
          MyCanvas.Font.Color := clBlack;
      end;
      k := IntToStr(lfeld[i + 1, j + 1]);
      if hilfe then
        if (loesung[i + 1, j + 1] = lfeld[i + 1, j + 1]) and (lfeld2[i + 1, j + 1] = 0then
        begin
          MyCanvas.Brush.Color := clYellow;
          MyCanvas.Font.Color := clBlack
        end
        else
          MyCanvas.Brush.Style := bsClear;
      MyCanvas.Font.Size := 34;
      if lfeld2[i + 1, j + 1] > 0 then
      begin
        MyCanvas.TextOut(xoffset + i * fbreite + (fbreite div 2) - (MyCanvas.TextWidth(k) div 2),
          yoffset + j * fbreite + (fbreite div 2) - (MyCanvas.TextHeight(k) div 2), k);
      end
      else
      begin
        if length(lmoeg[i + 1, j + 1]) = 1 then
        begin
          k := lmoeg[i + 1, j + 1];
          MyCanvas.TextOut(xoffset + i * fbreite + (fbreite div 2) - (MyCanvas.TextWidth(k) div 2),
            yoffset + j * fbreite + (fbreite div 2) - (MyCanvas.TextHeight(k) div 2), k);
        end
        else
        begin
          if lfeld[i + 1, j + 1] > 0 then
          begin
            if CB2.checked then
            begin
              MyCanvas.Font.Size := 9;
              for ii := 1 to 9 do
So streust du Befehle nicht über den ganzen Bildschirm und musst nicht so weit einrücken.
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 12.01.12 14:28 
Besten Dank für die ersten Hinweise.
Ich werde erst einmal den Quelltext umformatieren.
Beste Grüße
Mathematiker
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: Fr 13.01.12 13:11 
Bin ich blind? Ich sehe weder Quelltext noch download?! :gruebel:

Edit: Jetzt ist er da...