C++ 弹跳球跳出屏幕

C++ bouncing ball goes out of screen

我尝试制作一个简单的匀速弹跳球,它应该会在屏幕边缘弹跳。 我已经成功地让球向前和向下移动,但它并没有停止,而是继续移动并离开了屏幕。 另外,我昨天才开始使用 C++ 图形,程序非常原始,因此如果答案简单一点,我将不胜感激。

(包含所有头文件)

void main()
{ 
   int gdriver = DETECT, gmode, xmax, ymax, Vx=10, Vy=10, Cx=150, Cy=150, t=1;
   initgraph(&gdriver, &gmode, "");
   xmax = getmaxx();
   ymax = getmaxy();
   setfillstyle(SOLID_FILL, YELLOW);
   a:
   while((Cx!=xmax-5 && Cx!=0) || (Cy!=ymax-5 && Cy!=0))
   { 
     Cx += (Vx * t);
     Cy += (Vy * t);
     clrscr();
     pieslice(Cx,Cy,0,360,10);
     delay(100);
   }
   if (Cx==xmax-5 || Cx==0)
   {
     Vx = - Vx;
   }
   else if (Cy==ymax-5 || Cy==0)
   {
     Vy = - Vy;
   }
   goto a;
}
while(Cx!=xmax-5 || Cx!=0 || Cy!=ymax-5 || Cy!=0)

这是永远正确的!

无论 Cx 的值是什么,它总是 "not xmax-5" 或 "not zero"(好吧,除非 xmax-5 本身是零,它可能不是)。

同样,您的 Cy 条件始终成立。

所以,球总是在移动。

改为:

while ((Cx!=xmax-5 && Cx!=0) || (Cy!=ymax-5 && Cy!=0))

现在你仍然遇到水平和垂直运动同时检查的问题,只有当球准确地击中角时才有效。但我会让你自己解决这个问题。