Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 11.01.12 22: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 06:22, insgesamt 3-mal bearbeitet
Für diesen Beitrag haben gedankt: Anika, kolibri95, lenamarkert
|
|
Narses
Beiträge: 10181
Erhaltene Danke: 1254
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.01.12 07:26
Moin und in der EE!
Also für einen "ersten Versuch" habe ich schon erheblich viel schlechteres gesehen!
Kleiner Tipp: deine Code-Formatierung ist allerdings schon etwas überarbeitungsfähig. Schau dich mal nach einem Styleguide um, wenn du da keine Ahnung hast, wie man das machen könnte.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
jaenicke
Beiträge: 19272
Erhaltene Danke: 1740
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 12.01.12 07:30
Mathematiker hat folgendes geschrieben : | 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.
Mathematiker hat folgendes geschrieben : | 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.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| if a then b else c; 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: 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]=0) or (lfeld2[i+1,j+1]=2) then 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: 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] = 0) or (lfeld2[i + 1, j + 1] = 2) then 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] = 0) then 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
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 12.01.12 13:28
Besten Dank für die ersten Hinweise.
Ich werde erst einmal den Quelltext umformatieren.
Beste Grüße
Mathematiker
|
|
baka0815
Beiträge: 489
Erhaltene Danke: 14
Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
|
Verfasst: Fr 13.01.12 12:11
Bin ich blind? Ich sehe weder Quelltext noch download?!
Edit: Jetzt ist er da...
|
|
|