يك مشكل كوچك در حركت يك شكل در سي پلاس
سلام
من برنامه يك ماشين كه در محيط سي پلاس پلاس حركت مي كنه را نوشتم كه از يك طرف screen حركت مي كنه و به طرف ديگه مي ره و چيزي مثل دور زدن رخ مي دهد و از طرف ديگر screen خارج مي شود و به همين ترتيب.
ولي زماني كه ماشين به سمت چپ screen مي رسه يك تكه از ماشين باقي مي مونه ولي من مي خوام كه تمامي ماشين محو و از صفحه خارج بشه
با اينكه من نقاط شكلم رو با نطقه صفر (در سمت x ها ) چك مي كنم ولي اتفاق مورد انتظارم رخ نمي ده
من كدم رو مي زارم تا دوستان بررسي كنند و اگر بشه كمك كنند
مرسي
لطفا راهنمايي كنيد .
كد من :
کد:
#include<iostream.h>
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<conio.h>
#include<dos.h>
#include<graphics.h>
float p[3][17]= {{45,53,68,72,87,90,80,80,72,72,53,53,45,45,40,40,45},{40,35,35,40,44,52,52,55,55,52,52,55,55,52,52,40,40},{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
class machine
{
private:
public:
machine();
void m_draw();
void m_scale(float sx , float sy);
void m_move(int x , int y);
};
void machine::machine()
{
m_draw();
}
void machine::m_draw()
{
for(float a = 0 ; a<16 ; a++)
line(p[0][a],p[1][a],p[0][a+1],p[1][a+1]);
}
void machine::m_scale (float sx , float sy)
{ float st [3][3]={{sx,0,p[0][0]*(1-sx)},{0,sy,p[1][0]*(1-sy)},{0,0,1}};
float np[3][17];
for(int i=0 ; i<3 ; i++)
for (int j=0 ; j<17 ; j++)
{
np[i][j]=0;
for(int k=0 ; k<3 ; k++)
np[i][j]+=st[i][k]*p[k][j];
}
for(i=0 ; i<3 ; i++)
for(j=0 ; j<17 ; j++)
p[i][j]=np[i][j];
}
void machine::m_move (int a, int b)
{
float newpoints[3][17];
int t[3][3] ={{1,0,a},{0,1,b},{0,0,1}};
for (int i =0 ; i <3 ;i++)
for (int j = 0 ; j<17 ; j++)
{
newpoints[i][j] = 0;
for (int k =0 ; k<3 ; k++)
newpoints[i][j] += t[i][k]*p[k][j];
}
for(i =0 ; i<3 ; i++)
for(j =0 ; j<17; j++)
p[i][j] = newpoints[i][j];
}
void main ()
{
int gd = DETECT , gm ;
initgraph(&gd , &gm , "C:\\Red\Language\\TC\\BGI");
int ec = graphresult();
if (ec !=0)
{
cout<<"Graph Error "<<grapherrormsg(ec);
getch();
exit(0);
}
machine m;
while(!kbhit())
{
while (p[0][0]<=680)
{
delay(10);
sound(80);
delay(80);
nosound();
cleardevice();
m.m_draw();
m.m_move(20,0);
}
m.m_scale(-1,1);
m.m_move(0,30);
m.m_scale(1.2,1.2);
delay(500);
while (p[0][0]>=0)
{
delay(10);
sound(80);
delay(80);
nosound();
cleardevice();
m.m_draw();
m.m_move(-20,0);
}
m.m_scale(-1,1);
m.m_move(0,30);
m.m_scale(1.2,1.2);
delay(500);
}
getch();
closegraph();
}