コード例 #1
0
ファイル: block.c プロジェクト: kroody/tetris-free
static int player_frame_end(Player * player, IOOPS * io_ops)
{
    if (player->cur_shape)
        return 1;

    if (player->grade > player->old_grade) {
        if (player->grade / BLOCK_GRADE && !(player->grade % BLOCK_GRADE)) {
            player->speed *= 0.9;
            player->level++;
        }
        io_ops->out_grade(player);
        player->old_grade = player->grade;
    }

    player->cur_shape = player->next_shape;
    player->next_shape = shapes[rand_id()];
    cp_next_shape(player);

    io_ops->out_next_block(player);

    player->direct = 0;
    player->x = BLOCK_MAP_W / 2 - player->cur_shape->w / 2;
    player->y = 0;

    cp_shape_to_block(player->blocks, player->x, player->y, player->cur_shape);

    if (check_collide(player))
        return 0;

    return 1;
}
コード例 #2
0
ファイル: spacesector.cpp プロジェクト: nihilocrat/yarrwars
void spaceSector :: handle_weapons()
{
	// go through the array and call draw functions

	vector<spaceWeapon*>::iterator weapons_i;
	for (weapons_i = weapons.begin() ;
		 weapons_i != weapons.end() ;
		 weapons_i++)
	{
		(*weapons_i)->tick();

		// remove this weapon if no bullets exist AND the owner is dead
		/*
		if( !(*weapons_i)->parent->alive )
			if( !(*weapons_i)->alive )
			{
				weapons.erase(weapons_i);
				weapons_i--;
				continue;
			}
		*/

		// do collision detection here
		// DEBUG : let's be lazy and do it with EVERY ship!
		vector<spaceBullet>::iterator bullet_i;
		spaceShip* victim;

		for(bullet_i = (*weapons_i)->part.begin() ;
			bullet_i != (*weapons_i)->part.end() ;
			bullet_i++)
		{
			victim = check_collide( bullet_i );

			if(victim != NULL)
			{
				(*weapons_i)->damage(bullet_i, victim);
				
				// then remove this bullet
				// NOTE / HACK : instead of erasing it here and messing up the iterator,
				//	let's just set it's life to 0 so it will automatically get removed
				bullet_i->life = 0;
			}
		}// bullet collision loop
	} // weapon handle loop
}