Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kniffel (https://www.delphipraxis.net/5868-kniffel.html)

MoDHellwalker 21. Jun 2003 18:34


Kniffel
 
Ich will kniffel programmieren. ich hab auch schon fast alles fertig. außer dei große und die kleine straße. die würfel sind TLabels. wie schauff ich es jetzt dass er erkennt wann es ne kleine straße is??? (ich denk es weiß jeder was ne kleine oder auch große straße bei kniffel is)
thx schon mal
mfg hellwalker

S - tefano 21. Jun 2003 19:59

Hi,

Weiß es jetz nich ganz auswendig, aber ne kleine Straße sind doch 4 Würfel deren Zahlen immer um 1 größer sind als der vorherige Würfel, oder?
Dann gibts ja drei Möglichkeiten für ne kleine Straße.
1-4, 2-5, 3-6. Oder?
Heißt, dass 3 und 4 schonmal in jeder kleinen Straße vorkommen (aber wie gesagt, bin mir nich mehr ganz sicher).
Musst also (wenn du die Würfelzahlen ausschließlich auf Labels anzeigst) 4 verschiedene If- Abfragen machen.
Einmal musst du abfragen, ob zwei der Labels die Zahlen 3 und 4 anzeigen. Wenn das gegeben ist, müssen entweder noch die Zahlen 1 und 2, 2 und 5, oder 5 und 6 angezeigt werden.
Das müsstest du dann alles mit If- Abfragen machen.
Was anderes außer If- Abfragen würd mir jetz grad auch nich einfallen. Du könntest dir natürlich sonen Typen wie TShiftState machen, den du dann z.B. TZahl nennst und dann strukturell so aufbaust wie Shiftstate.
Dann könntest du Abfragen machen wie

Delphi-Quellcode:
if (sechs in Zahl) and (fuenf in Zahl) then
Isn Bissken kürzer als die LabelCaptions abzufragen und miteinander zu vergleichen.
Und mit der großen Straße würds dann ja ganz ähnlich ablaufen.

Bis dann,

S - tefano

MoDHellwalker 21. Jun 2003 21:03

des stimmt schon
aber wie mach ich es dass er praktisch abfragt ob in irgendeinem der 5 label ne 3 oder 4 is? oder muss ich da für jedes label ne neue if abfrage machen??? wie müsste ich es schreiben dass er schaut ob in label1, label2,label3, label4 oder label5 ne 3 oder 4 is? könnte mir einer vielleicht den code für diese zeile schreiben???

Daniel B 21. Jun 2003 21:05

Hallo,

wenn die Labels noch "durchnummeriert" sind, dann kommst Du da mit FindComponent weiter. Ansonsten mit if's und " if StrToint(Label1.Caption) = 3 then ".

Grüsse, Daniel :hi:

MoDHellwalker 21. Jun 2003 21:08

und wie funktioniert findcomponent??? (sry aba ich hab da echt keine ahnung)

Daniel B 21. Jun 2003 21:13

Hallo,

das Du noch nicht weisst wie es geht ist ja nicht schlimm, aber das Du hier fertigen Code erwartest schon! Es gibt hier eine Suche, FindComponent wurde schon sehr fot behandelt. Ausserdem hat Deine Tastatur dir F1-Taste, damit erreicht man die OH von Delphi.

Grüsse, Daniel :hi:

braingrenade 21. Jun 2003 22:33

Moin !

Ich könnte mir vorstellen das das mit sets funktionieren würde !

S - tefano 21. Jun 2003 23:18

Hi,

Achja, so hieß das.
Wieder am Beispiel von TShiftState (oben erwähnt):

Delphi-Quellcode:
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Das sagt die Delphi- Hilfe dazu. Sowas könntest du dir doch dann auch mit deinen Zahlen machen. Prüfen kannstes dann wie oben beschrieben.
Allerdings... was ist wenn eine Zahl mehrmals da ist?
Dann bräuchte man von jeder Zahl 6 durchnummerierte Elemente in dieser Struktur.
Also z.B. fuenf1, fuenf2, fuenf3, fuenf4, fuenf5 und fuenf6.
Wenn du dann deine Zahlen ermittelt hast machst du diese dann von 1 bis 6 voll.
Also wenn z.B. der dritte und der fünfte Würfel ne Zwei zeigen, dann musst du zwei1 und zwei2 in das set schreiben.
Dementsprechend müsste dann die Prüfung auch etwas abgewandelt werden...
In ein Set schreiben kannst du (wenn ich mich nicht irre) so:

Delphi-Quellcode:
//Am Beispiel der Buttons von Messagedlg
//Erstmal die Deklaration des Sets
type
  TMsgDlgBtn = (mbNone, mbOk, mbCancel, mbYes, mbNo, mbAbort, mbRetry, mbIgnore);
  TMsgDlgButtons = set of TMsgDlgBtn;

//so, jetz das Set "vollmachen"
procedure SchreibZahlenInSet;
var
  sett: TMsgDlgButtons;
begin
  //am Beispiel mit den zwei Zweien oben; und nochn paar andere Zahlen rein
  sett:= [zwei1, zwei2, eins1, drei1, drei2, fuenf1];
  //Gucken ob ne 6 im Set is
  if (sechs1 in sett) then
    showmessage('juhu')
  else
    showmessage('Gerade erst das Set gesetzt und jetz nach ner 6 suchen?! Tses...');
end;
Bin mir nich ganz sicher ob es so richtig ist, aber so hab ichs in Erinnerung.
Und auf diese Weise musst du halt dein Set nach dem Generieren der Zufallszahlen mit Werten füllen, und dann später auf Zahlen abfragen. Das is ja eigentlich nur Schreibarbeit.

Bis dann,

S - tefano


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:31 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