Code:
#include "glut.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
using namespace std;
#define M_PI 3.14159265358979323846f
int g_Width=400;
int g_Height=400;
float gravity=200;
int Mx=0;
int My=0;
char press;
void init();
void myMouseFunction( int button, int state, int mouseX, int mouseY );
void myKeyboardFunction( unsigned char key, int mouseX, int mouseY );
void mySpecialKeysFunction(int key, int x, int y);
void myReshapeFunction( int width, int height );
void myTimerFunction( int val );
void myDisplayFunction();
void myMouseMoveFunction(int x,int y);
class Circle{
int x;
int y;
int radius;
public:
Circle(){};
~Circle(){ printf("destructor called\n");}
static int count;
Circle(int a, int b, int c)
{
x=a; y=b; radius=c;
}
void set_data(int a, int b, int c)
{
x=a; y=b; radius=c;
}
void draw_circle()
{
float angle;
count++;
glColor3f(0.0f, 1.0f, 0.0f);
glLineWidth(1.0f);
glBegin(GL_LINE_LOOP);
{
for(int i = 0; i < 100; i++) {
angle = i*2*M_PI/100;
glVertex2f(x + (cos(angle) * radius), y + (sin(angle) * (radius)));
}}
glEnd();
}
friend void display_circle_data(Circle c); //Friend Function
};
int Circle::count=0;
//friend function
void display_circle_data(Circle c){
printf("\nRadius is %d\n",c.radius);
printf("Xvalue is %d\n",c.x);
printf("Yvalue is %d\n",c.y);
}
Circle x(0,0,5);
Circle y(399,399,5);
Circle z(x);
Circle* c5 = new Circle();
int main(int argc, char** argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGBA );
glutInitWindowSize( g_Width, g_Height );
glutInitWindowPosition( 0, 0 );
glutCreateWindow( "Danish game wala" );
init();
glutMouseFunc( myMouseFunction );
glutKeyboardFunc( myKeyboardFunction );
glutSpecialFunc( mySpecialKeysFunction );
glutMotionFunc(myMouseMoveFunction);
glutReshapeFunc( myReshapeFunction );
glutDisplayFunc( myDisplayFunction );
glutTimerFunc( 33, myTimerFunction, 0 );
//glutFullScreen();
//glutSetCursor( GLUT_CURSOR_NONE );
glutMainLoop();
return 0;
}
void init(void)
{
glClearColor( 0.0, 0.0, 0.0, 0.0 );
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(0.0, g_Width, 0.0, g_Height, -1.0, 1.0);
}
void myMouseFunction( int button, int state, int mouseX, int mouseY )
{
//glVertex2f(mouseX,mouseY);
printf("\nmouseX: %d mouseY: %d, State: %d",mouseX,mouseY,state);
Mx=mouseX; My=mouseY;
cout<<"C is pressed\n";
c5->set_data(mouseX,400-mouseY,5);
//for (int gravity=0;gravity<100;gravity++){
c5->draw_circle();
//glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// }
if (state==1){
cout<<"No of Circles are "<<(Circle::count)/2;
}
if(press =='d'){
cout<<"delete";
//delete c5;
}
else if(press =='s'){
}
if(press =='t'){
}
//xCircle s(mouseX,400-mouseY,5);
}
void myKeyboardFunction( unsigned char key, int mouseX, int mouseY )
{
if( key == 'c' ) // i.e. Esc key
{
press ='c';
//display_circle_data(s);
}
if (key=='d')
{press='d';
}
else if (key=='s')
{press='s';
}
if (key=='t')
{press='t';
}
if (key=='+')
{
}
if (key=='-')
{
}
else if(key==27)
exit(0);
}
void mySpecialKeysFunction(int key, int x, int y)
{
switch( key )
{
case GLUT_KEY_UP:
break;
case GLUT_KEY_DOWN:
break;
case GLUT_KEY_LEFT:
break;
case GLUT_KEY_RIGHT:
break;
case GLUT_KEY_HOME:
break;
case GLUT_KEY_END:
break;
case GLUT_KEY_PAGE_UP:
break;
case GLUT_KEY_PAGE_DOWN:
break;
}
}
void myReshapeFunction( int width, int height )
{
glClear(GL_COLOR_BUFFER_BIT);
g_Width = width;
g_Height = height;
glViewport (0, 0, g_Width, g_Height);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
glOrtho(0.0, g_Width, 0.0, g_Height, -1.0, 1.0);
}
void myTimerFunction( int val )
{
glutTimerFunc( 33, myTimerFunction, 0 );
myDisplayFunction();
}
int i=0;
void myDisplayFunction()
{
// glClearColor(0.0f, 0.0f, 0.0f, 1.0f );
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//x.draw_circle();
//y.draw_circle();
//s.draw_circle();
glutSwapBuffers();
}
void myMouseMoveFunction(int x,int y)
{
printf("Mouse moved at x:%d y:%d",x,y);
}