این کدهارو ببینید
یکم کدنویسیش کلک رشتی داره اما مهم خروجیه :)
مشکلاتش:
رندوم رو به صورت سراسری میخوام تعریف کنم که دو تا تابع ازش استفاده کنن اما مشکل دار میشه
میخوام هروقت موس رفت رو دایره که به صورت رندوم ایجاد میشه رنگش عوض شه که خیلی دیر این اتفاق میفته
لطفا راهنماییم کنید.خیلی وقت ندارم :)
#include <stdlib.h>
#include <GL\glut.h>
#include<math.h>
bool flag=0;
int counter=0;
int i=rand()%5+1;
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0.0, 200.0, 0.0, 150.0);
}
//namayeshe moraba'a ha
void Display(void)
{
GLint a[4][2]={{15,140},{65,140},{65,90},{15,90}};
GLint b[4][2]={{75,140},{125,140},{125,90},{75,90}};
GLint c[4][2]={{135,140},{185,140},{185,90},{135,90}};
GLint d[4][2]={{50,75},{100,75},{100,25},{50,25}};
GLint e[4][2]={{110,75},{160,75},{160,25},{110,25}};
glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(a[0]);
glVertex2iv (a[1]);
glVertex2iv (a[2]);
glVertex2iv (a[3]);
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(b[0]);
glVertex2iv (b[1]);
glVertex2iv (b[2]);
glVertex2iv (b[3]);
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(c[0]);
glVertex2iv (c[1]);
glVertex2iv (c[2]);
glVertex2iv (c[3]);
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(d[0]);
glVertex2iv (d[1]);
glVertex2iv (d[2]);
glVertex2iv (d[3]);
glEnd();
glBegin(GL_LINE_LOOP);
glColor3f(0.0, 2.0, 0.0);
glVertex2iv(e[0]);
glVertex2iv (e[1]);
glVertex2iv (e[2]);
glVertex2iv (e[3]);
glEnd();
glFlush();
glutSwapBuffers();
}
//penhan shodan dayere ha
void hide(int value)
{
glClear(GL_COLOR_BUFFER_BIT );
}
//emtiaz bandi
void end(int value)
{
if(counter>5)
{
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT );
}
//else if(counter<5)
//{
// glLoadIdentity();
//glClear(GL_COLOR_BUFFER_BIT );
//}
}
//namayeshe randome dayere ha
void timer_function( int value)
{
if(i==1)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(40,115.0,0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}
else if(i==2)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(100,115.0,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}
else if(i==3)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(160,115,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}
else if(i==4)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(75,50,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}
else if(i==5)
{
glClear(GL_COLOR_BUFFER_BIT);
if (flag) glColor3f(0, 1, 0);
else glColor3f(1, 1, 1);
glPushMatrix();
glTranslatef(135,50,0.0);
GLUquadricObj *circle = gluNewQuadric ();
gluQuadricDrawStyle (circle, GLU_FILL);
gluDisk (circle,0,25,20000,1);
gluDeleteQuadric(circle);
glPopMatrix();
glutSwapBuffers();
}
glutTimerFunc(100,hide,0);
glutTimerFunc(100,timer_function,0);
}
//taghire range dayere ha
void myMotionFunc( int x, int y )
{
switch(i)
{
case(1):
{
if(sqrt(double(pow(float(abs(40-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
case(2):
{
if(sqrt(double(pow(float(abs(100-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
case(3):
{
if(sqrt(double(pow(float(abs(160-x)),2)+pow(float(abs(115-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
case(4):
{
if(sqrt(double(pow(float(abs(75-x)),2)+pow(float(abs(50-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
case(5):
{
if(sqrt(double(pow(float(abs(135-x)),2)+pow(float(abs(50-y)),2)))>100) flag=0;
else {flag=1; counter++;}
}
break;
}
}
//mohasebeye emtiaz
//void myMouse(int button, int state, int x, int y)
//{
//
// if(button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
// {
// if(flag)
// counter++;
//
// }
// glutPostRedisplay();
//}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (400, 300);
glutInitWindowPosition (500, 500);
glutCreateWindow ("Dash");
init ();
glutDisplayFunc (Display);
glutIdleFunc (Display);
glutTimerFunc(100,timer_function,0);
glutTimerFunc(40000,end,0);
//glutMouseFunc(myMouse);
glutPassiveMotionFunc (myMotionFunc);
glutMainLoop();
}