VPN termux about China.net

opengl texsture C player

#ifdef __APPLE__
#include<GLUT/glut.h>
#include<openGL/openGL.h>

#else
#include<GL/glut.h>
#endif
#include <stdlib.h>
#include <string.h>
 #include <GL/gl.h>
#include <GL/glu.h>
#include<GL/glut.h>
#include <stdio.h>

#define  LIST_OBJECT 128
//tak dla szpanu niewiem co to robi chyba nic p.
#define  molloc sizeof(*LIST_OBJECT) EOF
#define checkImageWidth 32
#define checkImageHeight 16
enum
{
    PLAY,
   PAUSE,
    EXIT // wyjście
};
unsigned int i;
GLfloat d = 0.1;



struct kulka
{     
            
GLfloat x;
GLfloat y ;

} kulka={0.0, -0.5} , wall= {1.0 , 1.0} , speed= {0.03, 0.04}, quad;
            
struct point
{
GLfloat x;
GLfloat y;
}point;

namespace glut {


//it's machine code (machinegun)

GLubyte checkImage[checkImageHeight][checkImageWidth][3];

static GLint height;
void makeCheckImage(void)
{
int i, j, c, d;
for (i = 0; i < checkImageHeight; i++) {
for (j = 0; j < checkImageWidth; j++) {
c = ((((i&0xc0)==0)^((j&0xff))==0))*255;

checkImage[i][j][3] = (GLubyte) c;
checkImage[i][j][3] = (GLubyte) c;
checkImage[i][j][3] = (GLubyte) c;

}
}
}


bool CreateList()
{
  glEnable(GL_DEPTH_TEST);  
  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
makeCheckImage();
int c=127;
do
{
 glNewList(LIST_OBJECT *c, GL_COMPILE);
{
c--;                                          
glColor3f(1.0,1.0,.0);

glRasterPos2f(0.0, 0.0);
    glDrawPixels(checkImageWidth, checkImageHeight, GL_RGB,
GL_UNSIGNED_BYTE, checkImage);

glFlush ();
glEndList();

}
}while (c > 0);
if(LIST_OBJECT *c>0)
return 1;
else
return 0;
}

bool enemy()
{

int a=0;

int i=113;

quad.x=0.9;
quad.y=0.9;
point.x=0.9;
point.y=0.9;

glBegin(GL_LINE);
glVertex2f(-quad.x, quad.y);
glVertex2f(quad.x, quad.y);
glVertex2f(quad.x, 0.0);
glVertex2f(-quad.x, 0.0);
glEnd();

do

{
if ( point.y<0.12)
{
point.y=quad.y;
point.x=point.x-0.12;

}
i--;

glPushMatrix();
glTranslatef(point.x ,point.y, 0.0);
  glCallList(LIST_OBJECT *i);
 glPopMatrix();

point.y=point.y-0.12;



 if (((point.y-0.02)<kulka.y+d) &&   (kulka.x<d +(point.x-0.02) )&& ((point.x-0.02)<d+kulka.x) &&((kulka.y-0.02)<d+point.y)  )
{
glDeleteLists(LIST_OBJECT *i, 1 );
#define delete (*LIST_OBJECT 128);
 #define free (*LIST_OBJECT 128);

}  
}
 while(i>0);


 
 glFlush ();
if ( a=113)
return 1;
else
return 0;
}

};
namespace glut {

const GLdouble left = - 10.0;
const GLdouble right = 10.0;
const GLdouble bottom = - 10.0;
const GLdouble top = 10.0;
const GLdouble near = 50.0;
const GLdouble far = 70.0;

GLfloat x2 , y2=-0.7;
int button_state = GLUT_UP;
int button_x, button_y;

void drawBall2(GLfloat a, GLfloat b)
{

    glColor3f(1.0,0.0,.0);

    glPushMatrix();

    glTranslatef(x2, y2,0.0);

    glutSolidSphere(d,20,20);

    glPopMatrix();


}

void MouseButton( int button, int state, int x, int y )
{
    if( button == GLUT_LEFT_BUTTON )
    {
        // zapamiętanie stanu lewego przycisku myszki
        button_state = state;
       
        // zapamiętanie położenia kursora myszki
        if( state == GLUT_DOWN )
        {
            button_x = x;
            button_y = y;
        }
    }
}


void MouseMotion( int x, int y )
{
    if( button_state == GLUT_DOWN )
    {
        x2 += 0.7 *( right - left ) / glutGet( GLUT_WINDOW_WIDTH ) *( x - button_x );
        button_x = x;
        y2 += 0.7 *( top - bottom ) / glutGet( GLUT_WINDOW_HEIGHT ) *( button_y - y );
        button_y = y;

    }
}

       



void drawBall1()
{

    glColor3f(0.0,1.0,.0);

    asm ("call    glPushMatrix \n");

    glTranslatef(kulka.x,kulka.y,0.0);

    glutSolidSphere(d,20,20);

    asm("call    glPopMatrix \n");
}


void update()
{

kulka.x+=speed.x;
kulka.y+=speed.y;
quad.x+=speed.x;
quad.y+=speed.y;

if (kulka.x>wall.x)
{
speed.x=-speed.x;
}
if ( kulka.y>wall.y)
{
speed.y=-speed.y;
}
  if(kulka.x<-wall.x)
 {
speed.x=-speed.x;
}

if((  kulka.y<d + y2) && (kulka.x <d +x2  )&& (x2-kulka.x<d) )
{

speed.y=-speed.y;
}

}


};
/***********************************************************************************\

     W I N D O W S     D E F I N I T I O N S    A N D    V A R I A B L E S
       
\***********************************************************************************/
#define WIDTH  600                                   /* Frame Width is 600 pixels  */
#define HEIGHT 600                                   /* Frame Height is 600 pixels */
#define TITLE  "alfa arkanoid glut"         /* Frame Title                */
int winIdMain;                                       /* Main Window handle         */
int winIdSub;                                        /* Sub-Window handle          */
int menIdMain;                                       /* Main menu handle           */
int menIdSub;                                        /* Sub-menu handle            */
int menIdSubMain;                                    /* Main menu for sub-window handle */
 /***********************************************************************************\

     A N I M A T I O N    &   S C E N E   D E F I N I T I O N S  A N D

                              V A R I A B L E S
       
\***********************************************************************************/
                    /* Small translation distance  */
