Ejemplo n.º 1
0
void bullet_storage_draw_all(BulletStorage self) {
	int i;
	for (i = 0; i < self->bullet_limit; i++) { //Loop backwards until we reach 0 or inactive bullets.
		Bullet current_bullet = self->bullet_array[i];
		if (current_bullet->flag_is_active) bullet_draw(current_bullet);
	}
}
Ejemplo n.º 2
0
void scene_render_game(Uint32 delta)
{
  background_draw(3, delta);
  world_draw(delta);
  player_draw(delta);
  enemy_draw();
  item_draw();
  bullet_draw();
  player_life_draw();
  world_life_draw();
}
Ejemplo n.º 3
0
Archivo: ship.c Proyecto: kiddos/meteor
void ship_draw(const ship *s) {
  // draw the bullets
  bullet_draw(s->bullets);

  // draw the ship
  const uint32_t bitmap_width = al_get_bitmap_width(s->bitmap);
  const uint32_t bitmap_height = al_get_bitmap_height(s->bitmap);

  if (s->attr.is_immune) {
    const double time_passed = al_get_time() - s->attr.time_stamp;
    if (time_passed - floor(time_passed) < 0.5) {
      al_draw_tinted_scaled_rotated_bitmap(s->bitmap, color_gray(),
                                           bitmap_width / 2,
                                           bitmap_height / 2,
                                           s->center.x, s->center.y,
                                           SHIP_SIZE / bitmap_width,
                                           SHIP_SIZE / bitmap_height,
                                           s->direction, 0);
    } else {
      al_draw_scaled_rotated_bitmap(s->bitmap,
                                    bitmap_width / 2,
                                    bitmap_height / 2,
                                    s->center.x, s->center.y,
                                    SHIP_SIZE / bitmap_width,
                                    SHIP_SIZE / bitmap_height,
                                    s->direction, 0);
    }
  } else {
    al_draw_scaled_rotated_bitmap(s->bitmap,
                                  bitmap_width / 2,
                                  bitmap_height / 2,
                                  s->center.x, s->center.y,
                                  SHIP_SIZE / bitmap_width,
                                  SHIP_SIZE / bitmap_height,
                                  s->direction, 0);
  }

#ifdef DEBUG
  al_draw_circle(s->center.x, s->center.y, 5, al_map_rgb(255, 0, 0), 3);
#endif
}
Ejemplo n.º 4
0
int main()
{
	set_conio_terminal_mode();
	acc_tick = last_tick = 0;

	for(int i=0;i<2;i++) {
		map_init(&gScreenBuffer[i]);
		map_new(&gScreenBuffer[i],35,15);

	}

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma.dat");
	bullet_init(&gBulletObject,0,0,0,&gBulletModel);
	
	system("clear");

	while(bLoop) {

		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~\r");
			}
			else if(ch == 'j') {
				double vx,vy,c;
				vx = 1.0;
				vy = 1.0;
				c = sqrt(vx*vx + vy*vy);
				vx /= c; vy /= c;

				bullet_fire(&gBulletObject,17,7,1.0,vx,vy,10.0);

			}

		}


		//apply 위치
		bullet_apply(&gBulletObject,delta_tick);

		
		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {
			//puts("tick...\r");
			map_drawTile(&gScreenBuffer[0],0,0,&gScreenBuffer[1]);
			bullet_draw(&gBulletObject,&gScreenBuffer[1]);
			gotoxy(0,0);
			map_dump(&gScreenBuffer[1],Default_Tilepalete);
			acc_tick = 0;
		}
	}


	return 0;
}
Ejemplo n.º 5
0
int main()
{
	set_conio_terminal_mode();
	acc_tick=last_tick=0;
	system("clear");
	map_init(&gScreenBuffer);
	map_new(&gScreenBuffer,45,20);

	map_init(&gBackBuffer);
	map_new(&gBackBuffer,45,20);

	map_init(&gF22Raptor);
	map_load(&gF22Raptor,"plane.dat");

	map_init(&gF22Bullet);
	map_load(&gF22Bullet,"bullet1.dat");

	map_init(&gPotal);
	map_load(&gPotal,"potal.dat");

	map_init(&gPotalBulletModel);
	map_load(&gPotalBulletModel,"plasma.dat");

	Plane_init(&gPlayerPlane,&gF22Raptor,35,17);
	Potal_init(&gPlayerPotal,&gPotal,1,1);
	//Potal_Bullet_init(&gPotalBulletObject,0,0,0,&gPotalBulletModel);

	for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){
		bullet_init(&g_bullets[i],0,0,0,&gF22Bullet);
	}

	for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){
		Potal_Bullet_init(&gPotalBulletObject[i],0,0,0,&gPotalBulletModel);
	}

	while(bLoop) {
		//타이밍처리 
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + 
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		clock_gettime(CLOCK_MONOTONIC,&work_timer2);
		double cur_tick2 = work_timer2.tv_sec + 
			(double)(work_timer2.tv_nsec * 1e-9);
		double delta_tick2 = cur_tick2 - last_tick2;
		last_tick2 = cur_tick2;

		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~ \r");
			}
			
			else if(ch=='j'){
				for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){
					_S_Bullet_Object *pObj=&g_bullets[i];
					if(pObj->m_nFSM==0){	//슬립상태
						bullet_fire(pObj,gPlayerPlane.m_nXpos,gPlayerPlane.m_nYpos,10,5.0);
						break;
					}
				}
			}

			else if(ch=='k'){

				for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){
					_S_Potal_Bullet_Object *pObj=&gPotalBulletObject[i];

					if(pObj->m_nFSM==0){

					double vx,vy,c;
					double angle=0;

					angle+=(delta_tick2*45);
					double rad=(angle/180.0)*PI;

					vx=(gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos)*cos(rad)-(gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos)*sin(rad);
					vy=(gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos)*sin(rad)+(gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos)*cos(rad);
	/*
					vx=gPlayerPlane.m_nXpos-gPlayerPotal.m_nXpos;
					vy=gPlayerPlane.m_nYpos-gPlayerPotal.m_nYpos;
	*/				
					c=sqrt(vx*vx+vy*vy);
					
					vx/=c; vy/=c;

					Potal_Bullet_Fire(&gPotalBulletObject[i],gPlayerPotal.m_nXpos,gPlayerPotal.m_nYpos,vx,vy,10,0);
					
					

					break;
					}
				}
			}
	
			Plane_Apply(&gPlayerPlane,delta_tick2,ch);

		}

		for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){
				_S_Bullet_Object *pObj=&g_bullets[i];
				bullet_apply(pObj,delta_tick);
		}
		//apply 위치..
		//Potal_Bullet_Apply(&gPotalBulletObject,delta_tick2);

		//타이밍 계산 
		acc_tick += delta_tick;
		acc_tick2 += delta_tick2;
		if(acc_tick && acc_tick2 > 0.1) {
			
			map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어 

			//map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer);//오브잭트 출력 
			
			Plane_Draw(&gPlayerPlane,&gScreenBuffer);
			Potal_Draw(&gPlayerPotal,&gScreenBuffer);
			
			for(int i=0;i<sizeof(g_bullets)/sizeof(_S_Bullet_Object);i++){
				_S_Bullet_Object *pObj=&g_bullets[i];
				bullet_draw(pObj,&gScreenBuffer);
			}

			for(int i=0;i<sizeof(gPotalBulletObject)/sizeof(_S_Potal_Bullet_Object);i++){
				_S_Potal_Bullet_Object *pObj=&gPotalBulletObject[i];
				Potal_Bullet_Draw(pObj,&gScreenBuffer);
			}

			gotoxy(0,0);
			puts("---------------------------------------------\r");
			map_dump(&gScreenBuffer,Default_Tilepalete);
			puts("---------------------------------------------\r");

			puts("move : w,a,s,d \r");
			puts("quit : q \r");
			
			acc_tick = 0;
			acc_tick2 = 0;
		}

	}

	return 0;

}
Ejemplo n.º 6
0
int main()
{
	set_conio_terminal_mode();
	acc_tick=last_tick=0;
	system("clear");
	map_init(&gScreenBuffer);
	map_new(&gScreenBuffer,35,16);

	map_init(&gBackBuffer);
	map_new(&gBackBuffer,35,16);

	map_init(&gF22Raptor);
	map_load(&gF22Raptor,"plane1.dat");

	map_init(&gF22Bullet);
	map_load(&gF22Bullet,"bullet1.dat");

	Plane_init(&gPlayerPlane,&gF22Raptor,17,10);

	for(int i=0;i< sizeof(g_bullets)/sizeof(S_BULLET_OBJECT) ;i++)
	{
		bullet_init(&g_bullets[i],0,0,0,&gF22Bullet);
	}

	while(bLoop) {
		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec +
			(double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;
		//실시간 입력
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("\r\n Bye~ \r");
			}
			else if(ch == 'j') {
				for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) {
					S_BULLET_OBJECT *pObj = &g_bullets[i];
					if(pObj->m_nFSM == 0) { //sleep 상태라면-
						bullet_fire(pObj,
								gPlayerPlane.m_nXpos+2,
								gPlayerPlane.m_nYpos,10,5.0);
						break;
					}
				}	
			}
			Plane_Apply(&gPlayerPlane,delta_tick,ch);

		}

		for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) {
			S_BULLET_OBJECT *pObj = &g_bullets[i];
			bullet_apply(pObj,delta_tick);
		}


		//타이밍 계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {

			map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어
			Plane_Draw(&gPlayerPlane,&gScreenBuffer);
			for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) {
				S_BULLET_OBJECT *pObj = &g_bullets[i];
				bullet_draw(pObj,&gScreenBuffer);
			}

			//map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer); //오브젝트 출력
			
			gotoxy(0,0);
			puts("-------------------------------------\r");
			map_dump(&gScreenBuffer,Default_TilePalette);
			puts("-------------------------------------\r");
			
			puts("move : w,a,s,d \r");
			puts("quit : q \r");
			acc_tick = 0;
		}
	}



	return 0;

}
Ejemplo n.º 7
0
int main()
{
	set_conio_terminal_mode();
	acc_tick = last_tick = 0;
	system("clear");

	map_init(&gScreenBuffer);
	map_new(&gScreenBuffer,50,23);

	map_init(&gBackBuffer);
	map_new(&gBackBuffer,50,23);

	map_init(&gF22Raptor);
	map_load(&gF22Raptor,"plane1.dat");

	map_init(&gF22Bullet);
	map_load(&gF22Bullet,"bullet1.dat");

	Plane_init(&gPlayerPlane,&gF22Raptor,22,17);	

	map_init(&gBulletModel);
	map_load(&gBulletModel,"plasma.dat");
	bullet_init(&gmissile,0,0,0,&gBulletModel);
	


	for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++)
	{
		bullet_init(&g_bullets[i],0,0,0,&gF22Bullet);
	}

	int shootx = 25;
	int shooty = 21;
	
	int fire_x = 25;
	int fire_y = 0;


	while(bLoop) {

		//타이밍처리
		clock_gettime(CLOCK_MONOTONIC,&work_timer);
		double cur_tick = work_timer.tv_sec + (double)(work_timer.tv_nsec * 1e-9);
		double delta_tick = cur_tick - last_tick;
		last_tick = cur_tick;

		double vx,vy,c;
		//실시간입력	
		if(kbhit() != 0) {
			char ch = getch();
			if(ch == 'q') {
				bLoop = 0;
				puts("bye~\r");
			}

			else if(ch == 'j') {
				for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) {
					double vx,vy,c;
					vx = gPlayerPlane.m_nXpos - shootx;
					vy = gPlayerPlane.m_nYpos - shooty;
					c = sqrt(vx*vx+vy*vy);
					vx /= c;
					vy /= c;

					S_BULLET_OBJECT *pObj = &g_bullets[i];
					if(pObj->m_nFSM == 0) { //슬립상태라면..
						setColor(33,40);
						bullet_fire(pObj,gPlayerPlane.m_nXpos,gPlayerPlane.m_nYpos,5.0,vx,vy,10);
						setColor(0,0);
						break;
					}
				}


			}

			else if(ch == 'k') {
				double vx,vy,c;
				vx = gPlayerPlane.m_nXpos - fire_x;
				vy = gPlayerPlane.m_nYpos - fire_y;
				c = sqrt(vx*vx+vy*vy);
				vx /= c;
				vy /= c;

				bullet_fire(&gmissile,fire_x,fire_y,5.0,vx,vy,10);
			

			}
		
			Plane_Apply(&gPlayerPlane,delta_tick,ch);
			

		}

		for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++) {
			S_BULLET_OBJECT *pObj = &g_bullets[i];
			bullet_apply(pObj,delta_tick);

		}

		bullet_apply(&gmissile,delta_tick);

		//타이밍계산
		acc_tick += delta_tick;
		if(acc_tick > 0.1) {

			map_drawTile(&gBackBuffer,0,0,&gScreenBuffer); //클리어

			//map_drawTile_trn(&gF22Raptor,xpos,ypos,&gScreenBuffer); //오브젝트 출력
			Plane_Draw(&gPlayerPlane,&gScreenBuffer);
		
			bullet_draw(&gmissile,&gScreenBuffer);

			for(int i=0;i<sizeof(g_bullets)/sizeof(S_BULLET_OBJECT);i++)
			{
				S_BULLET_OBJECT *pObj = &g_bullets[i];

					bullet_draw(pObj,&gScreenBuffer);
			}
			
			gotoxy(0,0);
			map_dump(&gScreenBuffer,Default_Tilepalete);
			
			puts("move : w,a,s,d \r");
			puts("quit : q \r");
			
			acc_tick = 0;
		}

	}

	return 0;
}