Código para el escenario:
#include <windows.h> #include <C:\GLUT\include\GL\glut.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #define PI 3.1415926535897932384626433832795 // colores R, G y B para el fondo de la ventana, de 0.0 a 255.0 #define CR_VENTANA 0 #define CG_VENTANA 0 #define CB_VENTANA 0 #define ANCHOAREA 500 // ancho para la ventana #define ALTOAREA 530 // alto para la ventana // color R, G y B para el fondo de la ventana de 0.0 a 255.0 #define CR_LINEAS 97 #define CG_LINEAS 98 #define CB_LINEAS 255 /** Descripcion: Proyecto 2D - Pac-Man con funciones reducidas * * Autores: * Karina Miranda Ramirez * Abigail Romero Gil * Edgar Villa Miguel. * Fecha de creacion: 09/03/17 * Revisiones: --- * programa. * Fecha de ultima actualizacion: 14/03/17 */ float dx,dy; /** * Traza circulos acorde a los parámetros recibidos * @param cx Coordenada x donde se ubicará el centro del circulo * @param cy Coordenada y donde se ubicará el centro del circulo * @param radio Medida que tendrá de radio el circulor * @param r Color rojo de un RGB de 0.0 a 1.0 * @param g Color verde de un RGB de 0.0 a 1.0lor * @param b Color azul de un RGB de 0.0 a 1.0 * @param a1 Inicio del trazo del circulo en radianes * @param a2 Fin del trazo del circulo en radianes */ void circulo( float cx, float cy, float radio, float r, float g, float b, float a1, float a2 ) { // glEnable( GL_LINE_SMOOTH ); glBegin( GL_POLYGON ); glColor3f(r,g,b); glVertex2f(cx,cy); for( float i = a1; i<= a2; i+=0.01 ) { dx = radio*cos(i) + cx; dy= radio*sin(i) + cy; glVertex2f(dx,dy); } glEnd(); } void key(unsigned char c, int x, int y) { int siAvanzo = 0; // verifica si se puede avanzar la G para entonces cambiar de color a G if ( c == 27 ) exit(0); // mueve G una posición a la izquierda al presionar 'a' o 'A' if ( (c == 'a' || c == 'A') ) { // // se mueve pacman } // mueva G una posición a la derecha al presionar 'd' o 'D' if ( (c =='d' || c == 'D') ) { // se mueve pacman } // mueve G una posición hacia abajo al presionar 's' o'S' if ( (c =='s' || c == 'S') ) { // se mueve pacman } // mueve G una posición hacia arriba al presionar 'w' o 'W' if ( (c =='w' || c == 'W') ) { // se mueve pacman } glutPostRedisplay(); } void glVertex2fp( double coordenadaX, double coordenadaY ) { glVertex2f( coordenadaX, (ALTOAREA) - coordenadaY ); } void pacman(float a,float b){ circulo( 12.5, 12.5, 12.5, 0.0, 0.0, 0.0, 0,6.3); circulo( 12.5, 12.5, 12.5, 1.0, 1.0, 0, a,b); } void display(void){ glClear( GL_COLOR_BUFFER_BIT ); // limpia, libera el buffer glLineWidth(3); glColor3f( CR_LINEAS/255.0, CG_LINEAS/255.0, CB_LINEAS/255.0 ); // establece el color /** ****************************************************************** */ glBegin( GL_LINE_STRIP ); // establece el modo de trazo // limite superior glVertex2f( 3, 212 ); glVertex2f( 94, 212 ); glVertex2f( 98, 208 ); glVertex2f( 98, 155 ); glVertex2f( 93, 151 ); glVertex2f( 8, 151 ); glVertex2f( 8, 8 ); glVertex2f( 236, 8 ); glVertex2f( 239, 11 ); glVertex2f( 239, 66 ); glVertex2f( 243, 70 ); glVertex2f( 256, 70 ); glVertex2f( 260, 66 ); glVertex2f( 260, 12 ); glVertex2f( 263, 8 ); glVertex2f( 491, 8 ); glVertex2f( 491, 151 ); glVertex2f( 405, 151 ); glVertex2f( 401, 156 ); glVertex2f( 401, 208 ); glVertex2f( 405, 212 ); glVertex2f( 496, 212 ); glEnd(); /** ****************************************************************** */ /** ------------------------------------------------------------------ */ // rectangulos superiores de izquierda a derecha glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 46, 71 ); glVertex2f( 94, 71 ); glVertex2f( 98, 66 ); glVertex2f( 98, 46 ); glVertex2f( 93, 41 ); glVertex2f( 46, 41 ); glVertex2f( 41, 45 ); glVertex2f( 41, 66 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 135, 71 ); glVertex2f( 202, 71 ); glVertex2f( 206, 66 ); glVertex2f( 206, 46 ); glVertex2f( 202, 41 ); glVertex2f( 135, 41 ); glVertex2f( 132, 45 ); glVertex2f( 132, 66 ); glEnd(); glBegin( GL_LINE_LOOP );// establece el modo de trazo glVertex2f( 298, 71 ); glVertex2f( 363, 71 ); glVertex2f( 367, 66 ); glVertex2f( 367, 46 ); glVertex2f( 363, 41 ); glVertex2f( 298, 41 ); glVertex2f( 294, 45 ); glVertex2f( 294, 66 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 405, 71 ); glVertex2f( 453, 71 ); glVertex2f( 458, 66 ); glVertex2f( 458, 46 ); glVertex2f( 453, 41 ); glVertex2f( 406, 41 ); glVertex2f( 401, 45 ); glVertex2f( 401, 66 ); glEnd(); // Rectangulos pequeños /** +++++++++++++++++++++++++++++++++++++++++++++++++++ */ glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 46, 117 ); glVertex2f( 94, 117 ); glVertex2f( 98, 115 ); glVertex2f( 98, 108 ); glVertex2f( 93, 104 ); glVertex2f( 46, 104 ); glVertex2f( 41, 109 ); glVertex2f( 41, 113 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 405, 117 ); glVertex2f( 453, 117 ); glVertex2f( 458, 115 ); glVertex2f( 458, 108 ); glVertex2f( 453, 104 ); glVertex2f( 406, 104 ); glVertex2f( 401, 109 ); glVertex2f( 401, 113 ); glEnd(); /** +++++++++++++++++++++++++++++++++++++++++++++++++++ */ glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 135, 212 ); glVertex2f( 148, 212 ); glVertex2f( 152, 208 ); glVertex2f( 152, 169 ); glVertex2f( 156, 165 ); glVertex2f( 202, 165 ); glVertex2f( 205, 161 ); glVertex2f( 205, 155 ); glVertex2f( 202, 151 ); glVertex2f( 156, 151 ); glVertex2f( 152, 148 ); glVertex2f( 152, 108 ); glVertex2f( 148, 104 ); glVertex2f( 135, 104 ); glVertex2f( 131, 108 ); glVertex2f( 131, 208 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 243, 165 ); glVertex2f( 256, 165 ); glVertex2f( 259, 161 ); glVertex2f( 259, 121 ); glVertex2f( 263, 118 ); glVertex2f( 310, 118 ); glVertex2f( 313, 113 ); glVertex2f( 313, 108 ); glVertex2f( 310, 105 ); glVertex2f( 189, 105 ); glVertex2f( 185, 108 ); glVertex2f( 185, 114 ); glVertex2f( 189, 118 ); glVertex2f( 234, 118 ); glVertex2f( 239, 121 ); glVertex2f( 239, 161 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 350, 212 ); glVertex2f( 363, 212 ); glVertex2f( 367, 208 ); glVertex2f( 367, 108 ); glVertex2f( 363, 104 ); glVertex2f( 351, 104 ); glVertex2f( 347, 108 ); glVertex2f( 347, 148 ); glVertex2f( 343, 151 ); glVertex2f( 297, 151 ); glVertex2f( 293, 155 ); glVertex2f( 293, 161 ); glVertex2f( 297, 165 ); glVertex2f( 343, 165 ); glVertex2f( 347, 169 ); glVertex2f( 347, 208 ); glEnd(); /** ------------------------------------------------------------------ */ // cuadro central /** $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ glLineWidth(5); glBegin( GL_LINE_STRIP ); // establece el modo de trazo glVertex2f( 233, 202 ); glVertex2f( 188, 202 ); glVertex2f( 188, 256 ); glVertex2f( 310, 256 ); glVertex2f( 310, 202 ); glVertex2f( 268, 202 ); glEnd(); glColor3f( 255/255.0, 184/255.0, 255/255.0 ); // establece el color glLineWidth(2); glBegin( GL_LINES ); // establece el modo de trazo glVertex2f( 233, 201 ); glVertex2f( 268, 201 ); glEnd(); /** $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ */ // figuras inferiores glColor3f( CR_LINEAS/255.0, CG_LINEAS/255.0, CB_LINEAS/255.0 ); // establece el color glLineWidth(3); /** ****************************************************************** */ glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 135, 306 ); glVertex2f( 148, 306 ); glVertex2f( 151, 303 ); glVertex2f( 151, 250 ); glVertex2f( 148, 245 ); glVertex2f( 135, 245 ); glVertex2f( 131, 250 ); glVertex2f( 131, 303 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 351, 306 ); glVertex2f( 363, 306 ); glVertex2f( 368, 303 ); glVertex2f( 368, 250 ); glVertex2f( 363, 245 ); glVertex2f( 351, 245 ); glVertex2f( 348, 250 ); glVertex2f( 348, 303 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 135, 354 ); glVertex2f( 201, 354 ); glVertex2f( 206, 350 ); glVertex2f( 206, 344 ); glVertex2f( 202, 340 ); glVertex2f( 136, 340 ); glVertex2f( 132, 344 ); glVertex2f( 132, 350 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 297, 354 ); glVertex2f( 363, 354 ); glVertex2f( 367, 350 ); glVertex2f( 367, 344 ); glVertex2f( 363, 340 ); glVertex2f( 297, 340 ); glVertex2f( 293, 344 ); glVertex2f( 293, 350 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 243, 354 ); glVertex2f( 256, 354 ); glVertex2f( 259, 350 ); glVertex2f( 259, 310 ); glVertex2f( 263, 306 ); glVertex2f( 310, 306 ); glVertex2f( 313, 303 ); glVertex2f( 313, 297 ); glVertex2f( 310, 293 ); glVertex2f( 189, 293 ); glVertex2f( 185, 297 ); glVertex2f( 185, 303 ); glVertex2f( 189, 306 ); glVertex2f( 234, 306 ); glVertex2f( 239, 310 ); glVertex2f( 239, 350 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 243, 448 ); glVertex2f( 256, 448 ); glVertex2f( 259, 444 ); glVertex2f( 259, 405 ); glVertex2f( 263, 400 ); glVertex2f( 310, 400 ); glVertex2f( 313, 397 ); glVertex2f( 313, 391 ); glVertex2f( 310, 387 ); glVertex2f( 189, 387 ); glVertex2f( 185, 391 ); glVertex2f( 185, 397 ); glVertex2f( 189, 400 ); glVertex2f( 234, 400 ); glVertex2f( 239, 405 ); glVertex2f( 239, 444 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 81, 401 ); glVertex2f( 93, 401 ); glVertex2f( 98, 396 ); glVertex2f( 98, 344 ); glVertex2f( 93, 340 ); glVertex2f( 46, 340 ); glVertex2f( 42, 344 ); glVertex2f( 42, 350 ); glVertex2f( 46, 354 ); glVertex2f( 74, 354 ); glVertex2f( 78, 358 ); glVertex2f( 78, 396 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 405, 401 ); glVertex2f( 418, 401 ); glVertex2f( 421, 396 ); glVertex2f( 421, 358 ); glVertex2f( 425, 354 ); glVertex2f( 453, 354 ); glVertex2f( 457, 349 ); glVertex2f( 457, 344 ); glVertex2f( 452, 340 ); glVertex2f( 405, 340 ); glVertex2f( 401, 345 ); glVertex2f( 401, 396 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 46, 448 ); glVertex2f( 202, 448 ); glVertex2f( 206, 444 ); glVertex2f( 206, 438 ); glVertex2f( 202, 435 ); glVertex2f( 156, 435 ); glVertex2f( 152, 430 ); glVertex2f( 152, 392 ); glVertex2f( 148, 388 ); glVertex2f( 135, 388 ); glVertex2f( 132, 392 ); glVertex2f( 132, 430 ); glVertex2f( 127, 435 ); glVertex2f( 46, 435 ); glVertex2f( 42, 439 ); glVertex2f( 42, 445 ); glEnd(); glBegin( GL_LINE_LOOP ); // establece el modo de trazo glVertex2f( 297, 448 ); glVertex2f( 453, 448 ); glVertex2f( 457, 444 ); glVertex2f( 457, 438 ); glVertex2f( 453, 435 ); glVertex2f( 371, 435 ); glVertex2f( 367, 430 ); glVertex2f( 367, 392 ); glVertex2f( 363, 388 ); glVertex2f( 351, 388 ); glVertex2f( 347, 392 ); glVertex2f( 347, 430 ); glVertex2f( 343, 435 ); glVertex2f( 297, 435 ); glVertex2f( 293, 439 ); glVertex2f( 293, 445 ); glEnd(); /** ****************************************************************** */ /** ------------------------------------------------------------------ */ glBegin( GL_LINE_STRIP ); // establece el modo de trazo // limite inferior glVertex2f( 3, 246 ); glVertex2f( 94, 246 ); glVertex2f( 98, 251 ); glVertex2f( 98, 303 ); glVertex2f( 93, 307 ); glVertex2f( 8, 307 ); glVertex2f( 8, 383 ); glVertex2f( 12, 387 ); glVertex2f( 40, 387 ); glVertex2f( 44, 391 ); glVertex2f( 44, 396 ); glVertex2f( 40, 401 ); glVertex2f( 12, 401 ); glVertex2f( 8, 405 ); glVertex2f( 8, 482 ); glVertex2f( 491, 482 ); glVertex2f( 491, 405 ); glVertex2f( 488, 401 ); glVertex2f( 460, 401 ); glVertex2f( 455, 398 ); glVertex2f( 455, 391 ); glVertex2f( 459, 387 ); glVertex2f( 488, 387 ); glVertex2f( 490, 383 ); glVertex2f( 490, 306 ); glVertex2f( 406, 306 ); glVertex2f( 401, 303 ); glVertex2f( 401, 250 ); glVertex2f( 406, 245 ); glVertex2f( 496, 245 ); glEnd(); /** ------------------------------------------------------------------ */ glFlush(); // libera memoria glFlush(); // libera memoria } void relacionDeAspecto(int ancho, int alto) { float aspectratio; aspectratio = 1; if (1>(ancho/alto)) { // glViewport recibe 4 parametros, uno el origen en x, y y otro el ancho y otro el alto glViewport(0, 0, ancho, ancho/aspectratio); } else { glViewport(0, 0, alto*aspectratio,alto); } } int main(int argc, char** argv){ glutInit(&argc, argv); // Inicializa la libreria GLUT // glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB ); glutInitWindowSize( ANCHOAREA, ALTOAREA - 30 ); // Inicializa el tamaño de la ventana glutInitWindowPosition(10,50); // posicion de la ventana glutCreateWindow("PAC-MAN"); // crea la ventana glClearColor( CR_VENTANA/255.0, CG_VENTANA/255.0, CB_VENTANA/255.0, 0); // establece el color de fondo de la ventana gluOrtho2D( 0, ANCHOAREA, ALTOAREA, 0 ); glutDisplayFunc(display); glutReshapeFunc(relacionDeAspecto); // permite redimensionar la ventana de manera apropiada glutKeyboardFunc(key); glutMainLoop(); return 0; }
Código para los fantasmas y pac-man:
#include <windows.h> #include <C:\GLUT\include\GL\glut.h> #include <stdlib.h> #include <math.h> float dx,dy;//variables del circulo float x,y,z; //colores de los fantasmas float a,b; //boca del pacman void circulo( float cx, float cy, float radio, float r, float g, float b, float a1, float a2 ) { // glEnable( GL_LINE_SMOOTH ); glBegin( GL_POLYGON ); glColor3f(r,g,b); glVertex2f(cx,cy); for( float i = a1; i<= a2; i += 0.01 ) { dx = radio*cos(i) + cx; dy= radio*sin(i) + cy; glVertex2f(dx,dy); } glEnd(); } void fantasma (float x,float y,float z){ glClear( GL_COLOR_BUFFER_BIT ); //cabeza del fantasma circulo( 12.5, 12.5, 12.5, x, y, z, 3.14159,6.28319);//fantasma rojo //rectangulo del fantasma glBegin( GL_POLYGON ); glColor3f(x,y,z); glVertex2i(0,11); glVertex2i(25,11); glVertex2i(25,21); glVertex2i(0,21); glEnd(); //puntas del fantasma //PUNTA 1 glBegin( GL_POLYGON ); glColor3f(x,y,z); glVertex2i(0,21); glVertex2i(8,21); glVertex2i(7,25); glVertex2i(1,25); glEnd(); //PUNTA 2 glBegin( GL_POLYGON ); glColor3f(x,y,z); glVertex2i(8,21); glVertex2i(17,21); glVertex2i(16,25); glVertex2i(9,25); glEnd(); //PUNTA 3 glBegin( GL_POLYGON ); glColor3f(x,y,z); glVertex2i(17,21); glVertex2i(25,21); glVertex2i(24,25); glVertex2i(19,25); glEnd(); //Ojos del fantasma blanco circulo( 6, 10, 4, 1.0, 1.0, 1.0, 0,6.28319); circulo( 17, 10, 4, 1.0, 1.0, 1.0, 0,6.28319); //ojos del fantasma negro circulo( 6, 8, 2, 0.0, 0.0, 0.0, 0,6.28319); circulo( 17, 8, 2, 0.0, 0.0, 0.0, 0,6.28319); glFlush(); } void pacman(float a,float b){ circulo( 12.5, 12.5, 12.5, 0.0, 0.0, 0.0, 0,6.3); circulo( 12.5, 12.5, 12.5, 1.0, 1.0, 0, a,b); } void display(void){ glClear( GL_COLOR_BUFFER_BIT ); fantasma(1.0,0.0,1.0); // pacman(0,5.4); glFlush(); } int main(int argc, char** argv){ glutInit(&argc, argv); glutInitWindowSize(510,540); glutInitWindowPosition(10,50); glutCreateWindow("PACMAN"); glClearColor( 0.0, 0.0, 0.0, 0); gluOrtho2D( 0, 30, 30, 0); glutDisplayFunc(display); glutMainLoop(); return 0; }
No hay comentarios.:
Publicar un comentario