Ejemplo n.º 1
0
void player_inputPressed(u16 pressed, u16 state)
{
	//no move while dying or launching
	if (currentStep != STEP_PLAY)	return;

	if (pressed & (PORT_A_KEY_1|PORT_B_KEY_1) )
	{
		bullet_fire( shipPosition.x );
	}
	
	adjustVelocity(state);
}
Ejemplo n.º 2
0
void enemy_logic(unsigned long dt)
{
  int x, y;
  int move_down = 0;
  double rate;

  enemy_speed = getEnemySpeed();

  if (enemy[0][0].x < 0 || enemy[0][0].x + (11*32*gScale) > SCREEN_WIDTH)
  {
    enemy_direction *= -1;
    move_down = 1;
  }

  for (y = 0; y < 5; y++)
  {
    for (x = 0; x < 11; x++)
    {
      enemy[x][y].x += enemy_speed * enemy_direction * dt;

      if (move_down)
      {
        // prevents enemies getting stuck on side then disappearing
        enemy[x][y].x += enemy_speed * enemy_direction * dt;

        enemy[x][y].y += 16 * gScale;
      }

      enemy[x][y].rect.x = (int)enemy[x][y].x;
      enemy[x][y].rect.y = (int)enemy[x][y].y;

      // spawn bullets with an equal fire rate throughout level
      // since enemies decrease, higher chance of a given alive enemy
      //  shooting as enemies are shot down and levels passed
      rate = 100000.0 * ((float)enemy_total+1.0)/55.0 * (1.0/gDifficulty);

      if (enemy[x][y].alive && rand() % (int)rate < 2*dt)
      {
        bullet_fire(enemy[x][y].rect.x + enemy[x][y].rect.w/2 - gScale, enemy[x][y].rect.y + enemy[x][y].rect.h - 1, 0);
      }
    }
  }

  // Command ship spawn algorithm
  // Random chance to spawn after enemies move two rows down
  if (!command_spawned && (rand() % 40000 < 2*dt) && enemy[0][0].rect.y > 160)
  {
    command_spawned = 1;
    command.alive = 1;

    command_speed = (rand() % 3) + 1;
    command_points = command_speed * 100;

    Mix_FadeInChannel(-1, gCommandEntrance, -1, 2000);
  }
  // force command ship to spawn if it gets close to end of wave
  else if (!command_spawned && enemy_total < 8)
  {
    command_spawned = 1;
    command.alive = 1;

    command_speed = (rand() % 3) + 1;
    command_points = command_speed * 100;
    Mix_FadeInChannel(-1, gCommandEntrance, -1, 2000);
  }

  if (command.alive)
  {
    command.x -= .02f * gScale * command_speed * dt;
    command.rect.x = (int)command.x;

    if (command.rect.x + command.rect.w < 0)
    {
      command.alive = 0;
      Mix_HaltChannel(-1);
      Mix_PlayChannel(-1, gCommandExit, 0);
    }
  }

  // reset level if all enemies were killed
  if (enemy_total == 0)
  {
    SDL_Delay(2000);
    gDifficulty *= 2.0f;
    enemy_reset();
    bullet_reset();
    defense_reset();
  }
}
Ejemplo n.º 3
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.º 4
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.º 5
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.º 6
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;
}