Beispiel #1
0
int main(int argc,const char *argv[])
{
    node_t * head=0,*node=0;
    node_t e={"e",0},d={"d",&e},c={"c",&d},b={"b",&d},a={"a",&b};
   
    head=&a;
    list_display(&a);
    printf ("%d\n",list_len(&a));
    //  head=list_reverse(&a);
    // list_display(head);
    node=getRec_k_th(head,1);
    printf ("Find the reciprocal of the k-th element : %s\n",node->data);
    node=getMidNode(head);
    printf ("The middle node is %s\n",node->data);

    list_display_reserve(head);
    printf("\n");
    node_t f = {"f",0}, g = {"g",&f}, h = {"h",&g}, i = {"i",&h};
	f.next = &g;
    if(isLoop(&i))
        printf("the list  have a loop\n");
    else
            printf("the list does'nt have a loop\n");
    node=getLoopNode(&i);
    printf ("The loop node is %s\n",node->data);

    
    node_t ee = {"1", 0}, dd = {"2", &ee}, cc = {"3", &dd}, bb = {"4", &cc}, aa = {"5", &bb};
	node_t z = {"8",&cc}, y = {"7", &z}, x = {"6", &y};
      if(is_intersect(&aa, &x))
      printf("the two lists are intersect\n");
      if(node=get_intersect_node(&aa,&x))
    printf("the intersect node is %s",node->data);
    return 0;
}
Beispiel #2
0
int main(){
	struct rectangle rect1 = make_rectangle(make_point(2,1), make_point(4,6));
	struct rectangle rect2 = make_rectangle(make_point(3,3), make_point(9,9));
	
	printf("Intersection: %d\n", is_intersect(rect1, rect2));
	
	return 0;
}
Beispiel #3
0
int is_intersect_body(struct square *s, struct body *b)
{
    if (!s || !b) {
        return 0;
    }
    else if (is_intersect(s, b->part)) {
        return 1;
    }
    else {
        return is_intersect_body(s, b->rest);
    }
}
Beispiel #4
0
element_if* element_if::get_child(vec2 const& coord)
{
    element_if* ret = 0;

    //reverse order
    for (auto it = _children.rbegin(), end = _children.rend(); it != end; ++it)
    {
        auto aabb = (*it)->get_aabb();
        if (is_intersect(coord, aabb))
        {
            ret = (*it).get();
            break;
        }
    }

    return ret;
}
Beispiel #5
0
void distance (pedbox *from, pedbox *to, float *x, float *y) {
	if ( is_intersect (from, to)) {
		*x = 0.0f, *y = 0.0f;
		return;
	}
	if (from->x1 < to->x0)
		*x = (to->x0 - from->x1);
	else if (from->x0 > to->x1)
		*x = (from->x0 - to->x1);
	else
		*x = 0.0f;
	
	if (from->y1 < to->y0)
		*y = to->y0 - from->y1;
	else if ( from->y0 > to->y1)
		*y = from->y0 - to->y1;
	else
		*y = 0.0f;
}
Beispiel #6
0
void game_loop( void )
{
    for ( int i = 0; i < star_count; i++ ) {
        star[i].y += star[i].speed;
        if ( star[i].y > screen_height ) {
            star_index_init( i, false );
        }
    }
    y_shift++;
    if ( y_shift == 256 ) {
        y_shift = 0;
    }
    for ( size_t i = 0; i < laser.size(); i++ ) {
        laser[i].life--;
        if ( laser[i].life == 0 ) {
            laser.erase( laser.begin() + i );
            continue;
        }
        if ( laser[i].player_flag ) {
            laser[i].y -= laser[i].speed;
            for ( size_t j = 0; j < enemy.size(); j++ ) {
                if ( is_intersect( laser[i].x, laser[i].y, enemy[j].x, enemy[j].y, 
                                   enemy_size, enemy_size ) ) {
                    enemy[j].life -= laser[i].damage;
                    laser.erase( laser.begin() + i );
                    game_score += 5;
                    break;
                }
            }
        } else {
            laser[i].y += laser[i].speed;
            if ( is_intersect( player_x, player_y, laser[i].x, laser[i].y, 
                               player_size_x, player_size_y ) ) {
                player_life -= laser[i].damage;
                laser[i].life = 1;
                continue;
            }
        }
        for ( size_t j = 0; j < meteor.size(); j++ ) {
            if ( is_intersect( meteor[j].x, meteor[j].y, laser[i].x, laser[i].y, 
                               meteor[j].w, meteor[j].h ) ) {
                laser[i].life = 1;
                if ( meteor[j].type < 5 ) {
                    meteor[j].type += 2;
                    meteor_add( meteor[j].x, meteor[j].y, 
                                meteor[j].type, meteor[j].t_type );
                } else {
                    meteor[j].life = -1;
                    if ( laser[i].player_flag == true ) {
                        game_score += 5;
                    }
                }
            }
        }
    }
    for ( size_t i = 0; i < enemy.size(); i++ ) {
        enemy[i].y += enemy[i].speed;
        enemy[i].angle += 1.0;
        enemy[i].counter--;
        if ( is_intersect( player_x, player_y, enemy[i].x, enemy[i].y, 
                           player_size_x, player_size_y ) ) {
            player_life -= enemy[i].life;
            enemy[i].life = -1;
        }
        if ( enemy[i].angle == 360 ) {
            enemy[i].angle = 0.0;
        }
        if ( enemy[i].x < 0 ) {
            enemy.erase( enemy.begin() + i );
            continue;
        }
        if ( enemy[i].life < 0 ) {
            enemy.erase( enemy.begin() + i );
            game_score += 50;
        }
        if ( enemy[i].counter < 0 ) {
            laser_add( enemy[i].x, enemy[i].y, false );
            enemy[i].counter = 50;
        }
    }
    for ( size_t i = 0; i < medkit.size(); i++ ) {
        if ( is_intersect( player_x, player_y, medkit[i].x, medkit[i].y, 
                           player_size_x, player_size_y ) ) {
            player_life += medkit[i].charge;
            medkit.erase( medkit.begin() + i );
            continue;
        }
        medkit[i].angle += 1.0;
        if ( medkit[i].angle == 360 ) {
            medkit[i].angle = 0.0;
        }
        medkit[i].y += medkit[i].speed;
        if ( medkit[i].y > screen_height ) {
            medkit.erase( medkit.begin() + i );
            continue;
        }
    }
    for ( size_t i = 0; i < meteor.size(); i++ ) {
        meteor[i].x += meteor[i].vx;
        meteor[i].y += meteor[i].vy;
        meteor[i].angle += 1.0;
        if ( meteor[i].angle == 360 ) {
            meteor[i].angle = 0.0;
        }
        if ( is_intersect( player_x, player_y, meteor[i].x, meteor[i].y, 
                           player_size_x, player_size_y ) ) {
            player_life -= meteor[i].damage;
            meteor[i].life = -1;
        }
        for ( size_t j = 0; j < enemy.size(); j++ ) {
            if ( is_intersect( meteor[i].x, meteor[i].y, enemy[j].x, enemy[j].y, 
                               meteor[i].w, meteor[i].h ) ) {
                enemy[j].life -= meteor[i].damage;
                meteor[i].life = -1;
            }
        }
        if ( meteor[i].life < 0 ) {
            meteor.erase( meteor.begin() + i );
            continue;
        }
    }
    if ( player_life <= 0 ) {
        std::cout << "GAME OVER!\nScore: " << game_score << std::endl; 
        game_restart();
    }
    if ( game_cycle % 40 == 0 ) {
        meteor_add( -1, -1, -1, -1 );
    }
    if ( game_cycle % 80 == 0 ) {
        enemy_add();
    }
    if ( game_cycle % 1000 == 0 ) {
        medkit_add();
    }
    game_cycle++;
}
Beispiel #7
0
int main(int argc, char *argv[])
{
    if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) {
        fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }
    SDL_Window *win = SDL_CreateWindow("snake", 50, 50, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_OPENGL);
    if (!win) {
        fprintf(stderr, "Unable to initialize window: %s\n", SDL_GetError());
        SDL_Quit();
        return -1;
    }
    SDL_GLContext gl_con = SDL_GL_CreateContext(win);
    struct square *head = make_square(0, 0, TILE, brown);
    struct square *fruit = make_square(0, 0, TILE, red);
    if (!head || !fruit) {
        fprintf(stderr, "Unable to allocate memory for square struct.");
        if (head) {
            free(head);
        }
    }
    struct body *snake_body = NULL;
    reposition_fruit(fruit);
    enum direction snake_d = LEFT;
    int previousx;
    int previousy;
    if (gl_con == NULL) {
        fprintf(stderr, "Unable to initialize gl context: %s\n", SDL_GetError());
        SDL_DestroyWindow(win);
        SDL_Quit();
        return -1;
    }
    SDL_Event event;
    while (1) {
        while (SDL_PollEvent(&event)) {
            if (event.type == SDL_QUIT) {
                goto end;
            }
            else if (event.type == SDL_KEYDOWN) {
                switch (event.key.keysym.sym) {
                case SDLK_ESCAPE:
                    goto end;
                    break;
                case SDLK_UP:
                    snake_d = UP;
                    break;
                case SDLK_DOWN:
                    snake_d = DOWN;
                    break;
                case SDLK_LEFT:
                    snake_d = LEFT;
                    break;
                case SDLK_RIGHT:
                    snake_d = RIGHT;
                    break;
                }
            }
        }
        previousx = head->x;
        previousy = head->y;
        switch (snake_d) {
        case UP:
            head->y += TILE;
            break;
        case DOWN:
            head->y -= TILE;
            break;
        case LEFT:
            head->x -= TILE;
            break;
        case RIGHT:
            head->x += TILE;
            break;
        }
        if (is_intersect_body(head, snake_body)) {
            goto end;
        }
        step_body(&snake_body, previousx, previousy);
        if (head->y > SCREEN_HEIGHT - TILE || head->y < -1 * SCREEN_HEIGHT || head->x > SCREEN_WIDTH - TILE || head->x < -1 * SCREEN_WIDTH) {
            goto end;
        }
        else if (is_intersect(head, fruit)) {
            add_body(&snake_body, previousx, previousy);
            do {
                reposition_fruit(fruit);
            } while (is_intersect(head, fruit) || is_intersect_body(fruit, snake_body));
        }
	cap_game_fps(display, win, head, snake_body, fruit);
    }