#define TIME_STEP    0.1
static double rotation_angle = 0.0;                 /* Current angle increment     */
static double translation_distance = 0.0;           /* Current translation increment */
static double time = 0.0;                           /* Current time                */
static double spin = 0.0;                           /* Current Spin Angle          */
static double center = 0.0;                         /* Current Center of Gravity   */
static int object= PAUSE ;               /* Object to use in scene      */
/***********************************************************************************\

     F U N C T I O N S    &    V A R I A B L E S    F O R   S T R I N G

                                R A S T E R I N G
       
\***********************************************************************************/
static char label[100];                            /* Storage for current string   */
/* Draw the  string *s one character at a time using GLUT's bitmap
   rendering utility  */
void 
drawString (char *s)
{
  unsigned int i;
  for (i = 0; i < strlen (s); i++)
    glutBitmapCharacter (GLUT_BITMAP_HELVETICA_10, s[i]);
};
/*  Same as before but using a larger font bitmap   */
void 
drawStringBig (char *s)
{
  unsigned int i;
  for (i = 0; i < strlen (s); i++)
    glutBitmapCharacter (GLUT_BITMAP_HELVETICA_18, s[i]);
};
/***********************************************************************************\

        W I N D O W S   U P D A T I N G   C A L L B A C K   F U N C T I O N S
       
\***********************************************************************************/
void 
mainDisplay (void)
{
  /* Clean drawing board */
  glutSetWindow (winIdMain);
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
  glLoadIdentity ();
 glShadeModel(GL_SMOOTH);
glColor3f(1,0,0);
    switch( object )
    {
        // kula


    case PLAY:

 glut:: drawBall1();
glut::update();
glut::enemy();
 glut::drawBall2(glut::x2, glut::y2);

        break;  
        // stożek

    case PAUSE:

    glutWireTorus( 0.2, 1, 10, 20 );
        break;

    case EXIT:
        exit( 0) ;
    }
    glFlush();
  glutSwapBuffers ();
};
/* Another display function, this one will be 
   used to update the graphic subwindow */
