XP_Bool board_draw( BoardCtxt* board ) { if ( board->boardBounds.width > 0 ) { drawScoreBoard( board ); drawTray( board ); drawBoard( board ); } return !board->needsDrawing; } /* board_draw */
void draw(void) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); /* 3D */ glEnable(GL_DEPTH_TEST); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_COLOR_MATERIAL); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective( 60, 1, 0.05, WORLD_SIDE * 2 * 2.4142); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); illumination(); gluLookAt(compass[P].x, PLAYER_HEIGHT, compass[P].y, compass[W].x, PLAYER_HEIGHT, compass[W].y, 0, 1, 0); drawEnv(); drawCoins(); drawFixeds(); glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHT0); glDisable(GL_LIGHTING); glDisable(GL_DEPTH_TEST); /* 2D */ /* Isso aqui só precisa ser chamado uma vez, e quando a janela muda de * tamanho */ glViewport(0, 0, WINDOW_SIZE, WINDOW_SIZE); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0, WINDOW_SIZE, WINDOW_SIZE, 0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(playing) { drawScoreBoard(20,20); if(map) drawMiniMap(3.5f * MAP_SIZE, 3.5f * MAP_SIZE); } else drawEnd(); glutSwapBuffers(); }
void drawEnd(void) { glPushMatrix(); glTranslatef(WINDOW_SIZE/2 - 50, WINDOW_SIZE/2 - 50, 0); drawTransparentBoard(0, 0, SCORE_BOARD_WIDTH, 40); /* Text */ glColor3f(0.0f, 0.0f, 0.0f); glRasterPos2f(30, 20); glutBitmapString(GLUT_BITMAP_HELVETICA_18, "You won!"); glRasterPos2f(1, 35); glutBitmapString(GLUT_BITMAP_HELVETICA_12, "Press 'r' to restart"); drawScoreBoard(0, 40); glPopMatrix(); }
////////////////////////////////////////////////////////////////// // game // // // // Returns: // void // void game(void) { u8 moved; u8 *pvmem; u8 dir = 0; initGame(); // Clear Screen clearScreen(); pvmem = cpct_getScreenPtr(CPCT_VMEM_START, 61, 72); cpct_drawSprite(logo_small, pvmem, 15, 55); //drawFrame(2, 1, 49, 182); drawTable(); drawText("NEXT", 62, 2, 0); printCells(); highestCardGame = getHighestCard(); drawText("HIGHEST", 59, 138, 0); pvmem = cpct_getScreenPtr(CPCT_VMEM_START, 63, 154); cpct_drawSprite(cards[highestCardGame], pvmem, CARD_W, CARD_H); moved = 0; // Loop forever while (1) { delay(24); rotatedCells = 0; if ((cpct_isKeyPressed(Joy0_Right)) || (cpct_isKeyPressed(keys.right))) { if (rotateCellsRight() > 0) { dir = RIGHT; addRandomCellTurn(RIGHT); moved = 1; } } else if ((cpct_isKeyPressed(Joy0_Left)) || (cpct_isKeyPressed(keys.left))) { if (rotateCellsLeft() > 0) { dir = LEFT; addRandomCellTurn(LEFT); moved = 1; } } else if ((cpct_isKeyPressed(Joy0_Down)) || (cpct_isKeyPressed(keys.down))) { if (rotateCellsDown() > 0) { dir = DOWN; addRandomCellTurn(DOWN); moved = 1; } } else if ((cpct_isKeyPressed(Joy0_Up)) || (cpct_isKeyPressed(keys.up))) { if (rotateCellsUp() > 0) { dir = UP; addRandomCellTurn(UP); moved = 1; } } else if ( cpct_isKeyPressed(keys.music)) { if (!playing) { activateMusic(); } else { deActivateMusic(); } } else if (cpct_isKeyPressed(keys.abort)) break; if (moved) { //Empty the rotated cells buffer after ending the animation //cpct_waitVSYNC(); if (changedCards.number > 0) { animate(dir); resetChangedCards(); highestCardGame = getHighestCard(); pvmem = cpct_getScreenPtr(CPCT_VMEM_START, 63, 154); cpct_drawSprite(cards[highestCardGame], pvmem, CARD_W, CARD_H); // Play sound Effect cpct_akp_SFXPlay(3, 14, 50 + (highestCardGame * 2), 1, 0, AY_CHANNEL_A); } moved = 0; if (anyMovesLeft() == 0) { cpct_akp_stop(); cpct_akp_musicInit(song05); cpct_akp_musicPlay(); drawScore(); wait4UserKeypress(); drawFrame(14, 60, 68, 130); drawText("NO MORE MOVES", 20, 70, 1); drawText("GAME OVER", 22, 90, 1); sprintf(aux_txt, "SCORE %d", score); drawText(aux_txt, 22, 110, 1); delay(200); wait4UserKeypress(); setHighScore(score); drawScoreBoard(); cpct_akp_stop(); cpct_akp_musicInit(song02); cpct_akp_musicPlay(); break; } } } }