#include #include #include #include #include #include #define N 100 #define molkol 3 char zarf[N][N]; struct mol { int x,y,size,vx,vy; }m[molkol+1]; //=============================================== float fasele_oghlidosi(int x1,int y1,int x2,int y2) { return sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)); } //=============================================== int sign(int x) { if(x>0) return 1; if(x<0) return -1; return 0; } //=============================================== int barkhord(int sh_mol) { // barkhord // 0 barkhord nakard 1 = barkhord kard be khate 1 khate paeen if(m[sh_mol].y + 7 == N ) { sound(1000); delay(100); nosound(); return 1; } if(m[sh_mol].y - 7 == 1 ) { sound(1000); delay(100); nosound(); return 2; } if(m[sh_mol].x - 7 == 1 ) { sound(1000); delay(100); nosound(); return 3; } if(m[sh_mol].x + 7 == N ) { sound(1000); delay(100); nosound(); return 4; } return 0; } //=========================================== void keshidan_yek_mol(int x,int y) { for(int r = 7;r>=7;r--) { circle(x,y,r); } } //============================================ void barkhord_ba_divar() { for(int j =1; j<= molkol ; j++) { switch(barkhord(j)) { // case 0: // break; case 1: { m[j].vy = m[j].vy * (-1); m[j].vx = m[j].vx; break; } case 2 : { m[j].vy = m[j].vy * (-1); m[j].vx = m[j].vx; break; } case 3 : { m[j].vy = m[j].vy; m[j].vx = m[j].vx * (-1); break; } case 4 : { m[j].vy = m[j].vy; m[j].vx = m[j].vx * (-1); break; } } // switch } // for (int j } //=========================================== void clr() { setbkcolor(10); cleardevice(); rectangle(0,0,N,N); } //============================================ int main(void) { int i,j; int gdriver = DETECT, gmode, errorcode; initgraph(&gdriver, &gmode, "f:\\software\\tc\\bgi\\"); errorcode = graphresult(); if (errorcode != grOk) /* an error occurred */ { printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* return with error code */ } clr(); for(i=0;i<=N-1;i++) for(j=0;j<=N-1;j++) { zarf[i][j] = 0; } m[1].x = 90; m[1].y = 90; m[1].vx = -1; m[1].vy = 1; keshidan_yek_mol(m[1].x,m[1].y); zarf[m[1].x][m[1].y] = 1; m[2].x = 85; m[2].y = 15; m[2].vx = 1; m[2].vy = 1; keshidan_yek_mol(m[2].x,m[2].y); zarf[m[2].x][m[2].y] = 1; m[3].x = 35; m[3].y = 21; m[3].vx = -1; m[3].vy = 1; keshidan_yek_mol(m[3].x,m[3].y); zarf[m[3].x][m[3].y] = 1; /* m[4].x = 10; m[4].y = 80; m[4].vx = 0; m[4].vy = -1; keshidan_yek_mol(m[4].x,m[4].y); zarf[m[4].x][m[4].y] = 1; m[5].x = 135; m[5].y = 110; m[5].vx = 1; m[5].vy = 1; keshidan_yek_mol(m[5].x,m[5].y); zarf[m[5].x][m[5].y] = 1; m[6].x = 135; m[6].y = 110; m[6].vx = 0; m[6].vy = 1; keshidan_yek_mol(m[6].x,m[6].y); zarf[m[6].x][m[6].y] = 1; m[7].x = 115; m[7].y = 145; m[7].vx = -1; m[7].vy = 0; keshidan_yek_mol(m[7].x,m[7].y); zarf[m[7].x][m[7].y] = 1; */ while(1) { // move char ch = getch(); if(ch == 27) return 0; clr(); for (i=1;i<=molkol;i++) { zarf[m[i].x][m[i].y] = 0; m[i].x = m[i].vx *1 + m[i].x; m[i].y = m[i].vy *1 + m[i].y; zarf[m[i].x][m[i].y] = i; } for(i=1;i<= molkol;i++) keshidan_yek_mol(m[i].x,m[i].y); /* float r = sqrt(m[1].vx*m[1].vx + m[1].vy*m[1].vy); float zavie1 = atan(m[1].vx/m[1].vy); float teta = (zavie1 * 180)/3.141593; float zavie_tagheer_masir = 90 - teta; */ barkhord_ba_divar(); // barkhord i ba j for(i=1;i<= molkol ;i++) { for(int j=i+1 ; j<= molkol; j++) { // fasele i ba j float fasele = fasele_oghlidosi(m[i].x,m[i].y,m[j].x,m[j].y); if(fasele<=14) { // barkhord az ro be ro ofoghi if((sign(m[i].vx) != sign(m[j].vx) )&&( sign(m[i].vy) ==0 )&&( sign(m[j].vy== 0 ))) { m[i].vx = m[i].vx * (-1); m[j].vx = m[j].vx * (-1); } // barkhord az ro be ro amodi if((sign(m[i].vy) != sign(m[j].vy) )&&( sign(m[i].vx) ==0 )&&( sign(m[j].vx== 0 ))) { m[i].vy = m[i].vy * (-1); m[j].vy = m[j].vy * (-1); } // if( (sign(m[i].vx) == sign(m[j].vx)) &&(sign(m[j].vx) !=0)) { m[i].vy = m[i].vy * (-1); m[j].vy = m[j].vy * (-1); } if( (sign(m[i].vy) == sign(m[j].vy)) &&(sign(m[j].vy) !=0)) { m[i].vx = m[i].vx * (-1); m[j].vx = m[j].vx * (-1); } // barkhord zarb dari if((sign(m[i].vy) != sign(m[j].vy) )&&(sign(m[i].vx) != sign(m[j].vx) )) { m[i].vx = m[i].vx * (-1); m[i].vy = m[i].vy * (-1); m[j].vx = m[j].vx * (-1); m[j].vy = m[j].vy * (-1); } } } } } //while getch(); closegraph(); return 0; }