Stack overflow??
-
tja, aber wenn ich da anhalten will, wo es blockiert ist es meistens schon zu spät, denn meistens hängt sich der gesamte pc auf... rekursion benutze ich nciht und endlosschleifden auch nicht...
wenn ich einfach BlockX prüfe, gibt es ungenauigkeiten, denn Blockj X steht fgür die "position" des array eintrags [0][0] des block arrays. bei einem stein wie im ersten beitrag (der lange) wäre das problem, dass er schon stoppen würde, wenn der "eigentliche" stein den rand noch gar nichtr berühren würde... deshalb auch der ganze schmarrn mit MinX und so...
ich versuche noch mal was und poste dann, ob es geklappt hat, trotzdem bin ich für weitere lösungen offen.
bis später
-
@tetris-fan
Ich glaube auch, dass es am iMinX + m_iBlockX = -1 liegt.
Probier es mal so:... if (iMinX + m_iBlockX < 0) { bCollide = mrTrue; } else { if (m_aiArena[iY + m_iBlockY][iMinX + m_iBlockX] != 0) { bCollide = mrTrue; } } ...
Wobei ich noch einen besseren Vorschlag hätte:
... if (iMinX + m_iBlockX < 0) { return; //Warum unnötig weiterrechnen, wenn eh schon feststeht, dass der Block nicht weiter kann? } if (m_aiArena[iY + m_iBlockY][iMinX + m_iBlockX] != 0) { return; } ...
-
auch wahr... aaaaaaaaaber... ICH HABS GELÖST
Juchu
ich schäme mich beinahe, aber: da sowohl iMinX, als auch m_iBlockX !!unsigned!! long variablen sind........... *ganzdollschäm* können sie natürlich beide nicht klei er als 0 sein... *nochmalschäm* warum sich das programm bei der rückwärts zählenden schleife aufhängt weiß ich zwar immer noch nicht, aber es läuft jetzt so, wie ich es will.
danke an alle und sorry für eine so dumme frage (bzw. meine schusseligkeit...)
*undnochmalschämweilessoschöönwar*
cya
-
Tetris-Fan schrieb:
da sowohl iMinX, als auch m_iBlockX !!unsigned!! long variablen sind........... *ganzdollschäm* können sie natürlich beide nicht klei er als 0 sein...
Warnt da dein Compiler nicht?
-
also bei mir nicht, wieso? ich kann doch testen, ob ne unsigned int variable kleiner als nullk ist, oder? das wäre doch genauso, als ob ich schreibe if (false)... naja, hauptsache, das prob iwt wech... JUCHU
-
Der Grund, warum die Rückwärts-Zählende-Schleife nicht funktioniert, ist, dass du hier auch wieder das Problem hast, dass die Variable keine negativen Zahlen aufnehmen kann.
Hat die Schleife so lange runtergezählt, bis die Variable 0 ist, ist die Schleife nicht zu Ende, da die Abbruchbedingung besagt, dass die Variable KLEINER als 0 sein muss. Wird jetzt die Variable weiter erniedrigt, enthält sie die größt mögliche Zahl (z.B. 4.294.967.295 bei int, da keine negativen Zahlen gespeichert werden können), welche immernoch größer als 0 ist. Folglich wird die Schleife nie beendet.
-
das hat er doch schon geschrieben
rapso->greets();
-
Tetris-Fan schrieb:
ich kann doch testen, ob ne unsigned int variable kleiner als nullk ist, oder?
Deshalb hab ichs nochmal gesagt. War mir nicht ganz sicher, wie es gemeint war.
-
Tetris-Fan schrieb:
warum sich das programm bei der rückwärts zählenden schleife aufhängt weiß ich zwar immer noch nicht, [...]
Und deshalb auch.
(Ich sollte mich registrieren, damit ich nicht jedesmal nen neuen Beitrag machen muss...)
-
2Kmm schrieb:
(Ich sollte mich registrieren, damit ich nicht jedesmal nen neuen Beitrag machen muss...)
NEIN! Tu's nicht!!
MICH haben sie auch schon rumgekriegt...!!!