#include<graphics.h> #include<conio.h> #include<iostream> using namespace std; class CObject { public: virtual void Draw() = 0; virtual void Update() = 0; }; class Cball :public CObject { private: float m_x; float m_y; int m_r; int m_color; float m_Vy; public: Cball(float x, float y, int r, int color, float v) { m_x = x; m_y = y; m_r = r; m_color = color; m_Vy = v; } void Draw() { COLORREF color = getfillcolor(); setfillcolor(m_color); solidcircle(m_x, m_y, m_r); } void Update(float t) { m_Vy += -9.8*t; m_y += m_Vy*t + 0.5*(-9.8)*t*t; if(m_y>m_r+200) { m_Vy = -0.8*m_Vy; } } }; int main() { initgraph(800, 600); setorigin(400, 300); Cball ball(20, 200, 20, RED,0); for (int i=0;i<1000;++i) { cleardevice(); ball.Draw(); ball.Update(0.1); Sleep(30); } _getch(); closegraph(); return 0; }
时间: 2024-04-12 16:27:37 浏览: 90
你的代码看起来基本上是正确的,但是在Cball类中的Update函数的声明和定义不一致。在CObject类中,Update函数是纯虚函数,没有参数,但是在Cball类中,你给Update函数添加了一个float类型的参数t。因此,在Cball类中的Update函数的声明和定义应该与CObject类中的Update函数一致,都没有参数。
修改后的代码如下所示:
```cpp
class CObject
{
public:
virtual void Draw() = 0;
virtual void Update() = 0;
};
class Cball :public CObject
{
private:
float m_x;
float m_y;
int m_r;
int m_color;
float m_Vy;
public:
Cball(float x, float y, int r, int color, float v)
{
m_x = x;
m_y = y;
m_r = r;
m_color = color;
m_Vy = v;
}
void Draw()
{
COLORREF color = getfillcolor();
setfillcolor(m_color);
solidcircle(m_x, m_y, m_r);
}
void Update()
{
m_Vy += -9.8 * 0.1;
m_y += m_Vy * 0.1 + 0.5 * (-9.8) * 0.1 * 0.1;
if (m_y > m_r + 200)
{
m_Vy = -0.8 * m_Vy;
}
}
};
int main()
{
initgraph(800, 600);
setorigin(400, 300);
Cball ball(20, 200, 20, RED, 0);
for (int i = 0; i < 1000; ++i)
{
cleardevice();
ball.Draw();
ball.Update();
Sleep(30);
}
_getch();
closegraph();
return 0;
}
```
请尝试使用这个修改后的代码,并确保你的环境中包含了graphics.h和conio.h这两个头文件。希望这能帮助到你!如果还有其他问题,请随时提问。
阅读全文