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; }
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; }
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); } }
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; }
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; }
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++; }
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; }
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++; }