double mousex1 = -1;
double mousey1 = -1;
double mousex2 = -1;
double mousey2 = -1;
double force = 0;
double theta = 0;
void myMouse(int x, int y, int button, int event)
{
uiGetMouse(x,y,button,event);
switch(button)
{
case LEFT_BUTTON:
if(event==BUTTON_DOWN || event==MOUSEMOVE)
{
if ( mousex1 == -1 && mousey1 == -1)
{
mousex1 = x;
mousey1 = y;
DrawCue(5,3.5,0);
Sleep(500);
}
}
else if(event==BUTTON_UP)
{
if ( mousex2 == -1 && mousey2 == -1 && mousex1 != -1 )
{
mousex2 = x;
mousey2 = y;
getforce(abs(mousex2-mousex1),abs(mousey2-mousey1));
DisplayClear();
DrawPoolTable();
DrawCue(5-abs(mousex2-mousex1),3.5,0);
Sleep(500);
mousex1 = -1;
mousey1 = -1;
mousex2 = -1;
mousey2 = -1;
}
}
break;
}
}
void getforce(double dx, double dy)
{
force = dx*dy + dy*dy;
theta = atan(dx/dy);
}
你的代码已经正确的捕获了鼠标的移动,并将移动转换为了力和角度。这个力和角度可以被用来移动cue。
你需要一个函数来根据这个力和角度来绘制cue。这个函数可以根据力和角度来计算cue的位置,并使用图形API来绘制cue。这个函数可以被称为DrawCue
。假设你已经有一个API可以用来画线,那么DrawCue
可以像下面这样写:
void DrawCue(double force, double theta) {
double length = force; // 假设力直接决定cue的长度
double cueX1 = 5, cueY1 = 3.5; // cue的初始位置
double cueX2 = cueX1 + length * cos(theta); // cue的结束位置
double cueY2 = cueY1 + length * sin(theta);
// 假设你有一个叫DrawLine的函数可以画线
DrawLine(cueX1, cueY1, cueX2, cueY2);
}
这个函数根据力和角度来计算cue的结束位置,然后使用这个结束位置和初始位置来绘制cue。这样你就可以在每次鼠标移动时更新cue的位置,并在屏幕上画出来。