![]() |
Anfänger probiert kniffel und kommt nicht weiter
ich probiere kniffel und habe ein problem.
hier mein quelltext
Delphi-Quellcode:
wie ihr sehen könnt habe ich 5 würfel (logisch bei kniffel...), w: array[1..5] of integer,
unit unit_spiel;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TFormSpiel = class(TForm) ImageWEins: TImage; ImageWZwei: TImage; ImageWDrei: TImage; ImageWVier: TImage; ImageWFuenf: TImage; ButtonWuerfel: TButton; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure ButtonWuerfelClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; const Bild1 = 'eins.bmp'; Bild2 = 'zwei.bmp'; Bild3 = 'drei.bmp'; Bild4 = 'vier.bmp'; Bild5 = 'fuenf.bmp'; Bild6 = 'sechs.bmp'; var FormSpiel: TFormSpiel; w: array[1..5] of integer; i, j, k, l, m: integer; implementation {$R *.dfm} procedure TFormSpiel.FormCreate(Sender: TObject); begin randomize; end; procedure TFormSpiel.ButtonWuerfelClick(Sender: TObject); begin w[1] := random(5) + 1; w[2] := random(5) + 1; w[3] := random(5) + 1; w[4] := random(5) + 1; w[5] := random(5) + 1; //Bilder zuweisen ANFANG case w[1] of 1: ImageWEins.Picture.LoadFromFile(Bild1); 2: ImageWEins.Picture.LoadFromFile(Bild2); 3: ImageWEins.Picture.LoadFromFile(Bild3); 4: ImageWEins.Picture.LoadFromFile(Bild4); 5: ImageWEins.Picture.LoadFromFile(Bild5); 6: ImageWEins.Picture.LoadFromFile(Bild6); end; case W[2] of 1: ImageWZwei.Picture.LoadFromFile(Bild1); 2: ImageWZwei.Picture.LoadFromFile(Bild2); 3: ImageWZwei.Picture.LoadFromFile(Bild3); 4: ImageWZwei.Picture.LoadFromFile(Bild4); 5: ImageWZwei.Picture.LoadFromFile(Bild5); 6: ImageWZwei.Picture.LoadFromFile(Bild6); end; case W[3] of 1: ImageWDrei.Picture.LoadFromFile(Bild1); 2: ImageWDrei.Picture.LoadFromFile(Bild2); 3: ImageWDrei.Picture.LoadFromFile(Bild3); 4: ImageWDrei.Picture.LoadFromFile(Bild4); 5: ImageWDrei.Picture.LoadFromFile(Bild5); 6: ImageWDrei.Picture.LoadFromFile(Bild6); end; case W[4] of 1: ImageWFuenf.Picture.LoadFromFile(Bild1); 2: ImageWFuenf.Picture.LoadFromFile(Bild2); 3: ImageWFuenf.Picture.LoadFromFile(Bild3); 4: ImageWFuenf.Picture.LoadFromFile(Bild4); 5: ImageWFuenf.Picture.LoadFromFile(Bild5); 6: ImageWFuenf.Picture.LoadFromFile(Bild6); end; case W[5] of 1: ImageWVier.Picture.LoadFromFile(Bild1); 2: ImageWVier.Picture.LoadFromFile(Bild2); 3: ImageWVier.Picture.LoadFromFile(Bild3); 4: ImageWVier.Picture.LoadFromFile(Bild4); 5: ImageWVier.Picture.LoadFromFile(Bild5); 6: ImageWVier.Picture.LoadFromFile(Bild6); end; //Bilder zuweisen ENDE end; end. lade über case-Abfragen die entsprechenden bilder. im späteren verlauf (noch nicht programmiert) soll man über radiobuttons, z.b. 4er pasch oder ähnliches auswählen können. dazu müsste ich die 5 variablen nach größe sortieren. erster anlauf: online recherchieren... wie gesagt, ich bin anfänger und werde aus bubblesort u.ä. nicht schlau. nun meine bitte: könnte mir einer die nötigen programmzeilen schreiben, die auf meinen quelltext zugeschnitten sind und mir unter umständen auch noch möglichst einfach erklären? ich wäre für eine solche hilfestellung sehr dankbar, da ich das restliche programm im kopf schon genau überdacht habe und es nur bei dieser kleinigkeit hängt. in dankbarer vorraussicht matze |
Re: Anfänger probiert kniffel und kommt nicht weiter
Hallo Matze,
ich würde neben jeden Würfel eine CHECKBOX platzieren mit der ich festlege ob der Würfel so liegen bleiben soll oder ob mit Ihm neu gewürfelt wird. Wenn man dann noch ein StrinGrid mit den möglichen Punkten 1er 2er …Full House .. kl.Strasse etc anlegt kann man durch auswahl der Cell gleich die Werte eintragen lassen Eine andere Möglichkeit: das ganze in eine Stringlist einzutragen. Diese führt dann mit der Methode sort eine Sortierung durch
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var MyList: Tstrings; //!!!! begin MyList := TStringList.Create; try MyList.Add(inttostr(w[1])); // Würfel 1 MyList.Add(inttostr(w[2])); // Würfel 2 MyList.Add(inttostr(w[3])); // Würfel 3 MyList.Add(inttostr(w[4])); // Würfel 4 MyList.Add(inttostr(w[5])); // Würfel 5 MyList.Sort; werte werden sortieert finally MyList.Free; end; end; |
Re: Anfänger probiert kniffel und kommt nicht weiter
oder halt BubbleSort.
Füge die Procedure nach {$R *.dfm} ein: (oder besser vor der Methode, die Bubblesort nutzt oder noch besser in eine eigene Tools-Unit)
Delphi-Quellcode:
Sortieren kannst Du dann, nachdem Du die Random-Werte zugewiesen hast:
{$R *.dfm} (* Die Zeile in Deinem Code suchen *)
procedure BubbleSortWuerfel(var A : array of Integer); var i,j,t : Integer; begin for i := Low(A) to High(A) do for j := Low(A) to High(A) - 1 do if A[j] > A[j + 1] then begin t := A[j]; A[j] := A[j+1]; A[j+1] := t; end; end;
Delphi-Quellcode:
btw: Ein Würfel hat 6 Seiten ;)
BubbleSortWuerfel(w);
|
Re: Anfänger probiert kniffel und kommt nicht weiter
Kleine Frage am Rande...
Das Array für die Würfel wurde so deklariert:
Delphi-Quellcode:
Wenn man aber drauf zugreifen will, geht das doch nur über die Indizes [0..4], oder irre ich mich da gewalitg? :gruebel:
w: array[1..5] of integer;
EDIT : Alles klar! Danke für den Hinweis. (Arbeite selbst nur mit dynamischen Arrays) PS. schreib doch die zuweisung der Werte als Schleife... Erspart dir Arbeit... 8)
Delphi-Quellcode:
LG Marco
// für diesen fall ausreichend;
var i : byte; . . . for i := low(w) to high(w) do w[i] := random(5) + 1; |
Re: Anfänger probiert kniffel und kommt nicht weiter
Da irrst Du Dich, bei statischen Arrays können die Indizes selbst vergeben werden. Aus Sicherheitsgründen könnte man aber über Low(Array) und High(Array) zugreifen und muss sich dann keine weiteren Gedanken machen.
|
Re: Anfänger probiert kniffel und kommt nicht weiter
Zitat:
|
Re: Anfänger probiert kniffel und kommt nicht weiter
Zitat:
|
Re: Anfänger probiert kniffel und kommt nicht weiter
Zitat:
;) Sherlock |
Re: Anfänger probiert kniffel und kommt nicht weiter
[quote="jesus.or.christ"]
Delphi-Quellcode:
Ich denke hier kommt der Einwand her, den einige formuliert haben. Ich hab mal ein kleines Programm geschrieben und diese Zeilen getestet. Hatte ebenso wie einige Vorredner das Gefühlt, dass niemals eine 6 gewürfelt wird und dies ist auch wirklich der Fall.
...
procedure TFormSpiel.ButtonWuerfelClick(Sender: TObject); begin w[1] := random(5) + 1; w[2] := random(5) + 1; w[3] := random(5) + 1; w[4] := random(5) + 1; w[5] := random(5) + 1; ... end; end. Hier der Code den ich genommen hab:
Delphi-Quellcode:
Ich weiß, ist ziemlich simpel aber es wurde bei den 100 Testwürfen nicht ein mal eine 6 gewürfelt. So wie einige und ich richtig vermutet haben. Um auch 6 zu wirfeln muss das wie folgt heißen:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin randomize; Memo1.Clear; for i:= 1 to 100 do Memo1.Lines.Add(inttostr(random(5)+1)); end; end.
Delphi-Quellcode:
MfG
w[2] := random(6) + 1;
BAMatze |
Re: Anfänger probiert kniffel und kommt nicht weiter
Genau, erst Random(6) gibt 6 Zahlen aus (allerdings beginnend bei 0), weshalb das +1 weiterhin korrekt ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz