【问题标题】:C++ Ball Bouncing in the rhombusC++ 球在菱形中弹跳
【发布时间】: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


【解决方案1】:

问题已解决。
求解算法:

    RandValue;
    while(1){
    DrawCircle(Center_X,Center_Y);
    Center_X+=Rand_X; Center_Y+=Rand_Y;
    check=false;
    Check_X=Center_X; Check_Y=Center_Y;
    while(BorderCheck){
    RandValue;
    Check_X+=Rand_X; Check_Y+=Rand_Y;
    check=true;}
    if(check){
    Center_X=Check_X; Center_Y=Check_Y;}}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-23
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    相关资源
    最近更新 更多