【发布时间】:2012-05-06 08:37:21
【问题描述】:
我用 VC++ 做了一个简单的弹球程序。
这个程序的目标是球必须在菱形中反弹。它不能脱离菱形。
好像运行成功了,但是左右角卡住了。
如何解决这个问题?我认为当球向左右角移动时,方程的条件是重复的......
你能推荐其他算法来解决这个问题吗?
我试图像 while(!isInside(getNextPos(circle))) { updateDirectionVector(circle); }
那样解决这个问题,但我不能这样做,因为每次都有随机值发生变化。 (用定时器重复)
这是这个程序的算法,除了在拐角处之外,它都在工作。
up:
while(1) goDownSideCircle;
if(StuckOnDownSide) goto down;
down:
while(1) goUpSideCircle;
if(StuckOnUpSide) goto up;
【问题讨论】:
-
你的代码真的是这样缩进的吗?如果是的话,那恐怕你倒霉了……还是因为粘贴在这里?
-
你确定你不是在这里尝试实现一个新的 linux 内核 :-) 顺便说一句,goto 关键字已被贬值。尽量避免。
-
为了让那些试图阅读和理解你的代码的人更容易,你应该格式化它,使它不需要水平滚动。此外,用适当的描述性命名常量替换所有数值常量,并将计算结果合并到适当命名的变量中。
-
例如,
50*(float) Math::Cos(j)没有理由在两行代码中重复 4 次。Sin(j)也是如此。 -
看最新的编辑,你确定
goXXXSideCircle和后面的if(...)不属于同一个作用域吗?事实上,goto down;语句中没有任何意义 - 程序流程将始终进行到下一行。
标签: visual-c++ c++-cli gdi+ bounce