PDA

View Full Version : سوال: حرکت دادن اشیا در محیط گرافیکی c



fatima.star
شنبه 10 مرداد 1388, 11:34 صبح
سلام،
من یک سوال درباره حرکت دادن اشیا در زبان c دارم.
چه طور می تونیم به اشیا برای حرکتشان جهت بدهیم یعنی حرکتشان در جهات متفاوت باشد.
از قبل به خاطر کمکتون ممنون.

meysam_pro
شنبه 10 مرداد 1388, 12:11 عصر
خصوصیتهای به اسم های Xdirection و YDirection ایجاد بکنید، بعد هر بار برخورد با کناره ها یا اشیای دیگر این مقادیر رو ضربدر -1 بکنید.

meysam_pro
شنبه 10 مرداد 1388, 12:17 عصر
نمونه در TC:

class ball
{
private:
int x,y;
int r;
int xDir,yDir;
int color;
int isCollation()
{
if(getpixel(x,y)!=BG_COLOR || getpixel(x+r,y)!=BG_COLOR || getpixel(x,y+r)!=BG_COLOR || getpixel(x+r,y+r)!=BG_COLOR)
return 0;
else
{
if(getpixel(x,y)!=BG_COLOR || getpixel(x-r,y)!=BG_COLOR || getpixel(x,y-r)!=BG_COLOR || getpixel(x-r,y-r)!=BG_COLOR)
return 0;
return 1;
}
}
void draw()
{
setcolor(color);
circle(x,y,r);
setfillstyle(SOLID_FILL,color);
floodfill(x,y,color);
}
void remove()
{
setcolor(BG_COLOR);
circle(x,y,r);
setfillstyle(SOLID_FILL,BG_COLOR);
floodfill(x,y,BG_COLOR);
}
public:
ball()
{
r=7;
x=getmaxx()/3;
y=getmaxy()/3;
color=random(15)+1;
xDir=yDir=-5;
top=down=0;
}
int top,down;
void setXY(int _x,int _y)
{
remove();
x=_x;
y=_y;
draw();
top=down=0;
}
void move()
{
remove();
x+=xDir;
y+=yDir;
if(!isCollation())
{
x-=xDir;
y-=yDir;
yDir*=-1;
}
if(x<5 || (x>getmaxx()-xOffset))
{
x-=xDir;
y-=yDir;
xDir*=-1;
}
if(y<10)
{
top=1;
down=0;
return;
}
if(y>getmaxy()-5)
{
top=0;
down=1;
return;
}
draw();
}
};

fatima.star
شنبه 10 مرداد 1388, 13:07 عصر
ممنون از راهنماییتون.
من می خوام تعداد زیادی شکل توی صفحه داشته باشم که هر کدوم در یه جهت خاص حرکت کند و می خوام برنامم قابلیت افزایش تعداد اشیا رو هم داشته باشه.
می تونم برای این کار از تابع randomize استفاده کنم ؟

meysam_pro
شنبه 10 مرداد 1388, 13:18 عصر
این چیزی که خواستین تو کلاسی که نوشتم امکانش هست. کلاس ball رو با مقادیر Random برای xوy نمونه سازی بکنید. در ضمن نسبت مقادیر Xdir و Ydir زاویه ی حرکت رو تعیین میکنه(مثلا اینجا چون یکسانه 45 درجه است).

موفق باشید.

fatima.star
سه شنبه 13 مرداد 1388, 12:28 عصر
با سلام.
1-من وقتی از برنامه class ball شما استفاده کردم، برنامه نتونست BG_COLOR رو بشناسه و erorr داد.
2- برای برخورد دایره ها به هم من از چه فرمولی استفاده کنم؟ خودم وقتی از رابطه
بین x , y مرکز دو دایره و r آنها استفاده می کنم . دایره ها از حرکت می افتند یا حرکتشان خیلی تند و بی نظم می شه.