hallo
Wenns geht, packe bitte das nächste mal mit ZIP, Ace hat auch nich jeder.
also gehen tuts erstemal. aber nimms mir nicht übel - du hast programmiertechnich noch einige Lücken.
Grafisch wären sicherlich noch ein paar Änderungen nötig (das gescannte Image sind nich ganz so gut aus, die Würfel werden nur aus Zahlen dargestellt. Auch sehe ich nirgends, wann/welcher Spieler drann ist
dein Code umfaßt sage und schreibe über 2900 Zeilen

. das sind viel zu viele. vor allem weil in vielen Procs immer wieder das selbe gamacht wird.
Auch wirst du später nie wieder durchsehen, wenn du deinen Componenten keine sinnvollen Namen gibst, Weißt du auf anhieb deine 61 Labels und 49 Buttons ?
Du solltest dich trotzdem nochmal mit ein paar Sachen auseinandersetzen: insbesondere Schleifen, Arrays (siehe onlinehilfe und Tutorialseiten, z.B. auf delphi-source
außerdem verwendest du überall real zahlen, obwohl es eigentlcih bloß integer sind
Möglichkeiten, dein Programm anders gestalten gibts viele.
insbesondere mit der Eigenschaft Tag von Buttons (da ist ein Beipiel in der Hilfe), da kann man sich viele Schreibarbeiten ersparen,
z.B. beim übertragen könntest du z.B. den Add-Buttons tags verwenden und beim Klick den Tag des senders abfragen und dann dass entsprechende Label mit der anzeige betrauen oder auch dort ein Stringgrid verwenden oder oder ...
hier ein kurzes Beispiel, wie du z.B. die Sache ein wenig eleganter - wenn du arrays und Schleifen verwendest lösen kannst.
gugg dir insbesondere das testen, wird zwar nicht alles getestet, aber so viele Zeilen wie bei dir sind gar nicht nötig.
der code ist zwar sicherlich nicht das non+ultra, ich hab versucht es sehr einfach zu halten, versuch mal, ob du klar kommst
pack auf dein neues Formular 3 Buttons, 1Stringgrid, 1Label, benenn sie entsprechend meiner Schreibweise und weiß im Objektinspektor beim Onklick-ereignis die jeweilige Clickprocedure zu.
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: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 178:
| unit Unit3;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type TForm3 = class(TForm) ButtonNeuWuerfeln: TButton; StringGrid_Wuerfel: TStringGrid; ButtonTesten: TButton; Label1: TLabel; ButtonErneutWuerfeln: TButton; procedure ButtonNeuWuerfelnClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure StringGrid_WuerfelClick(Sender: TObject); procedure ButtonTestenClick(Sender: TObject); procedure ButtonErneutWuerfelnClick(Sender: TObject); private Wuerfel, RausgelegteWuerfel: array [1..5] of integer; Procedure WuerfelAnzeigen; Function WuerfelAnzahl(W:integer):integer; Function WuerfelPunkte(w:integer):integer; public end;
var Form3: TForm3;
implementation
{$R *.dfm} procedure TForm3.FormCreate(Sender: TObject); Var i:integer; begin randomize; for i:=1 to 5 do Wuerfel[i]:=0; with StringGrid_Wuerfel do begin FixedCols := 1; FixedRows := 1; RowCount:=2; ColCount := 6; cells[0,1]:='rausgelegt'; DefaultColWidth := 30; ColWidths[0]:=60; end; end;
procedure TForm3.ButtonNeuWuerfelnClick(Sender: TObject); Var I:integer; begin for i:=1 to 5 do begin Wuerfel[i]:=random(6)+1; RausgelegteWuerfel[i]:=0; end; WuerfelAnzeigen; end;
procedure TForm3.ButtonErneutWuerfelnClick(Sender: TObject); Var I:integer; begin for i:=1 to 5 do if Wuerfel[i]<>0 then begin Wuerfel[i]:=random(6)+1; RausgelegteWuerfel[i]:=0; end; WuerfelAnzeigen; end;
procedure TForm3.StringGrid_WuerfelClick(Sender: TObject); begin with StringGrid_Wuerfel do begin if col in [1..5] then begin if Wuerfel[col]<>0 then begin RausgelegteWuerfel[col]:=Wuerfel[col]; Wuerfel[col]:=0; end; end; end; WuerfelAnzeigen; end;
procedure TForm3.ButtonTestenClick(Sender: TObject); Var W,erg,i,i2:integer; ok:boolean; begin Label1.Caption := 'nix'; for W:=1 to 6 do begin erg := WuerfelAnzahl(W); if erg>=3 then begin label1.Caption:='Würfel '+ inttostr(W) +' wurde '+inttostr(erg)+' x gewürfelt - Punkte: '+inttostr(WuerfelPunkte(W)); break; end; end;
if (WuerfelAnzahl(1)=1) and (WuerfelAnzahl(2)=1) and (WuerfelAnzahl(3)=1) and (WuerfelAnzahl(4)=1) and (WuerfelAnzahl(5)=1) then label1.Caption := 'kleine Straße';
ok:=true; for i:=2 to 6 do if WuerfelAnzahl(i)<>1 then begin ok:=false; break; end; if ok then label1.Caption := 'große Straße';
ok:=false; for i:=1 to 6 do for i2:=1 to 6 do begin if (WuerfelAnzahl(i)=3) and (WuerfelAnzahl(i2)=2) then ok :=true; end; if ok then Label1.Caption := 'Fullhouse'; end;
procedure TForm3.WuerfelAnzeigen; Var i:integer; begin with StringGrid_Wuerfel do for i:=1 to 5 do begin if Wuerfel[i]<>0 then Cells[i,0]:=inttostr(Wuerfel[i]) else Cells[i,0]:=''; if RausgelegteWuerfel[i]<>0 then Cells[i,1]:=inttostr(RausgelegteWuerfel[i]) else Cells[i,1]:=''; end; end;
function TForm3.WuerfelAnzahl(W: integer): integer; Var i:integer; begin result:=0; for i:=1 to 5 do if RausgelegteWuerfel[i]=W then inc(result); end;
function TForm3.WuerfelPunkte(w: integer): integer; Var i:integer; begin result:=0; for i:=1 to 5 do if RausgelegteWuerfel[i]=W then inc(result,W); end;
end. |
Mfg Frank