void 
subDisplay ()
{
  /* Clear subwindow */
  glutSetWindow (winIdSub);
  glClearColor (0.25, 0.25, 0.25, 0.0);
  glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  /* Draw border */
  glColor3f (0.0F, 1.0F, 0.0F);
  glBegin (GL_LINE_LOOP);
  glVertex2f (0.0F, 0.0F);
  glVertex2f (0.0F, 0.99F);
  glVertex2f (0.999F, 0.99F);
  glVertex2f (0.999F, 0.0F);
  glEnd ();
  /* Write State Variables */
  glColor3f (1.0F, 1.0F, 1.0F);
  sprintf (label, "Time = %8.3f ", time);
  glRasterPos2f (0.05F, 0.75F);
  drawString (label);
  sprintf (label, "Rotation Angle = %8.3f ", spin);
  glRasterPos2f (0.05F, 0.55F);
  drawString (label);
  sprintf (label, "notepadpl = %8.3f ", spin / time);
  glRasterPos2f (0.05F, 0.35F);
  drawString (label);
  /* Write Banner and info */
  glColor3f (1.0F, 0.0F, 1.0F);
  sprintf (label, "arkanoid glut");
  glRasterPos2f (0.40F, 0.70F);
  drawStringBig (label);
  sprintf (label, "notepadpl ");
  glRasterPos2f (0.33F, 0.35F);
  drawStringBig (label);
  glutSwapBuffers ();
};
/* Callback function for reshaping the main window */
void 
mainReshape (int w, int h)
{
  /* Viewing and Projection transformations */
  glViewport (0, 0, w, h);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluOrtho2D (-1.0F, 1.0F, -1.0F, 1.0F);
  glMatrixMode (GL_MODELVIEW);
  glLoadIdentity ();

  /* Invoke subwindow reshape */
  glutSetWindow (winIdSub);
  glutReshapeWindow (w - 10, h / 10);
  glutPositionWindow (5, 5);
  glutSetWindow (winIdMain);

};
/* Callback function for reshaping the subwindow */
void 
subReshape (int w, int h)
{
  glViewport (0, 0, w, h);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();
  gluOrtho2D (0.0F, 1.0F, 0.0F, 1.0F);
};

/***********************************************************************************\

        K E Y B O A R D    I N P U T   H A N D L I N G
       
  Active Keys : i, I, q, Q

      i, I       switch on and off the info banner
      q, Q       quit the program

  Note: parameters  x and y correspond to the current location of the mouse
                   and they are not used in the program

\***********************************************************************************/
/* Now comes a function that processes keyboard events */
void 
keyboard (unsigned char key, int x, int y)
{
  static int info_banner = 1;

  switch (key)
    {
    case 'i':
    case 'I':
      if (info_banner)
    {
      glutSetWindow (winIdSub);
      glutHideWindow ();
    }
      else
    {
      glutSetWindow (winIdSub);
      glutShowWindow ();
    };
      info_banner = !info_banner;
      break;
    case 'q':
    case 'Q':
      exit (0);
      break;
    };
};
/***********************************************************************************\

        M E N U    E V E N T S    H A N D L I N G
       
\***********************************************************************************/
void
mainMenu(int value){
  static int is_rotation = 0;       
  static int is_translation = 0;
    switch( value )
    {
    case 1:
        object = PLAY;
      mainDisplay();
        break;
        // cylinder
    case 2:
        object = PAUSE;
     mainDisplay();
        break;      
        // wyjście
    case 3:
        exit( 0 );
    }
};
void dummy(int value){};
/***********************************************************************************\

                               A N I M A T I O N    
       
\***********************************************************************************/
/* There can be only one idle() callback function. In an
   animation, this idle() function must update not only the
   main window but also all derived subwindows */
void 
idle (void)
{
  /* Update  state variables */
  time += TIME_STEP;
  spin += rotation_angle;
  center += translation_distance;
  if(center > 1.0) center -= 2.0;

  /* Update main and sub window */
  glutSetWindow (winIdMain);
  glutPostRedisplay ();
  glutSetWindow (winIdSub);
  glutPostRedisplay ();
};



/***********************************************************************************\

    M A I N :  Initializes GLUT machine, opens frames, windows and menus and
                              runs GLUT's  main loop                        
       
         IMPORTANT NOTE:  Pay attention to the order of the elements


\***********************************************************************************/
int 
main (int argc, char *argv[])
{
  /* Glut initializations */
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowPosition (5, 5);
  glutInitWindowSize (WIDTH, HEIGHT);
  /* Main window creation and setup */
  winIdMain = glutCreateWindow (TITLE);
 glut::CreateList();

  glutDisplayFunc (mainDisplay);
  glutReshapeFunc (mainReshape);
  glutKeyboardFunc (keyboard);
  glutIdleFunc (idle);
 glutMotionFunc( glut::MouseMotion );
glutPassiveMotionFunc( glut::MouseMotion );
  glutMouseFunc( glut::MouseButton );
  /* Create main menu */
  menIdMain = glutCreateMenu(mainMenu);
  glutAddMenuEntry("play", 1);
  glutAddMenuEntry("pause", 2);
  glutAddMenuEntry("Quit", 3);
  glutAttachMenu(GLUT_RIGHT_BUTTON);
  /* Sub window creation and setup */
  winIdSub = glutCreateSubWindow (winIdMain, 5, 5, WIDTH - 10, HEIGHT / 10);
  glutDisplayFunc (subDisplay);
  glutReshapeFunc (subReshape);
  /* Create main menu for subwindow */
  menIdSubMain = glutCreateMenu(dummy);
  glutAddMenuEntry("This is a dummy menu", 1);
  glutAttachMenu(GLUT_RIGHT_BUTTON);
  glutMainLoop ();
  return 0;
};

No comments:

Post a Comment