示例#1
0
void buttonRender (void)
{
    int i;
    Rect r;
    for (i=0; i<nbuttons; i++) {
        if (button[i].over) {
            glColor3f(0.5f, 0.5f, 0.5f);
            //draw a highlight around button
            glLineWidth(2);
            glBegin(GL_LINE_LOOP);
            glVertex2i(button[i].r.left-2,  button[i].r.bot-2);
            glVertex2i(button[i].r.left-2,  button[i].r.top+2);
            glVertex2i(button[i].r.right+2, button[i].r.top+2);
            glVertex2i(button[i].r.right+2, button[i].r.bot-2);
            glVertex2i(button[i].r.left-2,  button[i].r.bot-2);
            glEnd();
            glLineWidth(1);
        }
        if (button[i].down) {
            glColor3fv(button[i].color);
        }
        else {
            glColor3fv(button[i].color);
        }
        glBegin(GL_QUADS);
        glVertex2i(button[i].r.left,  button[i].r.bot);
        glVertex2i(button[i].r.left,  button[i].r.top);
        glVertex2i(button[i].r.right, button[i].r.top);
        glVertex2i(button[i].r.right, button[i].r.bot);
        glEnd();
        r.left = button[i].r.centerx;
        r.bot  = button[i].r.centery-8;
        r.center = 1;
        if (button[i].down) {
            ggprint16(&r, 0, button[i].text_color, "Pressed!");
        }
        else {
            ggprint16(&r, 0, button[i].text_color, button[i].text);
        }
    }
}
示例#2
0
//The Display of the game 
void render(Game *game)
{
    float w, h, x, y;
    Duck *d = game->duck;
    deadDuck *dd = game->deadD;
    freeDuck *fd = game->freeD;
    Dog *doge = game->dog;
    happyDog *hdoge = game->hdog;
    laughingDog *ldoge = game->ldog;
    struct timespec dt;
    clock_gettime(CLOCK_REALTIME, &dt);

    glColor3ub(255, 255, 255);

    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    //Background and Gameover being displayed
    if(background) {
        glBindTexture(GL_TEXTURE_2D, backgroundTexture);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 1.0f); glVertex2i(0, 0);
        glTexCoord2f(0.0f, 0.0f); glVertex2i(0, WINDOW_HEIGHT);
        glTexCoord2f(1.0f, 0.0f); glVertex2i(WINDOW_WIDTH, WINDOW_HEIGHT);
        glTexCoord2f(1.0f, 1.0f); glVertex2i(WINDOW_WIDTH, 0);
        glEnd();
    }
    if(gameover) {
        glBindTexture(GL_TEXTURE_2D, gameoverbgTexture);
        glBegin(GL_QUADS);
        glTexCoord2f(0.0f, 1.0f); glVertex2i(0, 0);
        glTexCoord2f(0.0f, 0.0f); glVertex2i(0, WINDOW_HEIGHT);
        glTexCoord2f(1.0f, 0.0f); glVertex2i(WINDOW_WIDTH, WINDOW_HEIGHT);
        glTexCoord2f(1.0f, 1.0f); glVertex2i(WINDOW_WIDTH, 0);
        glEnd();
    }
    glDisable(GL_TEXTURE_2D);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, 0);
    //----------------------------------------

    //Drawing Shapes
    glColor3ub(255, 255, 255);
    glBegin(GL_LINES);
    glVertex2f(0.0, game->floor);
    glVertex2f(WINDOW_WIDTH, game->floor);
    glEnd();

    Rect r;
    r.bot = WINDOW_HEIGHT - 550;
    r.left = WINDOW_WIDTH - 715;
    r.center = 0;

    menu(game);


    Shape *s;

    //Displaying bullets
    glColor3ub(90, 140, 90);
    s = &game->box[0];
    glPushMatrix();
    glTranslatef(s->center.x, s->center.y, s->center.z);
    w = s->width;
    h = s->height;
    int num = 0, dist = 0;
    if (game->bullets == 3) {
        num = 3, dist = 80;
    }
    if (game->bullets == 2) {
        num = 2, dist = 60;
    }
    if (game->bullets == 1) {
        num = 1, dist = 40;
    }
    if (game->bullets == 0) {
        num = 0, dist = 0;
    }
    if (game->bullets != 0) {
        for (int i=0;i<num;i++) {
            bullet_sprite.pos[0] = dist - (i * 20);
            bullet_sprite.pos[1] = 40;
            bullet_sprite.pos[2] = 0;
            float wid = 10.0f;
            glPushMatrix();
            glTranslatef(bullet_sprite.pos[0], bullet_sprite.pos[1], bullet_sprite.pos[2]);
            glBindTexture(GL_TEXTURE_2D, bulletTexture);
            glEnable(GL_ALPHA_TEST);
            glAlphaFunc(GL_GREATER, 0.0f);
            glColor4ub(255,255,255,255);
            glBegin(GL_QUADS);
            if (bullet_sprite.vel[0] > 0.0) {
                glTexCoord2f(0.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(1.0f, 1.0f); glVertex2i( wid,-wid);
            } else {
                glTexCoord2f(1.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(0.0f, 1.0f); glVertex2i( wid,-wid);
            }
            glEnd();
            glPopMatrix();
            glDisable(GL_ALPHA_TEST);
        }
    }
    r.bot = s->height;
    r.left = s->width;
    glVertex2i(-w, -h);
    glVertex2i(-w, h);
    glVertex2i(w, h);
    glVertex2i(w, -h);
    glEnd();
    //ggprint16(&r , 16, 0x00ffffff, "%i", game->bullets);
    glPopMatrix();

    //-------------------------------------------------------------------
    //Displaying duck score sprites
    glColor3ub(90, 140, 90);
    s = &game->box[1];
    glPushMatrix();
    glTranslatef(s->center.x, s->center.y, s->center.z);
    w = s->width;
    h = s->height;
    if (game->duckShot <= 10) {
        for (int i=0;i<=9;i++) {
            duckscore_sprite.pos[0] = 70 + (i * 25);
            duckscore_sprite.pos[1] = 42;
            duckscore_sprite.pos[2] = 0;
            float wid = 10.0f;
            glPushMatrix();
            glTranslatef(duckscore_sprite.pos[0], duckscore_sprite.pos[1], duckscore_sprite.pos[2]);
            glBindTexture(GL_TEXTURE_2D, duckscoreTexture);
            glEnable(GL_ALPHA_TEST);
            glAlphaFunc(GL_GREATER, 0.0f);
            glColor4ub(255,255,255,255);
            glBegin(GL_QUADS);
            if (duckscore_sprite.vel[0] > 0.0) {
                glTexCoord2f(0.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(1.0f, 1.0f); glVertex2i( wid,-wid);
            } else {
                glTexCoord2f(1.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(0.0f, 1.0f); glVertex2i( wid,-wid);
            }
            glEnd();
            glPopMatrix();
            glDisable(GL_ALPHA_TEST);
        }
    }
    int loop = 0;
    if (game->duckShot == 1) loop = 1;
    if (game->duckShot == 2) loop = 2;
    if (game->duckShot == 3) loop = 3;
    if (game->duckShot == 4) loop = 4;
    if (game->duckShot == 5) loop = 5;
    if (game->duckShot == 6) loop = 6;
    if (game->duckShot == 7) loop = 7;
    if (game->duckShot == 8) loop = 8;
    if (game->duckShot == 9) loop = 9;
    if (game->duckShot == 10) loop = 10;
    if (game->duckShot <= 9) {
        for (int i=0;i<loop;i++) {
            duckscore_sprite2.pos[0] = 70 + (i * 25);
            duckscore_sprite2.pos[1] = 42;
            duckscore_sprite2.pos[2] = 0;
            float wid = 10.0f;
            glPushMatrix();
            glTranslatef(duckscore_sprite2.pos[0], duckscore_sprite2.pos[1], duckscore_sprite2.pos[2]);
            glBindTexture(GL_TEXTURE_2D, duckscoreTexture2);
            glEnable(GL_ALPHA_TEST);
            glAlphaFunc(GL_GREATER, 0.0f);
            glColor4ub(255,255,255,255);
            glBegin(GL_QUADS);
            if (duckscore_sprite2.vel[0] > 0.0) {
                glTexCoord2f(0.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(1.0f, 1.0f); glVertex2i( wid,-wid);
            } else {
                glTexCoord2f(1.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(0.0f, 1.0f); glVertex2i( wid,-wid);
            }
            glEnd();
            glPopMatrix();
            glDisable(GL_ALPHA_TEST);
        }
    }
    r.bot = s->height;
    r.left = s->width;
    glVertex2i(-w, -h);
    glVertex2i(-w, h);
    glVertex2i(w, h);
    glVertex2i(w, -h);
    glEnd();
    if(!d && game->duckCount >= 10 && game->duckShot < 6)
    {
        ggprint16(&r , 16, 0x00ffffff, "GAME OVER");
    }
    //ggprint16(&r , 16, 0x00ffffff, "%i / 10", game->duckShot);
    glPopMatrix();



    glColor3ub(90, 140, 90);
    s = &game->box[2];
    glPushMatrix();
    glTranslatef(s->center.x, s->center.y, s->center.z);
    w = s->width;
    h = s->height;
    r.bot = s->height;
    r.left = s->width;
    glVertex2i(-w, -h);
    glVertex2i(-w, h);
    glVertex2i(w, h);
    glVertex2i(w, -h);
    glEnd();
    ggprint16(&r , 16, 0x00ffffff, "%i", game->score);
    glPopMatrix();

    glColor3ub(90, 140, 90);
    s = &game->box[3];
    glPushMatrix();
    glTranslatef(s->center.x, s->center.y, s->center.z);
    w = s->width;
    h = s->height;
    r.bot = s->height;
    r.left = s->width;
    glVertex2i(-w, -h);
    glVertex2i(-w, h);
    glVertex2i(w, h);
    glVertex2i(w, -h);
    glEnd();
    ggprint16(&r , 16, 0x00ffffff, "%i", game->rounds);
    glPopMatrix();


    if(game->afterDog && game->onScreen == 0 && game->dogGone && game->n == 0 && game->waitForDog)
    {
        if(game->duckCaptured >= 1)
            makeHappyDog(game, WINDOW_WIDTH / 2, game->floor + 51);
        else
            makeLaughingDog(game, WINDOW_WIDTH / 2, game->floor + 51);
        game->afterDog = false;
        game->duckCaptured = 0;
    }

    if(!d && game->duckCount >= 10 && game->duckShot >= 6 && game->dogGone && !game->waitForDog && game->onScreen == 0 && game->n == 0)
    {
        game->rounds++;
        game->duckCount = 0;
        game->duckShot = 0;
        game->animateDog = true;
        game->dogGone = false;
        game->afterDog = true;
        game->waitForDog = false;
    }
    if((game->oneDuck || game->twoDuck) && game->dogGone && !game->waitForDog)
    {
        if(!d && game->duckCount >= 10 && game->duckShot < 6)
        {
            while(d)
            {
                deleteDuck(game, d);
                d = d->next;
            }
            game->oneDuck = false;
            game->twoDuck = false;
            std::cout << "GAME OVER" << std::endl;
        }
        if(!d && game->oneDuck && game->duckCount < 10 && game->onScreen == 0 && game->n == 0)
        {
            game->bullets = 3;
            makeDuck(game, rand() % (WINDOW_WIDTH - 50 - 1) + 50 + 1, game->floor + 50 + 1);
            game->duckCount++;
        }
        if(!d && game->twoDuck && game->duckCount < 9 && game->onScreen == 0 && game->n == 0)
        {
            game->bullets = 3;
            makeDuck(game, rand() % (WINDOW_WIDTH - 50 - 1) + 50 + 1, game->floor + 50 + 1);
            makeDuck(game, rand() % (WINDOW_WIDTH - 50 - 1) + 50 + 1, game->floor + 50 + 1);
            game->duckCount += 2;
        }
    }


    //Main Duck rendering
    duck_sprite.pos[0] = s->center.x;
    glColor3ub(255, 255, 255);
    while(d)
    {
        w = d->s.width;
        h = d->s.height;
        x = d->s.center.x;
        y = d->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        //This changes which duck it points to

        show_duck= 1;
        float wid = 50.0f;
        duck_sprite.pos[0] = x;
        duck_sprite.pos[1] = y;
        duck_sprite.pos[2] = s->center.z;

        d = d->next;
        duck_sprite2.pos[0] = x;
        duck_sprite2.pos[1] = y;
        duck_sprite2.pos[2] = s->center.z;


        if(show_duck) {
            glPushMatrix();
            glTranslatef(duck_sprite.pos[0], duck_sprite.pos[1], duck_sprite.pos[2]);
            //remove if statement and make
            //a while loop to take in both duck 
            if (silhouette)
            {
                //glBind makes the duck texture
                glBindTexture(GL_TEXTURE_2D, duckTexture);
                glEnable(GL_ALPHA_TEST);
                glAlphaFunc(GL_GREATER, 0.0f);
                glColor4ub(255,255,255,255);
            }

            glBegin(GL_QUADS);
            if (duck_sprite.vel[0] > 0.0) {
                glTexCoord2f(0.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(1.0f, 1.0f); glVertex2i( wid,-wid);
            } else {
                glTexCoord2f(1.0f, 1.0f); glVertex2i(-wid,-wid);
                glTexCoord2f(1.0f, 0.0f); glVertex2i(-wid, wid);
                glTexCoord2f(0.0f, 0.0f); glVertex2i( wid, wid);
                glTexCoord2f(0.0f, 1.0f); glVertex2i( wid,-wid);
            }
            //Duck2
            /*                          glTranslatef(duck_sprite2.pos[0], duck_sprite2.pos[1], duck_sprite2.pos[2]);
                                        if (silhouette) 
                                        {
                                        glBindTexture(GL_TEXTURE_2D, duckTexture2);
                                        glEnable(GL_ALPHA_TEST);
                                        glAlphaFunc(GL_GREATER, 0.0f);
                                        glColor4ub(255,255,255,255);
                                        }
                                        glBegin(GL_QUADS);
                                        if (duck_sprite2.vel[0] > 0.0) {
                                        glTexCoord2f(0.0f, 1.0f); glVertex2i(-wid,-wid);
                                        glTexCoord2f(0.0f, 0.0f); glVertex2i(-wid, wid);
                                        glTexCoord2f(1.0f, 0.0f); glVertex2i( wid, wid);
                                        glTexCoord2f(1.0f, 1.0f); glVertex2i( wid,-wid);
                                        } else {
                                        glTexCoord2f(1.0f, 1.0f); glVertex2i(-wid,-wid);
                                        glTexCoord2f(1.0f, 0.0f); glVertex2i(-wid, wid);
                                        glTexCoord2f(0.0f, 0.0f); glVertex2i( wid, wid);
                                        glTexCoord2f(0.0f, 1.0f); glVertex2i( wid,-wid);
                                        }
                                        */
            glEnd();
            glPopMatrix();
            //Transparent part
            if (trees && silhouette) {
                glBindTexture(GL_TEXTURE_2D, backgroundTransTexture);
                glBegin(GL_QUADS);
                glTexCoord2f(0.0f, 1.0f); glVertex2i(0, 0);
                glTexCoord2f(0.0f, 0.0f); glVertex2i(0, WINDOW_HEIGHT);
                glTexCoord2f(1.0f, 0.0f); glVertex2i(WINDOW_WIDTH, WINDOW_HEIGHT);
                glTexCoord2f(1.0f, 1.0f); glVertex2i(WINDOW_WIDTH, 0);
                glEnd();
            }
            glDisable(GL_ALPHA_TEST);
        }
    }

    //----------------------------------------------------
    glColor3ub(255, 0, 0);
    while(dd)
    {
        double ts = timeDiff(&dd->time, &dt);
        w = dd->s.width;
        h = dd->s.height;
        x = dd->s.center.x;
        y = dd->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        r.bot = y + h;
        r.left = x - (w/2);
        if(ts < 0.3)
        {
            if(dd->points == true)
                ggprint16(&r , 16, 0x00ffffff, "200");
            else
                ggprint16(&r , 16, 0x00ffffff, "100");
        }
        dd = dd->next;
    }

    glColor3ub(0, 0, 255);
    while(fd)
    {
        w = fd->s.width;
        h = fd->s.height;
        x = fd->s.center.x;
        y = fd->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        fd = fd->next;
    }

    if(game->animateDog)
    {
        makeDog(game, 100, game->floor + 51);
        game->animateDog = false;
    }
    glColor3ub(0, 0, 0);
    while(doge)
    {
        w = doge->s.width;
        h = doge->s.height;
        x = doge->s.center.x;
        y = doge->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        doge = doge->next;
    }

    glColor3ub(100, 100, 255);
    while(hdoge)
    {
        w = hdoge->s.width;
        h = hdoge->s.height;
        x = hdoge->s.center.x;
        y = hdoge->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        hdoge = hdoge->next;
    }

    glColor3ub(255, 100, 100);
    while(ldoge)
    {
        w = ldoge->s.width;
        h = ldoge->s.height;
        x = ldoge->s.center.x;
        y = ldoge->s.center.y;
        glBegin(GL_QUADS);
        glVertex2f(x-w, y+h);
        glVertex2f(x-w, y-h);
        glVertex2f(x+w, y-h);
        glVertex2f(x+w, y+h);
        glEnd();
        ldoge = ldoge->next;
    }
}
示例#3
0
void render(void)
{
    Rect r;
    //Clear the screen
    glClearColor(1.0, 1.0, 1.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    //
    //
    //draw a quad with texture
    glColor3f(1.0, 1.0, 1.0);

    //Loop the background
    double *yOFFsetLevel = &setLevel;
    double *yOFFsetMountain = &setMountain;

    if(*yOFFsetLevel <= -(levelImage->width))
        *yOFFsetLevel = 0.0;
    if(*yOFFsetMountain <= -(mountainsImage->width))
        *yOFFsetMountain = 0.0;
    /////////////////////////////////////////////

    if (background) {
        draw_background();
    }
    if (start) {
        StartMenu();
    }

    perspective();

    if(show_ufo)
    {
        draw_ufo();
        draw_yellow();
    }
    if(white)
    {
        draw_white();
    }
    if (lives <= 0) {
        GameOver();
        gameover = 1;
        if(soundcount == 0)
            fmod_playsound(1);
        soundcount++;
    }

    glDisable(GL_TEXTURE_2D);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_BLEND);
    glDisable(GL_BLEND);
    glEnable(GL_TEXTURE_2D);

    glBindTexture(GL_TEXTURE_2D, 0);

    r.bot = yres - 20;
    r.left = 10;
    r.center = 0;
    unsigned int cref = 0x00ffffff;

    if(start)
    {
        r.bot = yres - 175;
        r.left = (xres/2) - 80;
        r.center = 0;
        unsigned int cref = 0x00000000;

        //Help menu only show in start
        ggprint10(&r, 16, cref, "Move Up: UP Arrow Key");
        ggprint10(&r, 16, cref, "Move Down: Down Arrow Key");
        ggprint10(&r, 16, cref, "Move Left: Left Arrow Key");
        ggprint10(&r, 16, cref, "Move Right: Right Arrow Key");
        ggprint10(&r, 16, cref, "Punch: Space Key");
    }
    if(show_animal && show_rhino)
    {
        //In game menu, only show in game
        ggprint16(&r, 16, cref, "Lives: %i", lives);
        ggprint16(&r, 16, cref, "High Score: %i", high_score);
        if(ufocount) {
            ggprint16(&r, 16, cref, "UFO Help (Press Enter): %i", ufocount);
        }
    }
}
示例#4
0
文件: lab1.cpp 项目: Akhan123/Lab-1
void render(Game *game)
{
	float w, h;
	Rect r;
	glClear(GL_COLOR_BUFFER_BIT);
	//Draw shapes...

	static int firsttime=1;
	static int verts[60][2];
	static int n = 60;
	if (firsttime) {
		float angle = 0.0;
		float inc = (3.14159 * 2.0) / (float)n;
		for (int i=0; i<n; i++) {
			verts[i][0] = cos(angle) * game->circle.radius + game->circle.center.x;	   	
			verts[i][1] = sin(angle) * game->circle.radius + game->circle.center.y;	   	
			angle += inc;
		}
		firsttime=0;
	}
	glColor3ub(255,255,255);
	glPushMatrix();
	glBegin(GL_TRIANGLE_FAN);
		for (int i=0; i<n; i++)
			glVertex2i(verts[i][0], verts[i][1]);
	glEnd();
	glPopMatrix();

	//draw box
	Shape *s;
	glColor3ub(0,0,255);
	for (int j=0; j<5; j++) {
		s = &game->box[j];
		glPushMatrix();
		glTranslatef(s->center.x, s->center.y, s->center.z);
		w = s->width;
		h = s->height;
		glBegin(GL_QUADS);
		glVertex2i(-w,-h);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w,-h);
		glEnd();
		glPopMatrix();
	}
	//draw all particles here
	for (int i=0; i<game->n; i++) {
		glPushMatrix();
		glColor3ub(255,0,0);
		Vec *c = &game->particle[i].s.center;
		w = 2;
		h = 2;
		glBegin(GL_QUADS);
		glVertex2i(c->x-w, c->y-h);
		glVertex2i(c->x-w, c->y+h);
		glVertex2i(c->x+w, c->y+h);
		glVertex2i(c->x+w, c->y-h);
		glEnd();
		glPopMatrix();
	}
	if(game->bubble){
	makeParticle(game, 50, 550);
	}
	
		glBindTexture(GL_TEXTURE_2D, 0);
	//
	//
	
	r.bot = WINDOW_HEIGHT - 110;
	r.left = 100;
	r.center = 0;
	unsigned int cref = 0x0000FF11;
	ggprint16(&r, 16, cref, "Requirements");
	r.bot = WINDOW_HEIGHT - 185;
	r.left = 200;
	r.center = 0;
	ggprint16(&r, 16, cref, "Requirements");
	r.bot = WINDOW_HEIGHT - 260;
	r.left = 300;
	r.center = 0;
	ggprint16(&r, 16, cref, "Requirements");
	r.bot = WINDOW_HEIGHT - 335;
	r.left = 400;
	r.center = 0;
	ggprint16(&r, 16, cref, "Requirements");
	r.bot = WINDOW_HEIGHT - 410;
	r.left = 500;
	r.center = 0;
	ggprint16(&r, 16, cref, "Requirements");








}
示例#5
0
文件: hw1.cpp 项目: gaararose/hw1
void render(Game *game)
{
	//upper-left and lower-right corners of a rectangle
	Rect rct;
	float w, h;
	glClear(GL_COLOR_BUFFER_BIT);
	//Draw shapes...

	//draw box
	Shape *s;
	glColor3ub(90,140,90);
	for (int i = 0; i < 5; i++) {		
		s = &game->box[i];
		glPushMatrix();
		glTranslatef(s->center.x, s->center.y, s->center.z);
		w = s->width;
		h = s->height;
		glBegin(GL_QUADS);
			glVertex2i(-w,-h);
			glVertex2i(-w, h);
			glVertex2i( w, h);
			glVertex2i( w,-h);
		glEnd();
		glPopMatrix();
	}

	const int n = 60;
	static Vec verts[n];
	static int firsttime = 1;
	float angle = 0.0;
	if (firsttime) {
		float incr = (PI * 2.0) / (float) n;
		for (int i = 0; i < n; i++) {
			verts[i].y = sin(angle) * game->circle.radius;
			verts[i].x = cos(angle) * game->circle.radius;
			angle += incr;
		}
		firsttime = 0;
	}

	//glColor3ub(90, 140, 90);
	//glPushMatric();
	glBegin(GL_TRIANGLE_FAN);
	for (int i = 0; i < n; i++) {
		glVertex2i(game->circle.center.x + verts[i].x,
			game->circle.center.y + verts[i].y);
	}
	glEnd();
	//glPopMatrix();

	//draw all particles here
	//for (int i = 0; i < game->n; i++) { 
		glPushMatrix();
		//glColor3ub(rnd() * 150, rnd() * 160, rnd() * 220);
		for (int i = 0; i < game-> n; i++) {
		    	glColor3ub(rnd() * 150, rnd() * 160, rnd() * 220);
	    		Vec *c = &game->particle[i].s.center;
	    		w = 2;
	    		h = 2;
	    		glBegin(GL_QUADS);
				glVertex2i(c->x-w, c->y-h);
				glVertex2i(c->x-w, c->y+h);
				glVertex2i(c->x+w, c->y+h);
				glVertex2i(c->x+w, c->y-h);
	    		glEnd();
	   		glPopMatrix();
		}
		//glPopMatrix();
	//}		

	//texts/fonts
	glEnable(GL_TEXTURE_2D);
	initialize_fonts();

	rct.bot = 585;
	rct.left = 90;
	ggprint8b (&rct, 16, 0x99CCFF, "Waterfall Model.");

	rct.bot = 570;
	rct.left = 100;
	ggprint8b (&rct, 16, 0x00ffff0, "Press b for bubbler.");

	rct.bot = 490;
	rct.left = 100;
	rct.center = 1;
	ggprint16 (&rct, 16, 0xFF0099, "Requirements.");

	rct.bot = 428;
	rct.left = 150;
	ggprint16 (&rct, 16, 0xFF0099, "Design.");

	rct.bot -= 45;
	rct.left += 70;
	ggprint16 (&rct, 16, 0xFF0099, "Coding.");

	rct.bot -= 45;
	rct.left += 70;
	ggprint16 (&rct, 16, 0xFF0099, "Testing.");

	rct.bot -= 40;
	rct.left += 90;
	ggprint16 (&rct, 16, 0xFF0099, "Maintenance.");

	//if(bubble) {
	    //if (game->n < MAX_PARTICLES) {
		//for (int i = 0; i < 10; i++) {
			//makeParticle(game, 120, 550);
		//}
	    //}
	//}
}
示例#6
0
void render(Game *game)
{
    float w, h;
    glClear(GL_COLOR_BUFFER_BIT);
    //Draw shapes...

    //set circle
    const int n=10;
    static int firsttime=1;
    static Vec vert[40];
    if (firsttime) {
         float ang = 0.0, inc = (3.14159 *2.0) / (float)n;
        for (int i=0; i<n; i++) {
            vert[i].x = cos(ang)*game->circle.radius;
            vert[i].y = sin(ang)*game->circle.radius;
            ang += inc;
        }
        firsttime=0;
    }
    glColor3ub(255,255,255);
    glBegin(GL_LINE_LOOP);
    for (int i=0;i<n;i++){
        glVertex2i(game->circle.center.x + vert[i].x, game->circle.center.y + vert[i].y);
    }
    glEnd();
    glColor3f(0.60,0.40,0.12);
    glBegin(GL_TRIANGLE_FAN);
    glVertex2f(game->circle.center.x,game->circle.center.y);
        for (int i=0; i<=360;i++) {
            glVertex2f(
                    game->circle.center.x+(game->circle.radius *cos(i * (3.14159*2.0)/360 )),
                    game->circle.center.y+(game->circle.radius *sin(i * (3.14159*2.0)/ 360)));
        }
    glEnd();


    //draw box
    Shape *s;
    glColor3ub(90,140,90);
    for (int i=0; i<5; i++) {
        s = &game->box[i];
        glPushMatrix();
        glTranslatef(s->center.x, s->center.y, s->center.z);
        w = s->width;
        h = s->height;
        glBegin(GL_QUADS);
        glVertex2i(-w,-h);
        glVertex2i(-w, h);
        glVertex2i( w, h);
        glVertex2i( w,-h);
        glEnd();
        glPopMatrix();
    }

    //draw all particles here
    glPushMatrix();
    glColor3f(0.0,0.0,1.0);//(rnd()*255,rnd()*255,rnd()*255);

    for (int i=0; i<game->n; i++) {
        Vec *c = &game->particle[i].s.center;
        w = 2;
        h = 2;
        glBegin(GL_QUADS);
        glVertex2i(c->x-w, c->y-h);
        glVertex2i(c->x-w, c->y+h);
        glVertex2i(c->x+w, c->y+h);
        glVertex2i(c->x+w, c->y-h);
        glEnd();
        
    }
        glPopMatrix();
        glDisable(GL_TEXTURE_2D);
        glEnable(GL_TEXTURE_2D);
        glBindTexture(GL_TEXTURE_2D, 0);

        Rect requirements;
        Rect design;
        Rect coding;
        Rect testing;
        Rect maintenance;

        requirements.left = game->box[0].center.x-(game->box[0].width/2);
        design.left       = game->box[1].center.x-(game->box[1].width/2);
        coding.left       = game->box[2].center.x-(game->box[2].width/2);
        testing.left      = game->box[3].center.x-(game->box[3].width/2);
        maintenance.left  = game->box[4].center.x-(game->box[4].width/2);
        
        requirements.bot = game->box[0].center.y-game->box[0].height;
        design.bot       = game->box[1].center.y-game->box[1].height;
        coding.bot       = game->box[2].center.y-game->box[2].height;
        testing.bot      = game->box[3].center.y-game->box[3].height;
        maintenance.bot  = game->box[4].center.y-game->box[4].height;
        
        unsigned int cref = 0x00117200;
        ggprint16(&requirements,100, cref, "Requirments");
        ggprint16(&design,  200, cref, "Design");
        ggprint16(&coding, 200, cref, "Coding");
        ggprint16(&testing, 200, cref, "Testing");
        ggprint16(&maintenance, 100, cref, "Maintenance");
}
示例#7
0
void render(Game *game)
{
    float w, h;
    glClear(GL_COLOR_BUFFER_BIT);
    //Draw shapes...

    static int firsttime = 1;
    static int verts[60][2];
    static int n = 60;

    glColor3ub(50, 150,50);
    if(firsttime){
        float angle = 0;
        float inc = (3.14459 * 2.0) / (float)n;
        for(int i = 0; i < n; i++){
            verts[i][0] = cos(angle) * game->circle.radius + game->circle.center.x;
            verts[i][1] = sin(angle) * game->circle.radius + game->circle.center.y;
            angle += inc;


        }


        firsttime = 0;
    }


    glPushMatrix();
    glBegin(GL_TRIANGLE_FAN);
    for(int i = 0; i < n; i++){
        glVertex2i(verts[i][0],  verts[i][1]);



    }

    glEnd();
    glPopMatrix();

    Rect rect;
    rect.bot=WINDOW_HEIGHT-30;
    rect.left=0;
    rect.center=0;
    ggprint16(&rect, 50, 0x00ffffff,"Waterfall Model");


    //Draw the  boxes here
    for(int j = 0; j < NUM_BOXES; j++){
        Shape *s;
        glColor3ub(44,70,80);
        s = &game->box[j];
        glPushMatrix();
        glTranslatef(s->center.x, s->center.y, s->center.z);
        w = s->width;
        h = s->height;
        glBegin(GL_QUADS);
        glVertex2i(-w,-h);
        glVertex2i(-w, h);
        glVertex2i( w, h);
        glVertex2i( w,-h);
        glEnd();
        glPopMatrix();
    }




    //draw all particles here
    for(int i=0; i < game->n; i++){

        int red = rand() % 20;
        int green = rand() % 100;
        int blue = rand() % 255;

        glPushMatrix();

        glColor3ub(red,green, blue);

        Vec *c = &game->particle[i].s.center;
        w = 2;
        h = 2;
        glBegin(GL_QUADS);
        glVertex2i(c->x-w, c->y-h);
        glVertex2i(c->x-w, c->y+h);
        glVertex2i(c->x+w, c->y+h);
        glVertex2i(c->x+w, c->y-h);
        glEnd();
        glPopMatrix();
    }

    int bot = 240;
    int left = 55;
    int center = 0;

    Rect rect2;
    rect2.bot=bot;
    rect2.left=left;
    rect2.center=center;
    ggprint12(&rect2, 37, 0x00ffffff,"Requirements");

    Rect rect3;
    rect3.bot=bot-30;
    rect3.left=left+75;
    rect3.center=center;
    ggprint12(&rect3, 37, 0x00ffffff,"Design");

    Rect rect4;
    rect4.bot=bot - 60;
    rect4.left= left + 130;
    rect4.center=0;
    ggprint12(&rect4, 37, 0x10ffffff,"Coding");

    Rect rect5;
    rect5.bot= bot -90;
    rect5.left= left + 180;
    rect5.center=0;
    ggprint12(&rect5, 37, 0x00ffffff,"Testing");

    Rect rect6;
    rect6.bot= bot - 120;
    rect6.left= left + 210;
    rect6.center=0;
    ggprint12(&rect6, 37, 0x00ffffff,"Maintenance");


}
示例#8
0
extern void render(Game *g)
{
//GLuint silhouetteTexture;
//GLuint silhouette_player_Texture;
//std::cout<<"multi: " << g->player1.multi << "\n";
        //float wid;
        if (g->nzombies == 0) {
                init(g);
                std::cout<<"here\n";
        }

        Rect r;
        glClear(GL_COLOR_BUFFER_BIT);
        sscreen_background(g->zhead->zTexture, 1.0, 1.0, 1.0, 1.0);

        //draw loot
        Loot *l = new Loot;
        l = g->lhead;
        while (l != NULL) {
                struct timespec bt;
                clock_gettime(CLOCK_REALTIME, &bt);
                double ts = timeDiff(&l->lootTimer, &bt);
                if (ts > 3) {
                        //MAKE IT BLINK!!!!!!!!
                        if (ts < 3.15)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                        else if(ts > 3.30 && ts < 3.45)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                        else if(ts > 3.60 && ts < 3.75)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                        else if(ts > 3.90 && ts < 4.05)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                        else if(ts > 4.20 && ts < 4.35)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                        else if(ts > 4.50 && ts < 4.65)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
 			else if(ts > 4.80 && ts < 5.00)
                                lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                } else if (ts > 5 || l->type == 0) {
                        //time to delete loot
                        deleteLoot(g,l);
                } else {
                        lootDraw(l->lootTex, l ,1.0, 1.0, 1.0, 1.0);
                }
                l = l->next;

        }
        //
        r.bot = yres - 64;
        r.left = 10;
        r.center = 0;
        ggprint16(&r, 32, 0x0011ff11, "PLAYER 1 SCORE: %i", g->player1.score);
        ggprint16(&r, 16, 0x00ff1111, "MULTI         : %.3g", g->player1.multi);

        ggprint8b(&r, 16, 0x00ff1111, "Zone %i, Wave %i", g->zcnt, g->wcnt);
        ggprint8b(&r, 16, 0x00ff1111, "n bullets: %i", g->nbullets);
        ggprint8b(&r, 16, 0x00ff1111, "Zombies left: %i", g->nzombies);
        //-------------------------------------------------------------------------
        //Draw the player1
        glColor3fv(g->player1.color);
        glPushMatrix();
        glTranslatef(g->player1.pos[0], g->player1.pos[1], g->player1.pos[2]);
        //float angle = atan2(player1.dir[1], player1.dir[0]);
        //std::cout<<"angle = " << g->player1.angle << std::endl;
        
	if ( g->player1.bulletType == 2) {
        glBindTexture(GL_TEXTURE_2D, silhouette_player_Texture_2);
        }
        else if ( g->player1.bulletType == 3) {
        glBindTexture(GL_TEXTURE_2D, silhouette_player_Texture_3);
        }
        else {
        glBindTexture(GL_TEXTURE_2D, silhouette_player_Texture);
        }
	
        glRotatef(g->player1.angle, 0.0f, 0.0f, 1.0f);
        glEnable(GL_ALPHA_TEST);
        glAlphaFunc(GL_GREATER, 0.0f);
        glColor4ub(255,255,255,255);
        glBegin(GL_QUADS);
                //float w = g->player1.width;
                float w = 28.0f;
                glTexCoord2f(0.0f, 0.0f); glVertex2f(-w,  w);
                glTexCoord2f(1.0f, 0.0f); glVertex2f( w,  w);
                glTexCoord2f(1.0f, 1.0f); glVertex2f( w, -w);
                glTexCoord2f(0.0f, 1.0f); glVertex2f(-w, -w);
        glEnd();
        glPopMatrix();
        glBindTexture(GL_TEXTURE_2D, 0);
        glDisable(GL_ALPHA_TEST);
        //glRotatef(g->player1.angle, 0.0f, 0.0f, 1.0f);
        //glVertex2f(-10.0f, -10.0f);
        //glVertex2f(  0.0f, 20.0f);
        //glVertex2f( 10.0f, -10.0f);
        glColor3f(1.0f, 0.0f, 0.0f);
        glBegin(GL_POINTS);
        glVertex2f(0.0f, 0.0f);
        glEnd();
        glPopMatrix();
        if (g->player1.invuln) {
                float col[3] = {0.0, 0.0, 0.0};
                glColor3fv(col);
                glPushMatrix();
                glTranslatef(g->player1.pos[0], g->player1.pos[1], g->player1.pos[2]);
                glRotatef(g->player1.angle, 0.0f, 0.0f, 1.0f);
                glBegin(GL_TRIANGLES);
                glVertex2f(-12.0f, -10.0f);
                glVertex2f(  0.0f, 20.0f);
                glVertex2f(  0.0f, -6.0f);
                glVertex2f(  0.0f, -6.0f);
                glVertex2f(  0.0f, 20.0f);
                glVertex2f( 12.0f, -10.0f);
                glEnd();
                glColor3f(1.0f, 0.0f, 0.0f);
                glBegin(GL_POINTS);
                glVertex2f(0.0f, 0.0f);
                glEnd();
                glPopMatrix();
                //std::cout<< "blinking!" << "\n";
        }

        /*if (keys[XK_Up]) {
                int i;
                //draw thrust
                Flt rad = ((g->player1.angle+90.0) / 360.0f) * PI * 2.0;
                //convert angle to a vector
                Flt xdir = cos(rad);
                Flt ydir = sin(rad);
                Flt xs,ys,xe,ye,r;
                glBegin(GL_LINES);
                for (i=0; i<16; i++) {
                        xs = -xdir * 11.0f + rnd() * 4.0 - 2.0;
                        ys = -ydir * 11.0f + rnd() * 4.0 - 2.0;
                        r = rnd()*40.0+40.0;
                        xe = -xdir * r + rnd() * 18.0 - 9.0;
                        ye = -ydir * r + rnd() * 18.0 - 9.0;
                        glColor3f(rnd()*.3+.7, rnd()*.3+.7, 0);
                        glVertex2f(g->player1.pos[0]+xs,g->player1.pos[1]+ys);
                        glVertex2f(g->player1.pos[0]+xe,g->player1.pos[1]+ye);
                }
                glEnd();
        }*/
        //-------------------------------------------------------------------------
        //Draw the zombies
        {
                Zombie *a = g->ahead;
                int count = 1;
                while (a) {
                        //Log("draw asteroid...\n");
                        //glColor3fv(a->color);
			glColor3fv(g->player1.color);
                        glPushMatrix();
                        glTranslatef(a->pos[0], a->pos[1], a->pos[2]);
                        glBindTexture(GL_TEXTURE_2D, silhouetteTexture);
                        glRotatef(a->angle, 0.0f, 0.0f, 1.0f);
                        glEnable(GL_ALPHA_TEST);
                        glAlphaFunc(GL_GREATER, 0.0f);
                        glBegin(GL_QUADS);
                                // float w is zombie size
                                float w = 27.0f;
                                glTexCoord2f(0.0f, 0.0f); glVertex2f(-w,  w);
                                glTexCoord2f(1.0f, 0.0f); glVertex2f( w,  w);
                                glTexCoord2f(1.0f, 1.0f); glVertex2f( w, -w);
                                glTexCoord2f(0.0f, 1.0f); glVertex2f(-w, -w);
                        glEnd();
                        glPopMatrix();
                        glBindTexture(GL_TEXTURE_2D, 0);
                        glDisable(GL_ALPHA_TEST);
                        //glRotatef(a->angle, 0.0f, 0.0f, 1.0f);
                        //Log("%i verts\n",a->nverts);
                        //for (int j=0; j<a->nverts; j++) {
                        //      glVertex2f(a->vert[j][0], a->vert[j][1]);
                        //}

                        //glBegin(GL_LINES);
                        //      glVertex2f(0,   0);
                        //      glVertex2f(a->radius, 0);
                        //glEnd();
                        glColor3f(1.0f, 0.0f, 0.0f);
//                      glBegin(GL_POINTS);
//                      glVertex2f(a->pos[0], a->pos[1]);
                        glBegin(GL_POINTS);
                        glVertex2f(a->pos[0], a->pos[1]);
                        glEnd();
                        //std::cout<<"asteroid angle: " << a->angle << "\n";
                        count++;
                        a = a->next;
                }
        }
        //std::cout<<"player angle: " << g->player1.angle << "\n";
        //-------------------------------------------------------------------------
        //Draw the bullets
                //std::cout<<"player posxy: " << g->player1.pos[0] << ", " << g->player1.pos[1] << ", " << g->player1.pos[2] << "\n";
        bulletDraw(g->bhead, g);
        bulletDraw(g->chead, g);
        bulletDraw(g->dhead, g);
        //Draw Loot
        //sscreen_background(g->zhead->zTexture, 1.0, 1.0, 1.0, 1.0);
}
示例#9
0
void render(Game *game)
{ 
    
	float w, h;
	glClear(GL_COLOR_BUFFER_BIT);
	//Draw shapes...
	//
	//circle
	static int firsttime=1;
	static int verts[60][2];
	static int n = 60;
	if (firsttime) {

            float angle = 0.0;
	        float inc = (3.14159 * 2.0) / (float)n;
	        for (int i=0; i<n; i++) {
	                verts[i][0] = cos(angle) * game->circle.radius + game->circle.center.x;
	                verts[i][1] = sin(angle) * game->circle.radius + game->circle.center.y;
	                angle += inc;
            }
	        firsttime=0;
    }
	glColor3ub(90,140,90);
    glPushMatrix();
	glBegin(GL_TRIANGLE_FAN);
	    for (int i=0; i<n; i++)
		        glVertex2i(verts[i][0], verts[i][1]);  
	glEnd();
	glPopMatrix();
		
    //press b to turn on bubbler
    if(bubbler){
	    for(int i=0; i<10; i++)
	         makeParticle(game, game->lastMousex, game->lastMousey);
    }

	//draw box
	Shape *s;
	glColor3ub(90,140,90);
	for (int j=0; j<5; j++){
	        s = &game->box[j];
	        glPushMatrix();
	        glTranslatef(s->center.x, s->center.y, s->center.z);
	        w = s->width;
	        h = s->height;
	        glBegin(GL_QUADS);
		    glVertex2i(-w,-h);
		    glVertex2i(-w, h);
		    glVertex2i( w, h);
		    glVertex2i( w,-h);
	        glEnd();
	        glPopMatrix();
    } 

	//draw all particles here
	for(int i=0; i<game->n; i++){
		    glPushMatrix();
		    glColor3ub(rnd()*150,rnd()*160,220);
		    Vec *c = &game->particle[i].s.center;
		    w = 2;
		    h = 2;
		    glBegin(GL_QUADS);
			glVertex2i(c->x-w, c->y-h);
			glVertex2i(c->x-w, c->y+h);
			glVertex2i(c->x+w, c->y+h);
			glVertex2i(c->x+w, c->y-h);
		    glEnd();
		    glPopMatrix();
	}
    Rect r[4];
    Rect re;
    Rect rec;
    glBindTexture(GL_TEXTURE_2D, 0);   
 
    r[0].bot =  495 - 5 * 60;
    r[0].left = 270 + 5 * 65;
    r[0].center = -100;
    r[1].bot =  495 - 5 * 60 + 45;
    r[1].left = 270 + 5 * 65 - 75;
    r[1].center = -100;      
    r[2].bot =  495 - 5 * 60 + 90;
    r[2].left = 270 + 5 * 65 - 150;
    r[2].center = -100;
    r[3].bot =  495 - 5 * 60 + 135;
    r[3].left = 270 + 5 * 65 - 225;
    r[3].center = -100;      
    re.bot =  495 - 5 * 60 + 180;
    re.left = 270 + 5 * 65 - 300;
    re.center = -100;      
    rec.bot =  495 - 5 * 60 + 225;
    rec.left = 270 + 5 * 65 - 375;
    rec.center = -100;      

    unsigned int cref = 0x00ffff;
    ggprint8b(&r[0], 16, cref, "Maintenance");
    ggprint8b(&r[1], 16, cref, "Testing");
    ggprint8b(&r[2], 16, cref, "Coding");
    ggprint8b(&r[3], 16, cref, "Design");
    ggprint8b(&re, 16, cref, "Requirements");
    ggprint16(&rec, 16, 0x00ffffff, "Waterfall Model");
}
示例#10
0
void render(Game *game)
{


    if(!start_flag) {

	float w, h;
	glClear(GL_COLOR_BUFFER_BIT);
	//Pop default matrix onto current matrix
	glMatrixMode(GL_MODELVIEW);
	//Save default matrix again
	glPushMatrix(); //push ragdoll matrix
	glTranslatef(0.f, gCameraY, 0.f);
	//Vec *c = &game->character.s.center;
	w = 49;
	h = 79;
	glColor3f(1.0, 1.0, 1.0);
	if (sky) {
	    glBindTexture(GL_TEXTURE_2D, skyTexture);
	    glBegin(GL_QUADS);
	    int ybottom = game->altitude - yres;
	    glTexCoord2f(0.0f, 1.0f); glVertex2i(0, ybottom);
	    glTexCoord2f(0.0f, 0.0f); glVertex2i(0, game->altitude);
	    glTexCoord2f(1.0f, 0.0f); glVertex2i(xres, game->altitude);
	    glTexCoord2f(1.0f, 1.0f); glVertex2i(xres, ybottom);
	    glEnd();
	}
	//glBindTexture(GL_TEXTURE_2D, characterTexture);
	glBindTexture(GL_TEXTURE_2D, silhouetteTexture);
	glEnable(GL_ALPHA_TEST);
	glAlphaFunc(GL_GREATER, 0.0f);
	glColor4ub(255,255,255,255);
	glBegin(GL_QUADS);
/*
	if (game->character.velocity.x < 0) {
		glTexCoord2f(0.0f, 1.0f); glVertex2i(c->x-w, c->y-h);
		glTexCoord2f(0.0f, 0.0f); glVertex2i(c->x-w, c->y+h);
		glTexCoord2f(0.5f, 0.0f); glVertex2i(c->x+w, c->y+h);
		glTexCoord2f(0.5f, 1.0f); glVertex2i(c->x+w, c->y-h);
	}
	if (game->character.velocity.x >= 0) {
		glTexCoord2f(0.5f, 1.0f); glVertex2i(c->x-w, c->y-h);
		glTexCoord2f(0.5f, 0.0f); glVertex2i(c->x-w, c->y+h);
		glTexCoord2f(1.0f, 0.0f); glVertex2i(c->x+w, c->y+h);
		glTexCoord2f(1.0f, 1.0f); glVertex2i(c->x+w, c->y-h);
	}	
	glEnd();
*/
	int i = STARTING_ALTITUDE;
	while (i > 0) {
	    if ((game->altitude < (i + 400)) && (game->altitude > (i - 400))) {
		Rect r;
		char cstr[10];
		r.left = xres - 50;
		r.bot = i - yres/2;
		r.center = xres - 50;
		r.width = 500;
		r.height = 100;
		sprintf (cstr, "%d", i);
		strcat (cstr, "ft");
		ggprint16(&r, 16, 0xdd4814, "%s", cstr);
	    }
	    i = i - 100;
	}
	//glPopMatrix();
	//draw body
	glPushMatrix();
	Shape *s1 = &game->body;
	glColor3ubv(s1->color);
	glTranslatef(s1->center[0], s1->center[1], 0.0f);
	//glRotatef(-s1->rot, 0.0f, 0.1f, 0.0f);
	w = s1->width;
	h = s1->height/2.0;
	glBegin(GL_QUADS);
		glVertex2i(-w, -h);
		glVertex2i(-w,  h);
		glVertex2i( w,  h);
		glVertex2i( w, -h);
	glEnd();
	//head
	w = s1->width - 10;
	h = 20;
	glBegin(GL_QUADS);
		glVertex2f(-(float)w, h+5);
		glVertex2f(-(float)w, h+30);
		glVertex2f( (float)w, h+30);
		glVertex2f( (float)w, h+5);
	glEnd();
	//
	//draw right arm ---------------------------------------------------------
	glPushMatrix();
	Shape *s2 = &game->rarm1;
	glColor3ubv(s2->color);
	glTranslatef(s2->center[0], s2->center[1], 0.0f);
	glRotatef(-s2->rot, 0.0f, 0.0f, 1.0f);
	w = s2->width;
	h = s2->height;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();

	//
	//draw lower arm ---------------------------------------------------------
	Shape *s3 = &game->rarm2;
	glColor3ubv(s3->color);
	glTranslatef(s3->center[0], s3->center[1], 0.0f);
	glRotatef(-s3->rot, 0.0f, 0.0f, 1.0f);
	w = s3->width;
	h = s3->height;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();
	glPopMatrix();
	//
	//draw left arm
	glPushMatrix();
	Shape *s4 = &game->larm1;
	glColor3ubv(s4->color);
	glTranslatef(s4->center[0]+20, s4->center[1]+20, 0.0f);
	glRotatef(-s4->rot, 0.0f, 0.0f, 1.0f);
	w = s4->width;
	h = s4->height;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();

	//draw lower left arm
	Shape *s5 = &game->larm2;
	glColor3ubv(s5->color);
	glTranslatef(s5->center[0], s5->center[1], 0.0f);
	glRotatef(-s5->rot, 0.0f, 0.0f, 1.0f);
	w = s5->width;
	h = s5->height;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();
	glPopMatrix();
	//draw right quad
	glPushMatrix();
	Shape *s6 = &game->rleg1;
	glColor3ubv(s6->color);
	glTranslatef(s6->center[0], s6->center[1]-43, 0.0f);
	glRotatef(-s6->rot-105, 0.0f, 0.0f, 1.0f);
	w = s6->width;
	h = s6->height+5;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();

	//draw right shin
	Shape *s7 = &game->rleg2;
	glColor3ubv(s7->color);
	glTranslatef(s7->center[0], s7->center[1]+8, 0.0f);
	glRotatef(-s7->rot-75, 0.0f, 0.0f, 1.0f);
	glRotatef(0.0, 1.0f, 0.0f, 0.0f);
	w = s7->width;
	h = s7->height+5;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();
	glPopMatrix();
	//draw left quad
	glPushMatrix();
	Shape *s8 = &game->lleg1;
	glColor3ubv(s8->color);
	glTranslatef(s8->center[0]+20, s8->center[1]-23, 0.0f);
	glRotatef(-s8->rot+150, 0.0f, 0.0f, 1.0f);
	w = s8->width;
	h = s8->height+5;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();

	//draw left shin
	Shape *s9 = &game->lleg2;
	glColor3ubv(s9->color);
	glTranslatef(s9->center[0], s9->center[1]+5, 0.0f);
	glRotatef(-s9->rot+70, 0.0f, 0.0f, 1.0f);
	glRotatef(0.0, 1.0f, 0.0f, 0.0f);
	w = s9->width;
	h = s9->height+5;
	glBegin(GL_QUADS);
		glVertex2i(-w, 0);
		glVertex2i(-w, h);
		glVertex2i( w, h);
		glVertex2i( w, 0);
	glEnd();
	glPopMatrix();
	glPopMatrix(); //pop body matrix
	glPopMatrix();
	w = 3;
	h = 3;

	Vec v0 = {s2->center[0], s2->center[1], 0.0};
	Vec v1;
	//rotate the shoulder by the body rotation.
	trans_vector(s1->m, v0, v1);
	glColor3ub(255,255,255);
	//offset shoulder by body position
	v1[0] += s1->center[0];
	v1[1] += s1->center[1];
	//rotate left arm
	Vec v5 = {s4->center[0]+20, s4->center[1]+20, 0.0};
	Vec v7;
	trans_vector(s1->m, v5, v7);
	glColor3ub(255,255,255);
	//offset shoulder by body position
	v7[0] += s1->center[0];
	v7[1] += s1->center[1];
	//rotate right quad
	Vec v8 = {s6->center[0]-20, s6->center[1]-20, 0.0};
	Vec v10;
	trans_vector(s1->m, v8, v10);
	glColor3ub(255,255,255);
	//offset hip by body position
	v10[0] += s1->center[0];
	v10[1] += s1->center[1];
	//rotate left quad
	Vec v11 = {s8->center[0]+20, s8->center[1]-20, 0.0};
	Vec v13;
	trans_vector(s1->m, v11, v13);
	glColor3ub(255,255,255);
	//offset hip by body position
	v13[0] += s1->center[0];
	v13[1] += s1->center[1];
    }

    if(start_flag) {
	glClear(GL_COLOR_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	//glPopMatrix();
	glPushMatrix();
	glColor3f(1.0, 1.0, 1.0);
	if (sky) {
	    glBindTexture(GL_TEXTURE_2D, skyTexture);
	    glBegin(GL_QUADS);
	    int ybottom = game->altitude - yres;
	    glTexCoord2f(0.0f, 1.0f); glVertex2i(0, ybottom);
	    glTexCoord2f(0.0f, 0.0f); glVertex2i(0, game->altitude);
	    glTexCoord2f(1.0f, 0.0f); glVertex2i(xres, game->altitude);
	    glTexCoord2f(1.0f, 1.0f); glVertex2i(xres, ybottom);
	    glEnd();
	}
	glPopMatrix();

	Rect start;
	Rect click;

	start.centerx = xres/2;
	start.centery = game->altitude - 200;
	start.bot = game->altitude - 200;
	start.width = 500;
	start.height = 100;
	start.center = xres/2 + 200;
	start.left = start.centerx;
	start.right = start.centerx;
	start.top = game->altitude - 200;

	click.centerx = xres/2;
	click.centery = game->altitude - 400;
	click.bot = game->altitude - 400;
	click.width = 500;
	click.height = 100;
	click.center = xres/2;
	click.left = click.centerx;
	click.right = click.centerx;
	click.top = game->altitude - 400;

	ggprint16(&start, 1000, 0x00fff000, "PARASHOOT!");
	ggprint16(&click, 1000, 0x00fff000, "Click to start");
    }
}