Problem bei wiederholter Routine (war: Brauch dringend hilfe ...)
-
Hallo,
ich sitze jetzt bereits seit Wochen an diesem Programm, bekomme aber den Fehler einfach nicht raus! Ich habe im Informatik Unterricht die Aufgabe bekommen, einen kleinen Spielautomaten zu basteln, ähnlich oder genau so wie die Goldene 7. Habe das auch ganz gut hinbekommen. Nur ist dort noch ein verdammter Fehler, den ich nicht wegbekomme. Am besten ihr ladet euch das Programm hier mal herunter, dann könnt ihr besser nachvollziehen was ich meine: http://www.planetd.de/Spielautomat.zipAlso, wenn ihr das Programm jetzt startet, einfach den Einsatz erhöhen, und dann auf den Hebel klicken, läuft alles echt super, genau so wie ich es haben möchte, die Zahlen wecheln hinter einander, zwar nicht elegant, aber für den 3 Monat C++ ganz anschaulich. Nun werden die Zahlen bzw. Grafiken mit if Bedingungen verglichen, un die Gewinnsumme berrechnet. Nun wird ein Timer aktiviert, bei dem ich eine blinkende Grafik eingebaut habe und die Gewinnsumme in ein Label geschrieben. Anschließend wird man gefragt, ob man ein neues Spiel spielen möchte, oder die nächste Runde antreten möchte. Bis dahin läuft noch alles wie gewollt, klickt man jetzt aber auf Neue Runde, schaut es erst ganz gut aus, später nach kurzer Zeit jedoch, versucht er erneut einen Gewinn hinzuzurechnen, obwohl noch keine Zahlen gezogen wurden, und alles auf Enabled=false gesetzt wurde. Ich finde den Fehler einfach nicht. Kann mir von euch jemand helfen, ich müsste es nämlich am Donnerstag fertig haben, und mein Informatik Lehrer findet den Fehler auch nicht. Wäre echt nett, wenn sich jemand die Mühe macht! Hier meine E-Mail Adresse: [url=mailto:DanielWeidner@nord-com.net">DanielWeidner@nord-com.net[/url]
MfG Daniel
Edit:
Bitte aussagekräftige Überschriften wählen. Danke![ Dieser Beitrag wurde am 24.06.2003 um 20:33 Uhr von Jansen editiert. ]
-
Schonmal den Debugger angeschmissen und bei der Behandlungsroutine für "Neues Spiel" nen Breakpoint reingehauen, damit du durchsteppen kannst, und schauen kannst was genau passiert?
Mag mich jetzt nämlich nicht in fremde Programme eindenken...
-junix
-
Das komische ist ja, dass es erst geht, erst anschließend nicht, nachdem man eigentlich zur nächsten Runde startet. Darum kann ich mir nicht erklären warum es nicht geht. Aber ich kann es mir nochmal mit dem Debugger anschauen. Wäre trotzdem nett, wenn du dir das mal anschaust, sollte auch ganz übersichtlich sein, ist alles kommentiert!
MfG Daniel
-
Poste doch mal n bischen von dem Quelltext, dann können sich den alle angucken...
Und bitte Compiliere deine Anwendungen in Zukunft so, wenn du willst, dass auch andere Leute sie ausführen können ;);)
-
So also ich habe mir mal die Zeit genommen und deinen Quelltext angeguckt...
Mir ist aufgefallen:- Du solltest dir unbedingt einmal die Funktionsweise und den Nutzen von
selbsterstellten Funktionen anschauen. Du tust in vielen Ereignissen immer
wieder dasselbe, was manchmal bis zu 300 zeilen lang ist (ich denke jetzt an
die punkteauswertung in jedem TimerZahlXStopp). Das alles koenntest du
schoen in eine Funktion packen, die du dann ausfuehrst.
Dadurch koennte dein Quelltext nur halbsolang sein... - Der Fehler liegt darin: Das erste Mal startest du das Spiel über StartenClick
Dort setzt du die ganzen Intervalle und die Timer auf true und dort setzt du TimerStatusX auf 0. Das machst du danach gar nicht mehr, da du die
neuen Spiele alle ueber NeuesSpielClick oder NeueRundeClick startest.
Ausserdem [b]setzt du die TimerZahlXStopp Timer nie auf Enabled=falsewodurch diese immer durchlaufen, und seit dem ersten Ende eines Spiels, wenn
naemlich alle TimerStatusX auf 1 sind, wird immer wieder der neue
Gewinn ausgerechnet (der dann immer 0 ist). - Verbesserungsvorschlag: Starte ein Neues Spiel immer ueber StartenClick, oder
pack vieles gleiches immer in eigene Funktionen, die du dann immer wieder aus-
fuehrst. Halt das, was ich dir schon eben geraten habe...
Ich hoffe du hast mich verstanden und ich konnte helfen.
MfG Aoeke
[ Dieser Beitrag wurde am 24.06.2003 um 19:24 Uhr von Aoeke editiert. ]
- Du solltest dir unbedingt einmal die Funktionsweise und den Nutzen von
-
Hi Daniel
Nettes Teil (fuer 3 Monate)
Aber:
-
siehe AOKE
-
Mach in Form1->OnClose (oder OnCloseQuery) nen Stop fuer den Sound rein!!!
Bei mir - Win2K - bleibt sonst die EXE im RAM haengen!!!
(nicht mal der Taskman kann die zuverlaessig 'Raushauen'!
-
-
Juhu, es geht!!!!!!! Endlich!!!!!
Ich könnte euch küssen, vielen Dank, dieser Fehler hat mich schon viele viele Stunden gekostet.
Das mit dem immer wieder wiederholen der Schleife, musst ich so machen, weil ich leider nicht wusste, wie ich ihn an einer Stelle einfüge, und dann dem Event sage, er soll auch den Befehl dort ausführen, aber so geht es ja jetzt endlich auch. Nochmals vielen Dank an alle! Den Sound werde ich dan am Ende stoppen, wenn mir jemand sagt, wie der Befehl dafür lautet
. Nochmals vielen Dank, jetzt kann ich ja endlich an die Spielereien gehen.
MfG Daniel
-
Original erstellt von DanielW.:
... Den Sound werde ich dan am Ende stoppen, wenn mir jemand sagt, wie der Befehl dafür lautet//Sound abbrehen
sndPlaySound(NULL, SND_ASYNC | SND_LOOP);
:p
-
Cool, wäre auch das erledigt, danke schön!