Entwickler-Ecke
Open Source Projekte - Str8ts
Mathematiker - Mi 11.01.12 23:49
Titel: Str8ts
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.
Narses - 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
jaenicke - Do 12.01.12 08: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 [
http://www.delphi-treff.de/object-pascal/delphi-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:
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]=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:
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] = 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 - 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 - Fr 13.01.12 13:11
Bin ich blind? Ich sehe weder Quelltext noch download?! :gruebel:
Edit: Jetzt ist er da...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!