[GELÖST]Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 08:19

Hey ihr lieben,

also erstmal muss ich sagen, klasse Forum !

Ich bin seit dem 1.8 diesen Jahres Azubi für Anwendungsentwicklung mit MS Dynamics NAV. Nun habe ich schon ein wenig Erfahrung mitgebracht von Delphi und Pascal.

Um dann mal in die Sprache hier einen Einblick zu finden, sollte ich spaßeshalber mal ein Kniffel Programmieren. Nachdem das nun nahezu fertig ist, habe ich noch HighScore listen eingebaut und nun kommt noch ein neues Feature, was ich aber nicht geregelt bekomme...


Also kaum zu glauben aber wahr, ich arbeite mit Grafik ^^ Ich habe mit hilfe von Shapes ein paar würfel erstellt, die halt auf drücken des würfeln button die geworfene Punktzahl anzeigen. Nun will ich das nette feature noch erweitern.
Dazu möchte ich, dass wenn der Würfeln-Button betätigt wird, erst eine Funktion die Würfel-Werte einige male bestimmt, diese dann auf meinen grafischen würfeln anzeigt und erst zuletzt einen wert bestimmt, der dann als reeller wert für die punkte des spiels zählt, um einfach den Würfelvorgang etwas spannender zu gestalten.

Nun habe ich versucht in meiner Funktion zu sagen, das z.b.
( die würfel sind in einem array of integer abgelegt )
Würfel[1] := RANDOM(6);
Würfel[2] := RANDOM(6);
.
.
.
.
Würfelshape; // ISt die Funktion, die die augenanzahl der würfel anzeigt.
CurrForm.UPDATE;
SLEEP(100);
//und wieder von vorne.
Das hätte ich dann wenn es geklappt hätte noch versucht in eine schleife zu verpacken.

So warum ich es so mache wie ich es mache, ich muss es ja erreichen, dass der ermittelte würfel wert angezeigt wird, kurz sichtbar ist, dann ein neuer wert ermittelt wird und der dann wieder sichtbar ist und so weiter, damit es den anschein hat, oder besser gesagt effekt hat, dass die würfel "rollen". SLEEP meinte jemand zu mir, würde die anwendung kurz anhalten, was ja notwendig ist, weil man sonst die einzelnen ermittelten würfelwerte nur als kurzes flimmern wahrnehmen würde, wenn man bedenkt, wie schnell ein rechner heute ist.


Also falls jemand einen lösungsansatz hat, nicht unbedingt ne ganze lösung, denn ich muss es ja selbst herausfinden, würd ich mich freuen, wenn jemandeinen rat für mich hat :)

falls noch fragen bestehen, oder jemand vlt den code haben will, kann ich da sicher was exportieren :)


vielen dank


lg

eLmoXis
Zuletzt geändert von eLmoXis am 31. August 2010 23:22, insgesamt 1-mal geändert.

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 08:42

Was erscheint denn für ein Fehler?

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 08:51

Ich gebe zu, ich habe zuvor noch niemandem beim Kniffel-Programmieren geholfen :)

Ich habe dein Problem möglicherweise auch noch nicht genau verstanden. Geht es darum, dass die Würfel während der "Vorwürfelphase" nicht angezeigt weren? Eventuell würde dir dabei das Form-Property TimerInterval helfen. Ist es gesetzt, beispielsweise auf 100 (ms), dann sollte sich bei Änderung auch etwas in der Form tun. Du könntest also im Timer-Event prüfen, ob du gerade in dieser Phase bist und dann n Mal die Würfel anzeigen um danach beispielsweise über ein Boolean diese Funktion nicht mehr auszuführen.

Ich hoffe, ich habe mich verständlich ausgedrückt...

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 09:46

Alos Alternative kann mann ggf. mehrere Elemente mit Grafik übereinander legen, die abwechselnd angezeigt werden? Ähnlich wie bei den Kommentarbuttons im Standard.

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 09:57

Hey und hallo :)

Also
"Welche Fehlermeldung kommt denn?"

Keine, es ist also so, dass ich beim Click, eigentlich möchte, dass die Würfel ein paar werte anzeigen, so lange, bis keine ahnung so 5 mal oder so alle würfel irgendwas angezeigt haben und dann der letzte wert der gültige ist, damit einfach der effekt entsteht, dass es wie richtige würfel wirkt. Im moment passiert halt nix außer, dass die dauer die die einzelnen SLEEPs mit sich bringen, vergeht und dann der letzte Wert angezeigt wird. Also im grundegenommen, genau wie ohne die Animation nur halt das es dauert bis man sein ergebnis sieht.

