Autor Beitrag
YinYang
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 09.08.05 13:24 
Hallo zusammen :)


Ich habe da folgendes, ich hab das gefühl sehr blödes, Problem mit meinem Programm, und nachdem ich absolut nicht dahinter steige, was denn der Fehler ist, hoffe ich, das mir hier geholfen werden kann.


Es geht um folgendes: Mein Programm soll in etwa wie der Komplex im Film 'Cube' aussehen; d.h. es gibt nen großen (bei mir zweidimensionalen) Würfelkomplex aus 28*28 Würfeln. Durch dieses muss der Spieler durch, um den Ausgang zu finden.

Bei mir haben die Würfel die EIgenschaft, dass sie während des Spiels bei jedem Spielerzug rotieren, und zwar innerhalb sogenannter 'Würfelkreise' die conzentrisch um den Mittelpunkt des Komplexes (bein mir die Würfel 13/13, 13/14, 14/13 und 14/14 [Die WÜrfelzählung geht bei mir von 0 - 27]) verlaufen.

Da die Rotation nicht bei ALLEN Würfeln passieren soll, sondern nur bei bestimmten, hat beimir jedes Objekt vom Typ 'TCube' (welcher für EINEN Würfel des Komplexes steht) eine Membervariable 'ring', welche einfach den Würfelring angeben soll, und zwar beispielsweise alle Würfel, die sich außen befinden, haben den Wert ring = 0, alle, die einen Würfel vom Rand entfernt sind, haben den Wert ring = 1 usw bis zu den vier mittelpunktswürfen, welche den Wert ring = 13 haben.


Um dies möglichst kurz programmierne zu können, hatte ich mir ne kurze Skizze gemalt, und bin dann nach kurzen Überlegen auf folgenden, kurzen Algorithmus für die Zuweisung der Ringe gekommen (pos_x & pos_y sind die Kordinaten des Würfels, ieine einfache Variabe für die Schleifenzählung)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
FOR i := 0  TO 13 DO
BEGIN
     IF((pos_x=i) OR (pos_y=i) OR (pos_x=(27-i)) OR (pos_y=(27-i)))
     THEN ring := i;
END;


Meine gedachte Logik: Beim ersten Schleifendurchlauf 'pickt' sich die IF Konstruktion alle Würfel raus, deren x/y-Wert entweder 0 oder 27 sind, sie sich also auf dem äußersten Ring befinden. Sind sie es nicht, kommt der zweite Durchlauf, wo er prüft, ob x-/y-Wert 1 oder 26 sind, sich also auf dem zweiten Ring befinden usw, bis zum erwähnten Mittelring der vier Mittelwürfel.

Aber irgendwie funktioniert das nicht; ich habe mir eine einfache 'Karte' anzeigen lassen, welcher Würfel welchen Ring hat, und er weist irgendwie nicht das zu, was er eigentlich sollte;

(0/0) bekommt den richtigen Ring: 0
aber (1/0) und (0/1) bekommen den Wert: 1,
und (2/1) oder (0/2) bekommen den Wert 2.


Wo liegt der Fehler? hab ich irgendwo was nicht durchdacht bzgl der Nutzung mehrerer 'a OR b' Abfragen, oder ist in meinem Algorithmus ein grober, logischer Fehler?

helft mir bitte
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Di 09.08.05 13:28 
Hi und :welcome: im Delphi-Forum

Jo, die Würfle kriegen zwar den richtigen Wert, der wird aber hinterher durch nen höheren Wert überschrieben.

Beispiel:

0/2 kriegt zuerst den Wert 0 ( richtig )
Im Durchlauf für Ring 2 matcht der Würfel aber wieder ( wegen y=2 ) und kriegt den Ring 2...

Einfache Lösung:

Sobald der Würfel einen Ring matcht, die schleife mit break verlassen. Sollte reichen.

_________________
Bravery calls my name in the sound of the wind in the night...
YinYang Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 09.08.05 13:36 
'kopfgegenwandhau' :)

Stimtm, ich dachte mir schon, dass es so ein kleiner Logikfehler ist; jetzt ists mir klar.


Break-Aufruf eingefügt, und schon klappt es.

Super, danke sehr