viernes, 5 de octubre de 2012

Proyecto pelota rebota

Algoritmo del programa
·         Inicio del programa
·         Posición actual de la pelota
·         Tamaño de la pelota
·         Tamaño del piso
·         Tamaño de la ventana
·         Dibujar la pelota
·         Dibujar el piso
·         Distancia de rebote del piso hacia arriba
·         Modificar la distancio respecto al piso
·         Saber si esta cállenlo o rebotando
·         Verificar que no pase del piso
·         Dirección de la pelota
·         Disminuir la altura hasta quedar estática en el piso
·         Fin del programa.

Codigo del programa
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#define WIDTH 640
#define HEIGHT 680

  
    void reshape(int width, int height){
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-WIDTH/2,WIDTH/2-1,-HEIGHT/2,HEIGHT/2-1,-1,1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    }
       void init(void){
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glPointSize(0.0);
      }
       void Timer(int ex)
    {
    glutPostRedisplay();
    glutTimerFunc(30,Timer,0);
    }
      int k=20;
    void circle(int p,int m)
    {
    int x=0,y,d,r;
    r=m;
    y=r;
    d=3-2*r;
    while(x<=y)
    {
    glVertex2i(-x,y+p);
     glVertex2i(x,y+p);
    glVertex2i(y,x+p);
    glVertex2i(-x,y+p);
    glVertex2i(-y,x+p);
    glVertex2i(-x,-y+p);
    glVertex2i(-y,-x+p);
    glVertex2i(y,-x+p);
   glVertex2i(x,-y+p);
    if(d<0)
    d=d+4*x+6;
    else
    {
    d=d+4*(x-y)+10;
   y--;
    }
    x++;
    }
    }
   int r=100,flag=0;
  
    void display(void)
    {
              typedef GLfloat point2[2];
  point2 vertice[6] = {   {-100.0,-100.0},  {-500.0,-100.0},  {-50.0,50.0},
  {-50.0,50.0},  {100.0,50.0},  {100.0,50.0} };
  glColor3f(0.0,1.0,0.0);
  {
   glClear(GL_COLOR_BUFFER_BIT);
  glBegin(GL_QUADS);
          glVertex2f (-500, -240);
         glVertex2f (0, -100);
          glVertex2f (500, -240);
           glVertex2f (0, -480);
  }
                                 glEnd();

glBegin(GL_LINES);
{
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-100,-130);//1
                glVertex2d(100,-130);
                glColor3f(0.0,0.0,0.0);//
                glVertex2d(-400,-230);
                glVertex2d(400,-230);
               glColor3f(0.0,0.0,0.0);
                glVertex2d(-200,-150);
                glVertex2d(200,-150);
             glColor3f(0.0,0.0,0.0);
                glVertex2d(-270,-170);
                glVertex2d(270,-170);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-310,-190);
                glVertex2d(310,-190);

                glColor3f(0.0,0.0,0.0);
                glVertex2d(-360,-210);
                glVertex2d(360,-210);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-450,-250);
                glVertex2d(450,-250);
              glColor3f(0.0,0.0,0.0);
                glVertex2d(-400,-270);
                glVertex2d(400,-270);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-400,-390);
                glVertex2d(400,-390);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-450,-310);
                glVertex2d(450,-310);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-400,-330);
                glVertex2d(400,-330);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-400,-350);
                glVertex2d(400,-350);
                //verticales
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-0.0,-100);
                glVertex2d(-0.0,-400);

                glColor3f(0.0,0.0,0.0);
                glVertex2d(-50,-50);
                glVertex2d(-50,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-100,-120);
                glVertex2d(-100,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-150,-100);
                glVertex2d(-150,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-200,-80);
                glVertex2d(-200,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-250,-60);
                glVertex2d(-250,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-300,-40);
                glVertex2d(-300,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(-350,-200);
                glVertex2d(-350,-400);
//
                glColor3f(0.0,0.0,0.0);
                glVertex2d(50,-50);
                glVertex2d(50,-400);

                glColor3f(0.0,0.0,0.0);
                glVertex2d(100,-120);
                glVertex2d(100,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(150,-100);
                glVertex2d(150,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(200,-80);
                glVertex2d(200,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(250,-60);
                glVertex2d(250,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(300,-40);
                glVertex2d(300,-400);
                glColor3f(0.0,0.0,0.0);
                glVertex2d(350,-200);
                glVertex2d(350,-400);
                    }

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.1,0.5,1.0);
    glBegin(GL_POINTS);

    circle(k,r);
  
  
    if(flag==0)
    {
    if((k+r)<=350)
    {
    k=k+10;
  
    }
  
    if((k+r)>=350){
    flag=1;
  
    }
    }
  
    if(flag==1)
    {
    k=k-10;
  
  
    if((k-r)<=-210)
    {
flag=2;
}
    }
                if(flag==2)
    {
    if((k+r)<=300)
    {
    k=k+10;
  
    }
  
    if((k+r)>=300){
    flag=3;
  
    }
    }
                 if(flag==3)
    {
    k=k-10;
  
  
    if((k-r)<=-210)
    {
flag=4;
}
    }
if(flag==4)
    {
    if((k+r)<=200)
    {
    k=k+10;
  
    }
  
    if((k+r)>=200){
    flag=5;
  
    }
    }
if(flag==5)
    {
    k=k-10;
  
  
    if((k-r)<=-210)
    {
flag=6;
                              
}
   
if(flag==6)
{
                k;
 
  
    glEnd();
    glutSwapBuffers();
    }
  
void idle(void){
 
}
  
    int main(int argc, char **argv)
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition(0,0);
    glutInitWindowSize(WIDTH,HEIGHT);
glutCreateWindow(argv[0]);
init();
glutIdleFunc(idle);
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutTimerFunc(0,Timer,0);
    glutMainLoop();
    return(1);
    }

Ejecucion del programa

No hay comentarios:

Publicar un comentario