"Ich gebe zu, ich habe zuvor noch niemandem beim Kniffel-Programmieren geholfen :)"

^^ Danke das du/ihr es dennoch versucht ;)

Ich habe hier um der Verständnis abzuhelfen mal einen Screen gemacht und ihr könnt euch den ansehen:
http://img697.imageshack.us/img697/8234/kniffelshot.jpg


Da seht ihr, dass der Spieler bereits 2x gewürfelt hat und sich dazu entschieden hat, die markierten würfel zu behalten. So, im moment ist es halt so, man klickt "Würfeln" und PAFF sind die würfel die man halt erhalten hat sichtbar, und das ist etwas trocken und langweilig. Wenn ich es nun hinbekäme, dass die Würfel halt vorher z.B. 5 mal irgendwas anzeigen mit jeweils 100-200 ms dazwischen, dann würde es so nen "oooooooooh heyyyyy" effekt haben ^^ Und das wäre irgendwo spannender und interessanter.

Naja und wie gesagt, mit dem Code den ich im Anfangspost hatte läuft das nicht wirklich, es ist lediglich so, dass es dann halt die dauer dre millisekunden dauert, bis der entgültige wurf ausgeführt wird.

Hatte auch versucht, die Funktion auf einen Wurf einzustellen, also
Wuerfel[Integer] := RANDOM(6);
WuerfelShape;
CurrForm.UPDATE;
dann die Funktion im "Animationstest"-OnPush aufzurufen, dann einen sleep von 2000ms dann wieder die fukntion aufzurufen usw.. Aber auch dabei nix, muss dann halt knappe 6 sekunden warten und dann kommt wieder nur der letzte erworfene wert... Und ich versteh einfach nicht waurm.
Das Form-Property TimeInterval, sorgt für was genau? Wird dann alle 100ms als beispiel, etwas verändert oder wie?
Und an die Sache mit dem Boolean hatte ich auch gedacht, das bsp nach n läufen dann die variable auf true geht und somit der vorgang abgebrochen und der letzte wert gilt.. ebenso habe ich überlegt, einfach ne FOR Schleife zu erstellen, die dann einfach den im letzten Lauf ermittelten Wert als zu Wertenden Wert nimmt oder so. Aber das ist ja denke ich weniger wichtig grade, denn es muss ja erstmal funktionieren, dass die Sache mit dem "erster Würfelwert" "blink" "zweiter Würfelwert" "blink" usw usf..

Ich hoffe ich habe es nicht noch unverständlicher gemacht :)

EDIT: Bezüglich des Tipps mehrere Elemente übereinander zu legen, also ich denke, dass das gehen würde, versuche jedoch das zu umgehen, da es mit gigantischen Codemengen zusammen hängt, zumal in der final Version die Anzahl der Läufe die passieren, bevor der feste Würfel wert ermittelt wird auch noch zufällig werden soll. Somit wäre das echt heftig und alleine jetzt schon ist die WürfelShape funktion damit beschäftigt, 6x7 Punkte unsichtbar zu machen, dann 5 Würfel sichtbar zu machen und dann für jeden würfel 6 abfragen beinhaltet, die schauen
IF wuerfel[1] = 1 THEN
CurrForm.Punkt11.VISIBLE(TRUE);
.
.
.
IF wuerfel[2] = 1 THEN
CurrForm.Punkt21.VISIBLE(TRUE);
usw.

wenn ich das nun für sagen wir N-Würfel Felder mache, mit RANDOM(N) möglichen wiederholungen des Anzeigens der nur zum Effekt existenten Würfel werte... Dann würde das ganze irgendwo nicht mehr sauber sein glaube ich..

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 16:02

Hey Leute,


also vielen Dank für die Denkansätze und ebenso auch mal sry, für den Doppelpost, ich wollte vermeiden, dass es untergeht, dass ihr mich ans ziel gebracht habt.

Was letztlich funktioniert hat, war die Sache mit dem Form Intervall, dazu einen Timercounter, der OnOpenForm auf 10 gesetzt wird, auf dem OnTimer Trigger der Form wird dann die Funktion wiederholt aufgerufen bis der Counter 10 zählt, somit hat man dann nun diesen "Die würfel Rollen" effekt, sieht echt spitze aus langsam :)

Nun kommt der Netzwerkmodus ^^ Das wird aber etwas schwieriger denke ich ;P


Danke euch allen ;)



lg

eLmoXis

Re: Azubi hat Problem bei Kniffel-Programmierung

31. August 2010 16:14

Genau Marcel, so in etwa hatte ich mir das in der Umsetzung vorgestellt :)