void render() { glClear(GL_COLOR_BUFFER_BIT); //glViewport(0, 0, 640, 480); /* glMatrixMode(GL_PROJECTION); */ /* glLoadIdentity(); */ /* gluOrtho2D(0, 320, 240, 0); */ glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glScalef(1.25,1.25,1.25); drawBackground(); if (help) { drawEnemySet(helplevel); drawDefenses(helplevel); drawShip(helpship); drawShots(helplevel); drawHelpText(); } else { drawEnemySet(level); drawDefenses(level); drawShip(ship); drawShots(level); drawGameText(); } glFlush(); glutSwapBuffers(); }
void draw3D() { glLoadIdentity(); // Load a new matrix camera(); // Calculate and set cameraview and cameraposition incAnimationVars(); // Draw Ship glPushMatrix(); glTranslatef(0.0f, 0.0f, -2.0f); drawShip(); glPopMatrix(); glPushMatrix(); glRotatef(angle, 0, 1, 0); glTranslatef(0.0f, 0.0f, -10.0f); drawShip(); glPopMatrix(); glPushMatrix(); glTranslatef(0.0f, 0.0f, dist); glRotatef(90, 0, 1, 0); drawShip(); glPopMatrix(); drawAxes(); // Draw grid //////////////////// glPushMatrix(); // Save matrix glTranslatef( 0.0f, -0.2f, 0.0f); // Translate grid in the y-axis drawGrid(); // Draw a grid on the ground glPopMatrix(); // Restore matrix }
static void draw() { switch ( status ) { case TITLE: drawBackground(); drawBoss(); drawBulletsWake(); drawBullets(); startDrawBoards(); drawSideBoards(); drawTitle(); endDrawBoards(); break; case IN_GAME: case STAGE_CLEAR: drawBackground(); drawBoss(); drawLasers(); drawShots(); drawBulletsWake(); drawFrags(); drawShip(); drawBullets(); startDrawBoards(); drawSideBoards(); drawBossState(); endDrawBoards(); break; case GAMEOVER: drawBackground(); drawBoss(); drawBulletsWake(); drawFrags(); drawBullets(); startDrawBoards(); drawSideBoards(); drawGameover(); endDrawBoards(); break; case PAUSE: drawBackground(); drawBoss(); drawLasers(); drawShots(); drawBulletsWake(); drawFrags(); drawShip(); drawBullets(); startDrawBoards(); drawSideBoards(); drawBossState(); drawPause(); endDrawBoards(); break; } }
void lvlIntro(Game *game, Level *level) { char levelNumber[50]; int row,col,xPos, j = 0; sprintf(levelNumber, "LEVEL %d", game->levelNum); playMusic(intro, FALSE); // Draw stars, increasing length (speeding up) for ( j = 0; j < 30; j++ ) { lcd_fillScreen(BLACK); for (row = level->stars.y; row < DISPLAY_HEIGHT; row += STAR_SPACING_HEIGHT) { for (col = level->stars.x; col < DISPLAY_WIDTH; col++) { if (xPos%STAR_SPACING_WIDTH == 0) { vLine(col,row, row + j, WHITE); } xPos++; } } xPos=0; // reset xPos lcd_putString(100, 50, (unsigned char *)levelNumber); drawShip(level->player.currPos.x, -3*j + INIT_SHIP_POS_Y, level->player.type); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer } lcd_fillScreen(WHITE); playMusic(RainPizz,FALSE); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(150); // Draw stars, decreasing length (slowing down) for ( j = 15; j > 0; j-- ) { lcd_fillScreen(BLACK); for (row = level->stars.y; row < DISPLAY_HEIGHT; row += STAR_SPACING_HEIGHT) { for (col = level->stars.x; col < DISPLAY_WIDTH; col++) { if (xPos%STAR_SPACING_WIDTH == /*(row%2)*/ 0) { vLine(col,row, row + j, WHITE); } xPos++; } } xPos=0; // reset xPos lcd_putString(100, 50, (unsigned char *)levelNumber); drawShip(level->player.currPos.x, level->player.currPos.y - j*j, level->player.type); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(100); } }
void updateGUI(Game *game, Level *level){ int i = 0; /* drawBackground(&(level->stars)); drawGameInfo(game, level); if(!level->playerDamaged) { drawShip(level->player.currPos.x, level->player.currPos.y); } else { level->playerDamaged = FALSE; } drawEnemies(level); drawBullets(level); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer */ if (level->playerDamaged) { for (i = 0; i < 2; i++) { drawBackground(&(level->stars)); drawGameInfo(game, level); //drawShip(level->player.currPos.x, level->player.currPos.y); drawEnemies(level); drawBullets(level); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(50); drawBackground(&(level->stars)); drawGameInfo(game, level); drawShip(level->player.currPos.x, level->player.currPos.y, level->player.type); drawEnemies(level); drawBullets(level); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer } level->playerDamaged = FALSE; } else { drawBackground(&(level->stars)); drawGameInfo(game, level); drawShip(level->player.currPos.x, level->player.currPos.y, level->player.type); drawEnemies(level); drawBullets(level); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer i++; } }
//Handling of rotation and debug up and down movement (disabled in curse.c) void moveShip(Ship *ship, FILE *sketch, int direction) { eraseShip(ship, sketch); switch(direction) { //down, left, right, up case DOWN: ship -> centerPos[0] += 0; ship -> centerPos[1] += 10; recreateShip(ship); break; case LEFT: rotateShip(ship, -ROT_ANGLE); break; case RIGHT: rotateShip(ship, ROT_ANGLE); break; case UP: ship -> centerPos[0] -= 0; ship -> centerPos[1] -= 10; recreateShip(ship); break; } drawShip(ship, sketch); }
void display() { GLfloat lightPos[4] = {sun.x, sun.y, sun.z, 1}; glLightfv(GL_LIGHT0, GL_POSITION, lightPos); moveSpace(&space, camera.eye.x, camera.eye.y, camera.eye.z); drawSpace(&space); drawShip(&ship); drawSun(&sun); }
void display(void) { glClear(GL_COLOR_BUFFER_BIT); drawShip(angle); drawRocks(); drawBullets(); glutSwapBuffers(); }
void GameWindow::paintEvent(QPaintEvent *){ QPainter painter(this); QPen pen; // Label home territory pen.setColor(Qt::blue); pen.setWidth(2); painter.setPen(pen); painter.setFont(QFont("Arial", 16)); painter.drawText( homeX+150, 40, "Allied Waters"); // Label enemy territory pen.setColor(Qt::red); pen.setWidth(2); painter.setPen(pen); painter.drawText( enemyX+150, 40, "Enemy Waters"); // Draw the seas pen.setColor(Qt::blue); QBrush brush; brush.setColor(Qt::cyan); brush.setStyle(Qt::Dense4Pattern); painter.setBrush(brush); painter.setPen(pen); painter.drawRect( homeX, homeY, 400, 400); painter.drawRect( enemyX, enemyY, 400, 400); brush.setStyle(Qt::NoBrush); painter.setBrush(brush); // Draw webs on the seas drawWeb( painter, homeX, homeY, 80, 5); drawWeb( painter, enemyX, enemyY, 80, 5); drawFire( fireX, fireY); // Draw ships if( isServer ){ Ship s = Ship( homeX, homeY, 3); s.blocks[1]=KILLED; drawShip(s); } else { Ship s = Ship( homeX, homeY, 3); drawShip(s); } }
void Renderer::drawAll() { calcTime(); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // Clear The Screen And The Depth Buffer glColor4f (1,1,1,1); glLoadIdentity(); glTranslatef(-game->ships[0]->position[0],-game->ships[0]->position[1],-30); // glTranslatef(0,0,-30); drawAxis(0,0,0); glColor3f( 0.0, 1.0, 1.0 ); wMesh->drawPolygon(-width*0.023,-height*0.023,0); drawShip(); drawModules(); drawMissles(); drawAsteroids(); // DrawQuadTexture(obiekty[0]->position[0],obiekty[0]->position[1],3,3,obiekty[0]->fOrientation, statek.imageID); // DrawQuadTexture(2.0f,2.0f,5.0f,5.0f,a[0]->myId); // drawAxis(0,0,0); //glPushMatrix(); // wMesh->drawPolygon(-width*0.023,-height*0.023,0); glPopMatrix(); glColor3f( 0.0, 1.0, 1.0 ); glLoadIdentity(); freetype::print(a, 77, 77, "Siemanko...."); CEGUI::System::getSingleton().renderAllGUIContexts(); glPushMatrix(); glTranslatef(0.0f, 0.0f, -15.0f); //obiekty.drawAll(); //DrawQuadTexture(1, 1, 10, 10, statek.imageID); SDL_GL_SwapWindow(window); }
void MainWindow::gameRender() { drawShip(this->player); for(int i = 0; i < playerBullets->size(); i++) { DrawPlayerBeam(playerBullets->at(i)); } for(int i = 0; i < enemies->size(); i++) { enemyDraw(enemies->at(i)); } }
void explode(Ship *ship, FILE *sketch) { int i, j, k; for (k = 0; k < 5; k++) { for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) ship -> structure[i][j] += (rand() % 40) - 20; eraseShip(ship, sketch); drawShip(ship, sketch); } }
void Game::spawnEnemies() { int posY; int shape; posY = (rand() % _win.getH() - 5); if (posY < 5) posY = 5; shape = rand() % 5; Enemy newEnemy(_win.getW() - 10, posY, LEFT, _enemyId, shape); _enemy[_enemyId] = newEnemy; drawShip(_enemy[_enemyId]); _enemyId++; }
// function that draws the screen void Draw_Map(int map_x_location, char map_array[12][MAP_SIZE], POSITION pos, POSITION laserPos, int laser, POSITION missilePos, int missile) { int x = map_x_location; int y = 0; // clear both planes SetPlane (LIGHT_PLANE); ClrScr(); SetPlane (DARK_PLANE); ClrScr(); // draw ship, and missiles and cannons if they exist drawShip(pos, map_x_location); if (laser) drawLaser(laserPos, map_x_location); if (missile == 1) drawMissile(missilePos, map_x_location); if (missile == -1) drawUpMissile(missilePos, map_x_location); // Well.. the map_x_location will keep track of where we are on the X-plane on the map array // This way we mask out the stuff in the array that we use.. So we will only read 20x12 elements of the // array (instead of MAP_SIZEx12 which it is at the moment.. ) while (x < (map_x_location + 20)) {// Again, we can't view more than 20 blocks.. so.. don't calculate more than 20 blocks if ((map_array[y][x] == 1)) { // If the array at this location is equal to 1, place a broken piece Sprite8((x - map_x_location) * 8, y * 8, 8, broken2_dark, GetPlane (DARK_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, broken2_light, GetPlane (LIGHT_PLANE), SPRT_XOR); } if ((map_array[y][x] == 2)) { // If the array at this location is equal to 1, place a broken piece Sprite8((x - map_x_location) * 8, y * 8, 8, broken1_dark, GetPlane (DARK_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, broken1_light, GetPlane (LIGHT_PLANE), SPRT_XOR); } if ((map_array[y][x] == 3)) { // .. and if it's 2, place block1 Sprite8((x - map_x_location) * 8, y * 8, 8, block1_dark, GetPlane (DARK_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, block1_light, GetPlane (LIGHT_PLANE), SPRT_XOR); } if ((map_array[y][x] == 4)) { // a 3 means the indestructible block Sprite8((x - map_x_location) * 8, y * 8, 8, solid1_light, GrayGetPlane(LIGHT_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, solid1_dark, GrayGetPlane(LIGHT_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, solid1_mid, GrayGetPlane(DARK_PLANE), SPRT_XOR); Sprite8((x - map_x_location) * 8, y * 8, 8, solid1_dark, GrayGetPlane(DARK_PLANE), SPRT_XOR); } y++; // Now.. we're increasing the Y value.. note that i'm drawing the world from LEFT to RIGHT // I've seen people who draw their world TOP to DOWN or otherwise, but i found LEFT to RIGHT // is the best way to draw the world.. if (y > 11) { // We've reached the limit.. restore the Y value, and move 1 block row forward.. y = 0; x++; } } }
GameMain::GameMain(int **tab, QWidget *parent) :QMainWindow(parent) { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { this->tab[i][j] = tab[i][j]; } } SOCKET s = initSocket(); //u_long iMode = 1; //ioctlsocket(s, FIONBIO, &iMode); Sea *sea = new Sea(); user = new User(sea,s); user->ShipCreator(this->tab); Update *update = new Update(user); connect(update, SIGNAL(waitSignal()), this, SLOT(wait())); connect(update, SIGNAL(changeSignal(int, int)), this, SLOT(change(int, int))); connect(update, SIGNAL(noChangeSignal(int, int)), this, SLOT(noChange(int, int))); update->start(); /*for (int o = 0; o < 10; o++) { for (int l = 0; l < 10; l++) { std::cout << tab[o][l]; } std::cout << std::endl; } while (true) { if (user->Check() == true) { break; } }*/ ui.setupUi(this); init(); drawShip(); }
void Game::moveEnemies() { int i; i = 0; while (i < _enemyId) { deleteShip(_enemy[i]); _enemy[i].goLeft(); if (_enemy[i].getPosX() < 0) _win.renderLose(); if (_enemy[i].getPosY() > _win.getH() || _enemy[i].getPosY() < 0) deleteEntity(_enemy[i]); if (!checkIfCollision(_enemy[i])) drawShip(_enemy[i]); i++; } }
//Updates position of ship based on accelerations, called from timer.c critical zone void applyAccelerations(Ship *ship, iArgs input, FILE *sketch) { eraseShip(ship, sketch); double oldX = ship -> centerPos[0]; double oldY = ship -> centerPos[1]; if (rotationBuffer != ship -> rotationAngle) { rotationBuffer = ship -> rotationAngle; } double oldxV = ship -> xspeed; double oldyV = ship -> yspeed; double deltat = 0.05; double thrust; double ar = rotationBuffer * PI / 180.0; if (ship -> thrustOn) { thrust = input.thrust; } else { thrust = 0; } ship -> xA = thrust*cos(ar); ship -> yA = -(input.gravity) + thrust*sin(ar); ship -> centerPos[0] = oldX + oldxV*deltat + (1/2)*(ship -> xA)*deltat*deltat; ship -> centerPos[1] = oldY + oldyV*deltat + (1/2)*(ship -> yA)*deltat*deltat; ship -> xspeed = oldxV - (ship -> xA)*deltat; ship -> yspeed = oldyV - (ship -> yA)*deltat; checkBoundaries(ship); recreateShip(ship); if (rotationBuffer != ship -> rotationAngle) { rotateShip(ship, rotationBuffer - 90); } drawShip(ship, sketch); // }
void PlayerGraphicsComponent::draw() { static const float PI = 3.14159f; QPointF position = getOwnerProperty("position").toPointF(); float rotation = getOwnerProperty("rotation").toFloat(); glPushMatrix(); glTranslatef(position.x(), position.y(), 0.0f); glRotatef(rotation * 180.0f / PI, 0.0f, 0.0f, 1.0f); if (accelerating) { drawAcceleration(); accelerating = false; } drawShip(); glColor3f(0.9f, 0.2f, 0.0f); glPopMatrix(); }
void draw(void) { glClear(GL_COLOR_BUFFER_BIT); drawShip(angle); drawBullets(); }
void draw() { nodeDefense *d; nodeTiro *t; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /*Limpa tudo*/ glLoadIdentity(); computeLocation(); gluLookAt( 0.0, 0.0, -5.0, /*Olho*/ 0.0, 0.0, 0.0, /*Centro*/ 0.0, 1.0, 0.0); /*Orientação (topo na direção Y)*/ glColor4f(1.0, 1.0, 1.0, 1.0); glEnable(GL_NORMALIZE); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glColor4f(1.0, .85, 0.0,1.0); glDisable(GL_LIGHTING); glDisable(GL_LIGHT0); glPushMatrix(); glTranslatef(0., -10., -30.); /*~Rio~*/ glColor4f(0.0, 0.0, 0.5, 1.0); glBegin(GL_TRIANGLES); { glVertex3f(-60., 0., 0.); glVertex3f(-60., 0., 500.); glVertex3f(60., 0., 0.); glVertex3f(60., 0., 0.); glVertex3f(-60., 0., 500.); glVertex3f(60., 0., 500.); } glEnd(); /*Terra*/ glColor4f(0.48, 0.25, 0.01, 1.0); glBegin(GL_TRIANGLES); { glVertex3f(60., 0., 0.); glVertex3f(60., 0., 500.); glVertex3f(220., 0., 0.); glVertex3f(220., 0., 0.); glVertex3f(60., 0., 500.); glVertex3f(220., 0., 500.); } glEnd(); glBegin(GL_TRIANGLES); { glVertex3f(-60., 0., 0.); glVertex3f(-60., 0., 500.); glVertex3f(-220., 0., 0.); glVertex3f(-220., 0., 0.); glVertex3f(-60., 0., 500.); glVertex3f(-220., 0., 500.); } glEnd(); /*Céu*/ glColor4f(0.6,0.75, 1. ,1.); glBegin(GL_TRIANGLES); { glVertex3f(-220., 0., 500.); glVertex3f(220., 0., 500.); glVertex3f(-220., 200., 500.); glVertex3f(220., 200., 500.); glVertex3f(220., 0., 500.); glVertex3f(-220., 200., 500.); } glEnd(); glPopMatrix(); glBegin(GL_QUADS); { glVertex3f( 21., 26., -19); glVertex3f( 5.5, 26., -19); glVertex3f( 5.5, 23., -19); glVertex3f( 21., 23., -19); } glEnd(); glColor3f(0.0, 0.0, 0.0); sprintf(jogador, "HP: %d Vidas: %d Pontos: %d", ship->hp, ship->vidas, ship->score); glRasterPos3f(16., 23.,-20); glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, jogador); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); for (d = defenseList->next; d != NULL; d = d->next) { glPushMatrix(); glTranslatef(d->defense->position->x, d->defense->position->y, d->defense->position->z); glBegin(GL_QUADS); { glColor3f(0.5f, 0.5f, 0.5f); glVertex3f( 0.8f, 0.8f, -0.8f); glVertex3f(-0.8f, 0.8f, -0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.8f, 0.8f, 0.8f); glVertex3f( 0.8f, 0.8f, 0.8f); /*Bottom face (y = -0.8f)*/ glColor3f(0.5f, 0.5f, 0.5f); glVertex3f( 0.8f, -3.0f, 0.8f); glVertex3f(-0.8f, -3.0f, 0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.8f, -3.0f, -0.8f); glVertex3f( 0.8f, -3.0f, -0.8f); /* Front face (z = 0.8f)*/ glColor3f(0.5f, 0.5f, 0.5f); glVertex3f( 0.8f, 0.8f, 0.8f); glVertex3f(-0.8f, 0.8f, 0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.8f, -3.0f, 0.8f); glVertex3f( 0.8f, -3.0f, 0.8f); /* Back face (z = -0.8f)*/ glColor3f(0.5f, 0.5f, 0.5f); glVertex3f( 0.8f, -3.0f, -0.8f); glVertex3f(-0.8f, -3.0f, -0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.8f, 0.8f, -0.8f); glVertex3f( 0.8f, 0.8f, -0.8f); /* Left face (x = -0.8f)*/ glColor3f(0.5f, 0.5f, 0.5f); glVertex3f(-0.8f, 0.8f, 0.8f); glVertex3f(-0.8f, 0.8f, -0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(-0.8f, -3.0f, -0.8f); glVertex3f(-0.8f, -3.0f, 0.8f); /* Right face (x = 0.8f)*/ glColor3f(0.5f, 0.5f, 0.5f); glVertex3f(0.8f, 0.8f, -0.8f); glVertex3f(0.8f, 0.8f, 0.8f); glColor3f(0.3f, 0.3f, 0.3f); glVertex3f(0.8f, -3.0f, 0.8f); glVertex3f(0.8f, -3.0f, -0.8f); } glEnd(); glPopMatrix(); } for (t = tiroList->next; t != NULL; t = t->next) { glPushMatrix(); glTranslatef(t->tiro->position->x, t->tiro->position->y, t->tiro->position->z); if (t->tiro->source == NAVE) glColor3f(0.0f, 0.0f, 0.0f); else glColor3f(0.5f, 0.27f, 0.0f); glutSolidSphere(0.15, 60, 60); glPopMatrix(); } drawShip(); glPushMatrix(); glTranslatef(ship->orientation->x, ship->orientation->y, -.5); glColor3f(0.0, 1.0, 0.0); glBegin(GL_LINE_LOOP); glVertex3f(-0.5, 1.0, 0.0); glVertex3f(-0.5, 3.0, 0.0); glVertex3f(1.5, 3.0, 0.0); glVertex3f(1.5, 1.0, 0.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslatef(ship->orientation->x, ship->orientation->y, 0.0); glBegin(GL_LINE_LOOP); glVertex3f(0.0, 1.3, 0.0); glVertex3f(0.0, 2.6, 0.0); glVertex3f(1.0, 2.6, 0.0); glVertex3f(1.0, 1.3, 0.0); glEnd(); glPopMatrix(); glutSwapBuffers(); glFlush(); }
void Ship::draw() { drawShip(this-> getPoint(), this-> getRotation(), this-> getThrust()); if (this-> getThrust()) this-> setThrust(false); }
static void draw(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glDisable(GL_BLEND); drawBg(); glScalef( 0.29, 0.29, 0.29); glPushMatrix(); glTranslatef( player.getPos().x, player.getPos().y, 0.0); glRotatef(player.getAngle(), 0.0, 0.0, -1.0); drawShip(); glPopMatrix(); rck::renderRocks(); glEnable(GL_BLEND); ptl::renderParticles(); prjctl::renderProjectiles(); gltext::beginOrtho(); string text; glColor3f(1.0, 0.0, 0.0); text = "Score: " + intToStr(playerScore); gltext::print(0, 460, text.c_str()); glColor3f(1.0, 0.0, 1.0); text = "Level: " + intToStr(curLvl); gltext::print(300, 460, text.c_str()); glColor3f(1.0, 1.0, 0.0); text = "Lives: " + intToStr(playerLives); gltext::print(525, 460, text.c_str()); glColor3f(1.0, 1.0, 1.0); text = intToStr(fps); gltext::print(270, 0, text.c_str()); gltext::endOrtho(); glFlush(); glPopMatrix(); SDL_GL_SwapBuffers(); Frames++; { GLint t = SDL_GetTicks(); if (t - T0 >= 5000) { GLfloat seconds = (t - T0) / 1000.0; fps = (int)(Frames / seconds); //printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); T0 = t; Frames = 0; } } }
static void draw() { switch ( status ) { case TITLE: // Draw background. drawBackground(); drawFoes(); drawBulletsWake(); blendScreen(); // Draw forground. drawBullets(); drawScore(); drawTitleMenu(); break; case IN_GAME: // Draw background. drawBackground(); drawBonuses(); drawFoes(); drawBulletsWake(); drawFrags(); blendScreen(); // Draw forground. drawShots(); drawShip(); drawBullets(); drawScore(); break; case GAMEOVER: // Draw background. drawBackground(); drawFoes(); drawBulletsWake(); drawFrags(); blendScreen(); // Draw forground. drawShots(); drawBullets(); drawScore(); drawGameover(); break; case STAGE_CLEAR: // Draw background. drawBackground(); drawBonuses(); drawFrags(); blendScreen(); // Draw forground. drawShots(); drawShip(); drawScore(); drawStageClear(); break; case PAUSE: // Draw background. drawBackground(); drawBonuses(); drawFoes(); drawBulletsWake(); drawFrags(); blendScreen(); // Draw forground. drawShots(); drawShip(); drawBullets(); drawScore(); drawPause(); break; } }
inline void moveShip(POSITION oldPos, POSITION newPos, int map_x_location) { eraseShip(oldPos, map_x_location); drawShip(newPos, map_x_location); }
inline void eraseShip(POSITION pos, int map_x_location) { drawShip(pos, map_x_location); }
int game(SHIP ship, int seed) { srand(seed); int gamestate = DRAWINIT; int screenWidth = 240; int screenHeight = 160; int lives = 5; int timer = 0; int gravity = 1; int playing = 1; // Create old ship SHIP shipbase = ship; SHIP oldship = ship; // Create landing pad LANDINGPAD p = createLandingPad(ship); // Create terrain int NUMTERRAIN = screenWidth; TERRAIN *terrain = generateTerrain(p); int i; // Game Loop while(1){ switch(gamestate) { case PAUSE: while(!(KEY_DOWN_NOW(BUTTON_LEFT) || KEY_DOWN_NOW(BUTTON_RIGHT) || KEY_DOWN_NOW(BUTTON_UP)|| KEY_DOWN_NOW(BUTTON_SELECT))); if(KEY_DOWN_NOW(BUTTON_LEFT) || KEY_DOWN_NOW(BUTTON_RIGHT) || KEY_DOWN_NOW(BUTTON_UP)); { gamestate = DRAWINIT; } // Return to title when select is pressed if(KEY_DOWN_NOW(BUTTON_SELECT)) { return TITLE; } playing = 1; gamestate = START; break; case DRAWINIT: // Set initial background DMA[3].src = BG; DMA[3].dst = videoBuffer; DMA[3].cnt = DMA_ON | 38400; // Draw the ship drawShip(ship); // Draw Lives drawLives(lives); // Draw the landing pad drawRect(p.row, p.col, p.length, p.width, p.color); // Draw the terrain drawTerrain(terrain); gamestate = PAUSE; break; case START: while(playing) { /////////////////// BUTTON CONTROLS ////////////////// // Return to title when select is pressed if(KEY_DOWN_NOW(BUTTON_SELECT)) { return TITLE; } // Left movement if(KEY_DOWN_NOW(BUTTON_LEFT) && ship.fuel > 0) { if(ship.col > 0) { ship.col-=ship.cdel; ship.fuel--; } } // Right movement if(KEY_DOWN_NOW(BUTTON_RIGHT) && ship.fuel > 0) { if(ship.col+ship.width < screenWidth) { ship.col+=ship.cdel; ship.fuel--; } } // Account for gravity and thrust if(KEY_DOWN_NOW(BUTTON_UP) && ship.fuel > 0) { if(timer > 5) { timer = 0; ship.rdel-=ship.thrust; } else { timer++; } ship.row+=ship.rdel; ship.fuel--; } else { ship.row+=ship.rdel; if(timer > 5) { timer = 0; ship.rdel+=gravity; } else { timer++; } } waitForVblank(); ///////////////////////// Collision Check ////////////////////////// // Check pad landing if((ship.row+ship.length >= p.row) && (ship.row+ship.length/2 < p.row+p.length) && (ship.col+ship.width/2 > p.col) && (ship.col-ship.width/2 < p.col + p.width)) { ship.row = p.row - ship.length; clearShip(oldship); drawShip(ship); return WIN; } // Check ground collision if((ship.row+ship.length >= screenHeight) && lives > 0) { clearShip(oldship); ship = shipbase; lives--; clearLives(lives); oldship = ship; gamestate = PAUSE; playing = 0; } // Check terrain collision for (i = 0; i < NUMTERRAIN; i += 1) { if((ship.row+ship.length >= terrain[i].row) && (ship.col+ship.width > terrain[i].col) && (ship.col < terrain[i].col + terrain[i].width) && (ship.row <= terrain[i].row+terrain[i].length)) { clearShip(oldship); ship = shipbase; lives--; clearLives(lives); oldship = ship; gamestate = PAUSE; playing = 0; } } // Draw if more lives after collision if(lives > 0) { // Draw lives drawLives(lives); // Draw the ship clearShip(oldship); drawShip(ship); } // Check lives if(lives <= 0) { clearShip(oldship); drawShip(ship); return LOSE; } oldship = ship; } break; } } return TITLE; }
int titleScreen (Controller *userInput, int highestScore, int *numberOfLives, char *shipType) { char print = TRUE; Position star; int seed = 1; int i = 0; char score[50]; unsigned short *universianArray[SPLASH_FRAMES]; universianArray[0] = Universian1; universianArray[1] = Universian2; universianArray[2] = Universian3; universianArray[3] = Universian4; universianArray[4] = Universian5; universianArray[5] = Universian6; lcd_fillScreen(BLACK); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer star.x = 0; star.y = 0; mdelay(300); playTheme(); for (i = 0; i < SPLASH_FRAMES; i++) { drawBackground(&star); lcd_BMP(DISPLAY_WIDTH/2, SPLASH_HEIGHT, -(0.5), -(0.5), universianArray[i], TRUE, FALSE); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer mdelay(SPLASH_DELAY); } mdelay(1000); sprintf(score, "Highest Score: %9d", highestScore); while(!userInput->start) { // wait for start button drawBackground(&star); drawShip(INIT_SHIP_POS_X, INIT_SHIP_POS_Y, DEFAULT_SHIP_TYPE); lcd_BMP(DISPLAY_WIDTH/2, SPLASH_HEIGHT, -(0.5), -(0.5), Universian6, TRUE, FALSE); if(seed%BLINK_RATE == 0) { print = !print; } if(print) { lcd_putString(50, 300, "Press START to continue..."); //lcd_putString(50, SPLASH_HEIGHT+27, "Press START to continue..."); //lcd_putString(50, 300, "Press START to continue..."); } lcd_putString(50, SPLASH_HEIGHT+37, (unsigned char *)score); lcd_putString(50, SPLASH_HEIGHT+55, " Made by"); lcd_putString(50, SPLASH_HEIGHT+65, " James Slack-smith"); lcd_putString(50, SPLASH_HEIGHT+75, "Shanush Prema Thasarathan"); seed++; pollController(userInput); memcpy((char*)LCD_FRAME_BUFFER,(char*)LCD_TEMP_BUFFER, 153600); // write temp buffer to fram buffer /* if (userInput->select) { selectMenu(userInput, numberOfLives, shipType); } */ mdelay(100); pollController(userInput); } stopMusic(); mdelay(500); return seed; }
//prototype int main(void){ bool done = false; bool redraw = true; const int FPS = 60; bool isGameOver = false; //object variables spaceShip ship; Bullet bullets[NUM_BULLETS]; Comet comets[NUM_COMETS]; ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *eventQueue = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_FONT *font18 = NULL; //check if allegro is initialised <allegro_native_dialog.h> if(!al_init()){ return -1; } display = al_create_display(WIDTH,HEIGHT); //check if display was created if(!display){ return -1; } al_init_primitives_addon(); al_install_keyboard(); al_init_font_addon(); al_init_ttf_addon(); eventQueue = al_create_event_queue(); timer= al_create_timer(1.0/FPS); srand(time(NULL)); // gives the rand() some value initShip(ship); initBullet(bullets, NUM_BULLETS); initComet(comets, NUM_COMETS); font18 = al_load_font("arial.ttf",18,0); al_register_event_source(eventQueue, al_get_keyboard_event_source()); al_register_event_source(eventQueue, al_get_timer_event_source(timer)); al_register_event_source(eventQueue, al_get_display_event_source(display)); //event os display resize closing, moving al_start_timer(timer); while(!done){ ALLEGRO_EVENT ev; al_wait_for_event(eventQueue, &ev); if (ev.type==ALLEGRO_EVENT_TIMER){ redraw=true; if(keys[UP]){ moveShipUp(ship); } if(keys[DOWN]){ moveShipDown(ship); } if(keys[LEFT]){ moveShipLeft(ship); } if(keys[RIGHT]){ moveShipRight(ship); } if(!isGameOver){ updateBullet(bullets,NUM_BULLETS); startComet(comets, NUM_COMETS); updateComet(comets, NUM_COMETS); collideBullet(bullets,NUM_BULLETS, comets, NUM_BULLETS, ship); collideComet(comets, NUM_COMETS, ship); if (ship.lives <= 0){ isGameOver = true; } } } // when clicling on red X icon to close the game else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE){ done=true; } else if (ev.type==ALLEGRO_EVENT_KEY_DOWN){ switch(ev.keyboard.keycode){ case ALLEGRO_KEY_ESCAPE: done=true; break; case ALLEGRO_KEY_UP: keys[UP]=true; break; case ALLEGRO_KEY_DOWN: keys[DOWN]=true; break; case ALLEGRO_KEY_LEFT: keys[LEFT]=true; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT]=true; break; case ALLEGRO_KEY_SPACE: keys[SPACE]=true; fireBullet(bullets, NUM_BULLETS, ship); break; } } else if (ev.type==ALLEGRO_EVENT_KEY_UP){ switch(ev.keyboard.keycode){ //make sure when exiting the program exit with esc button case ALLEGRO_KEY_ESCAPE: done=true; break; case ALLEGRO_KEY_UP: keys[UP]=false; break; case ALLEGRO_KEY_DOWN: keys[DOWN]=false; break; case ALLEGRO_KEY_LEFT: keys[LEFT]=false; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT]=false; break; case ALLEGRO_KEY_SPACE: keys[SPACE]=false; break; } } if (redraw && al_is_event_queue_empty(eventQueue)){ // I only draw the screen if there no more event redraw=false; if(!isGameOver){ drawShip(ship); drawBullet(bullets,NUM_BULLETS); drawComet(comets, NUM_COMETS); al_draw_textf(font18, al_map_rgb(255,0,255), 5, 5, 0, "Player has %i lives left. Player has destroyed %i objects", ship.lives, ship.score); } else{ al_draw_textf(font18, al_map_rgb(0,255,255),WIDTH / 2, HEIGHT / 2, ALLEGRO_ALIGN_CENTRE, "Game Over, Pal. Final Score: %i", ship.score); } al_flip_display(); al_clear_to_color(al_map_rgb(0,0,0)); //that prevents the filled rectangle draw imga just like snake style } //make sure when exiting the program exit with esc button // when clicling on red X icon to close the game } //al_rest(5.0); al_destroy_display(display); //hadouken return 0; }
//prototype int main(void){ bool done = false; bool redraw = true; const int FPS = 60; //object variables spaceShip ship; Bullet bullets[5]; ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *eventQueue = NULL; ALLEGRO_TIMER *timer = NULL; //check if allegro is initialised <allegro_native_dialog.h> if(!al_init()){ return -1; } display = al_create_display(WIDTH,HEIGHT); //check if display was created if(!display){ return -1; } al_init_primitives_addon(); al_install_keyboard(); //to capture keyboard events eventQueue = al_create_event_queue(); timer = al_create_timer(1.0 / FPS); initShip(ship); initBullet(bullets,NUM_BULLETS); //register the keyboard to eventQueue al_register_event_source(eventQueue,al_get_keyboard_event_source()); al_register_event_source(eventQueue,al_get_timer_event_source(timer)); al_register_event_source(eventQueue,al_get_display_event_source(display)); al_start_timer(timer); while(!done){ ALLEGRO_EVENT ev; al_wait_for_event(eventQueue,&ev); if(ev.type == ALLEGRO_EVENT_TIMER){ redraw=true; if(keys[UP]){ moveShipUp(ship); } if(keys[DOWN]){ moveShipDown(ship); } if(keys[LEFT]){ moveShipLeft(ship); } if(keys[RIGHT]){ moveShipRight(ship); } updateBullet(bullets,NUM_BULLETS); } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE){ done=true; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN){ switch(ev.keyboard.keycode){ case ALLEGRO_KEY_ESCAPE: done = true; break; case ALLEGRO_KEY_UP: keys[UP] = true; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = true; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = true; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = true; break; case ALLEGRO_KEY_SPACE: keys[SPACE] = true; fireBullet(bullets, NUM_BULLETS, ship); break; } } else if(ev.type == ALLEGRO_EVENT_KEY_UP){ switch(ev.keyboard.keycode){ case ALLEGRO_KEY_ESCAPE: done = true; break; case ALLEGRO_KEY_UP: keys[UP] = false; break; case ALLEGRO_KEY_DOWN: keys[DOWN] = false; break; case ALLEGRO_KEY_LEFT: keys[LEFT] = false; break; case ALLEGRO_KEY_RIGHT: keys[RIGHT] = false; break; case ALLEGRO_KEY_SPACE: keys[SPACE] = false; break; } } if(redraw && al_is_event_queue_empty(eventQueue)){ redraw = false; drawShip(ship); //without updating the bullets they will be only create a static spot in the screen, limited to n number of bullets drawBullet(bullets,NUM_BULLETS); // when clicling on red X icon to close the game al_flip_display(); al_clear_to_color(al_map_rgb(0,0,0)); //that prevents the filled rectangle draw imga just like snake style } //make sure when exiting the program exit with esc button } //al_rest(5.0); al_destroy_display(display); //hadouken return 0; }