![]() |
Re: Zufallszahl ziehen ohne wiederholung
schöner Spaghetti-code :( und massig units...wozu die 3 leeren units (2-4)?
nachdem ich deine projektdatei geöffnet habe, vermute ich, dass die units auch nicht die richtigen sind (anderer Ordner). lagere mal bitte die fragen+antworten in eine externe Datei (ini,xml,etc) aus, damit das Codesegment universeller und besser lesbarer wird. 36 Schwierigkeitsgrade? ich denke 3 reichen...ist sicher nur unglückliches benamen der variablen. als kleiner tipp am rande...folgendes lässt sich auch entscheidend verkürzen:
Delphi-Quellcode:
z.b. so:
Case Loesung of
1:begin Panel2.Color:=clgreen; Panel3.Visible:=false; Panel4.Visible:=false; Panel5.Visible:=false; end; 2:begin Panel3.Color:=clgreen; Panel2.Visible:=false; Panel4.Visible:=false; Panel5.Visible:=false; end; 3:begin Panel4.Color:=clgreen; Panel2.Visible:=false; Panel3.Visible:=false; Panel5.Visible:=false; end; 4:begin Panel5.Color:=clgreen; Panel2.Visible:=false; Panel4.Visible:=false; Panel3.Visible:=false; end;
Delphi-Quellcode:
oder
var panel:TPanel
Panel2.Visible:=false; Panel3.Visible:=false; Panel4.Visible:=false; Panel5.Visible:=false; panel:=findcomponent('Panel'+IntToStr(Loesung+1)); if assigned(panel) then begin panel.visible:=true; panel.color:=clGreen; end;
Delphi-Quellcode:
einfach so:
case ZS of
1: begin with mediaplayer1 do begin Filename:=Pfad+'\Mediendateien\richtigeAntwort\1.wav'; mediaplayer1.Open; mediaplayer1.Play; end; end; ... //obiger code noch 3x und das bei jedem panelclick.
Delphi-Quellcode:
du kannst mehreren Panels auch die gleiche Click-Prozedur zuweisen...so sparst du redundaten code...
with mediaplayer1 do
begin Filename:=Pfad+'\Mediendateien\richtigeAntwort\'+IntToStr(ZS)+'.wav'; mediaplayer1.Open; mediaplayer1.Play; end; wenn du die paar sachen machst und noch eine bessere Einrückung :) dann wird dein code schonmal viel besser lesbar.warum eigentlich 4 mediaplayer? den Vergleich, ob frage schon gefragt wurde hab ich noch nicht gefunden... Gruß Frank |
Re: Zufallszahl ziehen ohne wiederholung
Sag mal, kann das sein, dass da die falschen Dateien dabei sind? In dem Quelltext nimmst du ja noch eine beliebige Zufallszahl. Im Projekt wird verwiesen auf ein Verzeichnis '..\das was net ging\Delphi Projekt', aber diese Dateien sind leider nicht dabei...
Zum Konzept: Wie wäre es, wenn du die Fragen aus einer Datei lädst oder zumindest konstante Arrays benutzt? So ist das doch viel zu umständlich, wenn du Fragen hinzufügst, etc. // EDIT: Zur Frage "Wo ist der Sitz des Bundeshauses?": Der Sitz des Bundestages ist Berlin und das Bundeshaus steht immer noch in Bonn, wird aber anderweitig verwendet. |
Re: Zufallszahl ziehen ohne wiederholung
Das habe ich auch schon gerade festgestellt, ich werde gleich noch mal die richtigen hochladen
|
Re: Zufallszahl ziehen ohne wiederholung
Da reichen aber die Quelltextdateien, und die kannst du auch hier in den Anhang legen, wer die anderen Dateien dazu will, der kann ja den Link oben benutzen.
|
Re: Zufallszahl ziehen ohne wiederholung
So das hab ich jetzt auch gemacht! Hier ist der Quelltext!
![]() Sorry, ich hätts auch hier hochladen können, is mir aber zu spät eingefallen! Das Problem bleibt immer noch: 1. ich muss den Quelltext redundanter gestalten 2. wieso er in der unit 5 bei button 1 click das mit der zufallszahl z super macht und in der listbox dokumentiert aber genau dasselbe bei form5.button 2. click nicht macht und immer gleich die if bedingung erfüllt was dazu führt, dass er schreibt, sie haben das spiel erfolgreich beendet |
Re: Zufallszahl ziehen ohne wiederholung
Zitat:
Zweitens ist der Quelltext auskommentiert, der die Variable füllt... So geht es bei mir:
Delphi-Quellcode:
procedure TForm5.Button2Click(Sender: TObject);
var p,z,i:integer; //liste: string; begin //////////////////////////////////////////////////////////////////////// Randomize; liste:=''; for i:=1 to gesamt do liste:=liste+chr(i); if length(liste)<=gesamt-anzahl then |
Re: Zufallszahl ziehen ohne wiederholung
Danke jaenicke! Ich bin einen großen Schritt weiter!
Es funktioniert jetzt! Ich hab nur noch das Problem, dass ich ja immer wieder wenn ich eine neue zufallszahl will und die brauche ich 15 mal auf button 2 clicke! und mit dieser variante kommen dann die zufallszahlen doppelt vor, das möchte ich ja aber nicht, da ich keine doppelten fragen haben möchte! Ich denke das liegt daran, dass diese liste immer beim klicken auf button 2 neu erstellt wird, aber wie muss ich den quelltext ändern, damit die ersten 15 zufallszahlen nicht doppelt vorkommen?? Ich hab auch noch nen button für neues spiel, dabei sollten wieder neue zufallszahlen kommen! Was muss ich da eigeben?? |
Re: Zufallszahl ziehen ohne wiederholung
Ach ja, die Initialisierung brauchst du da ja nicht. Die brauchst du dann aber für ein neues Spiel, womit deine zweite Frage beantwortet ist. ;-)
Delphi-Quellcode:
Und einen Fehler: Wenn ich auf Weiter statt eine Antwort klicke wird trotzdem weitergezählt...
procedure TForm5.Button2Click(Sender: TObject);
var p,z,i:integer; begin //////////////////////////////////////////////////////////////////////// Randomize; if length(liste)<=gesamt-anzahl then |
Re: Zufallszahl ziehen ohne wiederholung
dankeschön, soweit habe ich das auch jetzt endlich hinbekommen! Es bleibt noch eine frage! mit neues spiel starten klappt! Das problem ist nur, dass ich button2. click in form5 habe und neues spiel starten in form6 habe! Der quelltext funktioniert (ich hab ihn mal zum neuen Spiel starten in form5 gehauen) aber in form6 kann ich die liste aus form5 net löschen! Was muss ich dafür tun??
Danke für die Antwort! |
Re: Zufallszahl ziehen ohne wiederholung
Weil du die Variable Liste in der implementation Sektion deklariert hast. Damit ist diese nur innerhalb dieser Unit sichtbar. Du kannst die Variable unter public deklarieren, dann kannst du mit Form5.liste auch darauf zugreifen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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 by Thomas Breitkreuz