コード例 #1
0
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();
}
コード例 #2
0
ファイル: draw.c プロジェクト: te-bachi/cgr
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
}
コード例 #3
0
ファイル: rr.c プロジェクト: pwhelan/rrootage
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;
  }
}
コード例 #4
0
ファイル: GUI.c プロジェクト: jslack-smith/Universian
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);
	}
}
コード例 #5
0
ファイル: GUI.c プロジェクト: jslack-smith/Universian
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++;
	}
	
	
}
コード例 #6
0
ファイル: lander.c プロジェクト: dscarmo/assignment3
//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);
}
コード例 #7
0
ファイル: shipViewer.c プロジェクト: Natsirtt/URSProject
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);
}
コード例 #8
0
ファイル: asteroids.c プロジェクト: amlanpradhan/GLUT
void
display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  drawShip(angle);
  drawRocks();
  drawBullets();
  glutSwapBuffers();
}
コード例 #9
0
ファイル: gamewindow.cpp プロジェクト: gepeszoli/hazi
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);
        }

}
コード例 #10
0
ファイル: Renderer.cpp プロジェクト: kamx44/MokaGame
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);
}
コード例 #11
0
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));
    }
}
コード例 #12
0
ファイル: lander.c プロジェクト: dscarmo/assignment3
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);

    }

}
コード例 #13
0
ファイル: Game.class.cpp プロジェクト: Fingalar/MyOwnProjects
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++;
}
コード例 #14
0
ファイル: blaster.c プロジェクト: bcherry/bcherry
// 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++;
        }
    }
}
コード例 #15
0
ファイル: gameMain.cpp プロジェクト: michalwojtowicz/UML
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();


}
コード例 #16
0
ファイル: Game.class.cpp プロジェクト: Fingalar/MyOwnProjects
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++;
	}
}
コード例 #17
0
ファイル: lander.c プロジェクト: dscarmo/assignment3
//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);
    //
}
コード例 #18
0
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();
}
コード例 #19
0
ファイル: asteroids.c プロジェクト: 8l/swieros
void draw(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  drawShip(angle);
  drawBullets();
}
コード例 #20
0
ファイル: teste_nave.c プロジェクト: Abello966/LabProgI
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();
}
コード例 #21
0
ファイル: ship.cpp プロジェクト: GamaTellez/asteroids-
void Ship::draw()
{
  drawShip(this-> getPoint(), this-> getRotation(), this-> getThrust());
  if (this-> getThrust())
    this-> setThrust(false);
}
コード例 #22
0
ファイル: main.cpp プロジェクト: runemoennike/asteroids
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;
        }
    }
}
コード例 #23
0
ファイル: noiz2sa.c プロジェクト: kazuya-watanabe/noiz2sa
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;
  }
}
コード例 #24
0
ファイル: blaster.c プロジェクト: bcherry/bcherry
inline void moveShip(POSITION oldPos, POSITION newPos, int map_x_location) {
    eraseShip(oldPos, map_x_location);
    drawShip(newPos, map_x_location);
}
コード例 #25
0
ファイル: blaster.c プロジェクト: bcherry/bcherry
inline void eraseShip(POSITION pos, int map_x_location) {
    drawShip(pos, map_x_location);
}
コード例 #26
0
ファイル: GameState.c プロジェクト: IAmKevin/Lunar-Landing
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;
}
コード例 #27
0
ファイル: GUI.c プロジェクト: jslack-smith/Universian
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;
}
コード例 #28
0
//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;
}
コード例 #29
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;
}