Visual c++ C++;在菱形中弹跳的球

Visual c++ C++;在菱形中弹跳的球,visual-c++,c++-cli,gdi+,bounce,Visual C++,C++ Cli,Gdi+,Bounce,我用VC++编写了一个简单的弹球程序。 这个项目的目标是球必须在菱形中反弹。它不能离开菱形。 它似乎运行成功,但在左右角卡住了。 如何解决这个问题?我认为当球移动到左角和右角时,等式的条件是重复的… 你能推荐其他算法来解决这个问题吗? 我试图使这个问题像 while(!isInside(getNextPos(circle)){updateDirectionVector(circle);}但我不能这样做,因为每次都会更改一个随机值。(用于重复计时) 这是这个程序的算法,除了在拐角处工作。 up:

我用VC++编写了一个简单的弹球程序。
这个项目的目标是球必须在菱形中反弹。它不能离开菱形。
它似乎运行成功,但在左右角卡住了。
如何解决这个问题?我认为当球移动到左角和右角时,等式的条件是重复的…
你能推荐其他算法来解决这个问题吗?
我试图使这个问题像
while(!isInside(getNextPos(circle)){updateDirectionVector(circle);}

但我不能这样做,因为每次都会更改一个随机值。(用于重复计时)
这是这个程序的算法,除了在拐角处工作。

up:
while(1) goDownSideCircle;
if(StuckOnDownSide) goto down;
down:
while(1) goUpSideCircle;
if(StuckOnUpSide) goto up;
问题解决了。
求解算法:

    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;}}

你的代码真的是这样缩进的吗?如果是的话,恐怕你运气不好。。。或者这是因为粘贴在这里?你确定你没有试图在这里实现一个新的linux内核:-)顺便说一句,goto关键字被贬低了。尽可能避免它。为了让那些试图阅读和理解你的代码的人更容易,你应该格式化它,这样它就不需要水平滚动。此外,用适当的描述命名常量替换所有数值常量,并将计算结果合并到适当命名的变量中。例如,没有理由在两行代码中重复4次
50*(float)Math::Cos(j)
Sin(j)
也是如此。查看最新编辑,您确定
goXXXSideCircle
和后续的
if(…)
不属于同一范围吗?事实上,
goto-down没有意义语句-程序流将始终前进到下一行。