end:
    free(head);
    clean_body(snake_body);
    free(fruit);
    SDL_GL_DeleteContext(gl_con);
    SDL_Quit();
    return 0;
}
Beispiel #8
0
void game_loop( void )
{
    for ( size_t i = 0; i < bullet.size(); i++ ) {
        bullet[i].x = bullet[i].x + ceil( bullet[i].dx * bullet[i].step );
        bullet[i].y = bullet[i].y + ceil( bullet[i].dy * bullet[i].step );
        bullet[i].step++;
        bullet[i].life--;
        if ( bullet[i].life == 0 ) {
            bullet.erase( bullet.begin() + i );
            continue;
        }
        for ( size_t j = 0; j < enemy.size(); j++ ) {
            if ( is_intersect( bullet[i].x, bullet[i].y, enemy[j].x, enemy[j].y ) ) {
                game_add_blood( enemy[j].x - unit_size/2, 
                    enemy[j].y - unit_size/2, 0xA00000, rand()%3 );
                enemy[j].life -= bullet[i].damage;
                bullet.erase( bullet.begin() + i );
                game_score += 5;
                break;
            }
        }
    }
    for ( size_t i = 0; i < ammo.size(); i++ ) {
        ammo[i].life--;
        if ( ammo[i].life == 0 ) {
            ammo.erase( ammo.begin() + i );
            continue;
        }
        for ( size_t j = 0; j < ammo.size(); j++ ) {
            if ( is_intersect( ammo[i].x, ammo[i].y, player.x, player.y ) ) {
                player.ammo += ammo[i].bullet;
                ammo.erase( ammo.begin() + i );
                break;
            }
        }
    }
    for ( size_t i = 0; i < enemy.size(); i++ ) {
        float norm = sqrt( pow( player.x - enemy[i].x, 2 ) + pow( player.y - 16 - enemy[i].y, 2 ) );
        float dx, dy;
        if ( norm != 0 ) {
            dx = ( player.x - enemy[i].x ) / norm;
            dy = ( player.y - 16 - enemy[i].y ) / norm;
        } else {
            dx = dy = 0;
        }
        enemy[i].x += ceil( dx );
        enemy[i].y += ceil( dy );
        if ( enemy[i].life < 0 ) {
            enemy.erase( enemy.begin() + i );
            game_score += 50;
            continue;
        }
        if ( is_intersect( enemy[i].x, enemy[i].y, player.x, player.y ) && game_cycle % 20 == 0 ) {
            player.life -= enemy[i].attack;
            game_add_blood( player.x - unit_size/2, 
                player.y - unit_size/2, 0xFFFFFF, rand()%3  );
        }
    }
    for ( size_t i = 0; i < blood.size(); i++ ) {
        blood[i].life--;
        if ( blood[i].life < 25 ) {
            blood[i].alpha -= 10;
        }
        if ( blood[i].life == 0 ) {
            blood.erase( blood.begin() + i );
            continue;
        }
    }
    if ( player.life <= 0 ) {
        game_restart();
    }
    if ( game_cycle % 200 == 0 ) {
        game_add_enemy();
    }
    if ( game_cycle % 400 == 0 ) {
        game_add_ammo();
    }
    game_cycle++;
}