سلام ....میشه این برنامه رو به من توضیح بدین؟؟؟
ممنون میشم

#include <windows.h>
#include <gl/Gl.h>
#include <gl/glut.h>

int flag=0;
int rx,ry;
int xw,yw,selector=4,selector2=3;
float rr,gg,bb,ff=4.0;

//<<<<<<<<<<<<<<<<<<<<<<<< myDisplay >>>>>>>>>>>>>>>>>
void myDisplay(void)
{

glColor3f(0.670f, 0.776f, 0.878f);
glRectf(0,0,xw,40);

if(ry<=40)
{ if(rx>=10 && rx<=30)
{
selector=1;
rr=1;
gg=0;
bb=0;
}
if(rx>=40 && rx<=60)
{
selector=2;
rr=0;
gg=1;
bb=0;
}
if(rx>=70 && rx<=90)
{
selector=3;
rr=0;
gg=0;
bb=1;
}
if(rx>=100 && rx<=120)
{
selector=4;
rr=0;
gg=0;
bb=0;
}
if(rx>=155 && rx<=172)
{
selector2=1;
ff=8;
}
if(rx>=173 && rx<=189)
{
selector2=2;
ff=6;
}
if(rx>=189 && rx<=203)
{
selector2=3;
ff=4;
}
if(rx>=204 && rx<=215)
{
selector2=4;
ff=2;
}
}


if(selector==1)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(5,5,35,35);
}
if(selector==2)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(35,5,65,35);
}
if(selector==3)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(65,5,95,35);
}
if(selector==4)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(95,5,125,35);
}
if(selector2==1)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(155,11,172,29);
}
if(selector2==2)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(173,11,189,29);
}
if(selector2==3)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(189,11,203,29);
}
if(selector2==4)
{
glColor3f(0.70f, 0.70f, 0.70f);
glRectf(203,11,215,29);
}


glColor3f(1.0f, 0.0f, 0.0f);
glRectf(10,10,30,30);

glColor3f(0.0f, 1.0f, 0.0f);
glRectf(40,10,60,30);

glColor3f(0.0f, 0.0f, 1.0f);
glRectf(70,10,90,30);

glColor3f(0.0f, 0.0f, 0.0f);
glRectf(100,10,120,30);

glRectf(150,0,151,40);

glRectf(160,16,168,24);
glRectf(178,17,184,23);
glRectf(194,18,198,22);
glRectf(208,19,210,21);

glColor3f(rr, gg, bb);
glPointSize(ff);


if (flag==1 && ry>40)
{
glBegin(GL_POINTS);
glVertex2i(rx, ry);
glEnd();
}
glFlush();
}

void myMouse(int button, int state, int x, int y)
{
if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
{
flag=1;
rx=x;
ry=yw-y;
}
glutPostRedisplay();
}

void myMouseMotion(int x, int y)
{
flag=1;
rx=x;
ry=yw-y;
glutPostRedisplay();
}


void myKeyboard(unsigned char ch, int x, int y)
{

switch (ch)
{
case 'e':
exit (-1);

case 'a':
flag=0;
glClear(GL_COLOR_BUFFER_BIT); // clear the screen
break;
}

glutPostRedisplay();
}



void ChangeSize(GLsizei w, GLsizei h)
{

yw=h;
xw=w;



glClearColor(1.0,1.0,1.0,0.0);
// glColor3f(0.0f, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);

glLoadIdentity();

glViewport(0,0,w,h);

gluOrtho2D(0.0, w, 0.0, h);

}



//<<<<<<<<<<<<<<<<<<<<<<<< main >>>>>>>>>>>>>>>>>>>>>>
void main(int argc, char** argv)
{

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(640,480);

glutCreateWindow("board");

glutDisplayFunc(myDisplay);

glutReshapeFunc(ChangeSize);

glutMouseFunc(myMouse);

glutKeyboardFunc(myKeyboard);

glutMotionFunc (myMouseMotion);

glutMainLoop();
}