void draw_rotating_ship(int *t,SDL_Event event){ glPushMatrix(); glTranslated(200,35,0); glPushMatrix(); glRotated(30,1,1,0); glPushMatrix(); glRotated(*t,0,0,0.2);*t+=2; if(event.motion.x>450 && event.motion.x<600 && event.motion.y>180 && event.motion.y<280) draw_ship({ship_color.x*2,ship_color.y*2,ship_color.z*2}); else draw_ship(ship_color); glPopMatrix(); glPopMatrix(); glPopMatrix(); }
void check_arg(char **av, t_img *img, t_frac *frac) { if (av[2]) frac->max_iter = ft_atoi(av[2]); init_color(frac, av); if (ft_strequ(av[1], "mandel") == 1) { set_mandel(frac); draw_mandelbrot(img, frac); } else if (ft_strequ(av[1], "julia") == 1) { set_julia(frac); draw_julia(img, frac); } else if (ft_strequ(av[1], "ship") == 1) { set_ship(frac); draw_ship(img, frac); } else if (ft_strequ(av[1], "triangle") == 1) { set_triangle(frac); draw_sierpinski(img, frac); } else exit(0); }
void move_spaceship(Xuint8 *dir) { erase_square(XPAR_VGA_PERIPH_MEM_0_S_AXI_MEM0_BASEADDR, spaceship_x, SHIP_Y); if(*dir == 0) { if(spaceship_x == MAX_SHIP_X) { spaceship_x--; *dir = 1; } else spaceship_x++; } else if(spaceship_x == MIN_SHIP_X) { spaceship_x++; *dir = 0; } else spaceship_x--; //Did new leftmost of rightmost part of ship hit a projectile if(ship_hit_projectile(spaceship_x-1) || ship_hit_projectile(spaceship_x+1)) { if(--lives == 0) game_over = 1; } draw_ship(XPAR_VGA_PERIPH_MEM_0_S_AXI_MEM0_BASEADDR, spaceship_x, SHIP_Y); }
static void draw_game(void){ draw_ship(); draw_shots(); draw_score(); make_asteroids(); detect_collitions(); draw_environ(); }
void draw_game(game *g) { int i; al_clear_to_color(BACKGROUND_COLOR); if(g->status == Pause || g->status == Win || g->status == Lose) draw_menu(g); else if(g->status == Config) draw_config(g); else if(g->status != Quit) { draw_ui(g); draw_ship(g); draw_shoots(g); draw_asteroids(g); } }
void draw_cubes_ship(double teta,int pause=0){ glPushMatrix(); glRotated(teta*0.4,1,0,0); for(int i=0;i<M;i++) for(int j=0;j<M;j++){ if(!pause)T[i].pos[j].y+=teta*0.25; draw_cube(T[i].s[j],T[i].pos[j]); } glPopMatrix(); glPushMatrix(); glRotated(-teta*0.1,0,0,1); glRotated(teta*0.4,1,0,0); glTranslated(200,0,0); draw_ship(ship_color); glPopMatrix(); }
static void draw(struct game_state *gs) { extern struct game_state *cur_state; extern struct game_state playback_state; glMatrixMode(GL_MODELVIEW); glPushMatrix(); set_modelview_matrix(); if (!settings.static_settings || settings.static_settings->background) draw_level_background(); if (cur_state != &playback_state && settings.control_type == CONTROL_HYBRID && ship_is_visible()) draw_crosshair(); if (inner_state.state != IS_LEVEL_CLEARED && inner_state.state != IS_LEVEL_TRANSITION && (inner_state.state != IS_WAVE_CLEARED || inner_state.tics < WAVE_CLEARED_TICS/2)) draw_arena_outline(cur_arena, 1, cur_arena->border_type); draw_explosions(); draw_particles(); if (ship_is_visible()) { draw_ship(); draw_missiles(); draw_bombs(); draw_lasers(); draw_foes(); draw_powerups(); } draw_in_game_texts(); draw_text(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); }
void draw() { clear_buffer(SDL_GetVideoSurface()); draw_starfield(stars); draw_ship(ship); }
int main(int argc, char *argv[]) { int c; while((c = getopt(argc, argv, "hv")) != -1) { switch(c) { case 'h': puts(HELP); return 0; case 'v': printf("version %.1f\n", PROGRAM_VERSION); return 0; } } if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\n"); return -1; } if(argc == 2 && !strcmp(argv[1], "-v")) { printf("version %.1f\n", PROGRAM_VERSION); return 0; } bool key[5] = {false, false, false, false, false}; bool doexit = false; bool redraw = true; timer = al_create_timer(1.0 / FPS); if(!timer) { fprintf(stderr, "couldn't initialize timer.\n"); return -1; } display = al_create_display(SCREEN_W, SCREEN_H); if(!display) { fprintf(stderr, "failed to create the display.\n"); al_destroy_timer(timer); return -1; } al_set_window_title(display, "blasteroids"); al_init_primitives_addon(); if(!al_install_keyboard()) { fprintf(stderr, "failed to initialize keyboard.\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } /* Making the sky look like sky */ colors[0] = al_map_rgba(255, 100, 255, 128); colors[1] = al_map_rgba(255, 100, 100, 255); colors[2] = al_map_rgba(100, 100, 255, 255); for (layer = 0; layer < 3; layer++) { for (star = 0; star < NUM_STARS/3; star++) { Point *p = &stars[layer][star]; p->x = rand() % SCREEN_W; p->y = rand() % SCREEN_H; } } start = al_get_time() * 1000; now = start; elapsed = 0; frame_count = 0; program_start = al_get_time(); /* done with the sky. Now making the ship. */ Spaceship *ship = init_ship(); List *a = (List *)summon_asteroids(NUMBER_ASTEROIDS); ListElmt *astElmt = list_head(a); if(!ship) { fprintf(stderr, "couldn't create bitmap.\n"); al_destroy_timer(timer); al_destroy_display(display); return -1; } Blast *blast = init_blast(ship->sx, ship->sy, ship->heading); event_queue = al_create_event_queue(); if(!event_queue) { fprintf(stderr, "failed to create event queue.\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } al_register_event_source(event_queue, al_get_keyboard_event_source()); al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_timer_event_source(timer)); al_start_timer(timer); while(!doexit) { /* animate the sky, just sky, starts, but NOT objects. */ ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_TIMER) { if(key[UP]) ship->speed += 0.04; if(key[RIGHT]) ship->heading += 1.0f; if(key[DOWN]) if(ship->speed > 0.05) ship->speed -= 0.04; if(key[LEFT]) ship->heading -= 1.0f; fly_ship(ship); // fire ze missile if(key[SPACE]) { blast->sx = ship->sx; blast->sy = ship->sy; blast->heading = ship->heading; blast->gone = 0; } float theta = head2theta(blast->heading); blast->sx += blast->speed * cos(theta); if(blast->sx <= 0 || blast->sx >= SCREEN_W) { blast->gone = 1; } blast->sy += blast->speed * sin(theta); if(blast->sy <= 0 || blast->sy >= SCREEN_H) { blast->gone = 1; } /* loop through the list of asteroids */ astElmt = (astElmt->next)?astElmt->next : list_head(a); Asteroid *aster = astElmt->aster; /* asteroid eternity */ if(aster->sx < 0 || aster->sx > SCREEN_W - 33) aster->sx = 0; if(aster->sy < 0 || aster->sy > SCREEN_H) aster->sy = 0; aster->twist += aster->rot_velocity; /* Fuzzy movement */ if((int)aster->sx % 3 == 0) aster->sx += aster->speed; aster->sx += 0.9; if((int)aster->sy % 5 == 3) aster->sy += aster->speed; aster->sy += 0.9; aster->twist += 0.4; /* detect alteroid collision, but only if 5 seconds have passed since the last Death */ Box s = {{ship->sx, ship->sy}, 16.0f, 20.0f}; Box a = {{aster->sx, aster->sy}, 45.0f, 40.0f}; if(ship->heading != -90.0f) { if(!aster->gone && !ship->gone && is_collision(&s, &a)) { ship->color = al_map_rgb(0, 0, 255); } } /* detect asteroid being shot */ Box b = {{blast->sx, blast->sy}, 120.0f, 3.0f}; if(!(blast->gone) && !(aster->gone) && is_collision(&b, &a)) { aster->gone = 1; } redraw = true; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: key[UP] = true; break; case ALLEGRO_KEY_RIGHT: key[RIGHT] = true; break; case ALLEGRO_KEY_DOWN: key[DOWN] = true; break; case ALLEGRO_KEY_LEFT: key[LEFT] = true; break; case ALLEGRO_KEY_SPACE: key[SPACE] = true; break; } } else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: key[UP] = false; break; case ALLEGRO_KEY_RIGHT: key[RIGHT] = false; break; case ALLEGRO_KEY_DOWN: key[DOWN] = false; break; case ALLEGRO_KEY_LEFT: key[LEFT] = false; break; case ALLEGRO_KEY_SPACE: key[SPACE] = false; break; case ALLEGRO_KEY_Q: case ALLEGRO_KEY_ESCAPE: doexit = true; break; } } if(redraw && al_is_event_queue_empty(event_queue)) { redraw = false; al_clear_to_color(al_map_rgb(0, 0, 0)); if (frame_count < (1000/TARGET_FPS)) { frame_count += elapsed; } else { int X, Y; frame_count -= (1000/TARGET_FPS); for (star = 0; star < NUM_STARS/3; star++) { Point *p = &stars[0][star]; al_draw_pixel(p->x, p->y, colors[0]); } /* al_lock_bitmap(al_get_backbuffer(display), ALLEGRO_PIXEL_FORMAT_ANY, 0); */ for (layer = 1; layer < 3; layer++) { for (star = 0; star < NUM_STARS/3; star++) { Point *p = &stars[layer][star]; // put_pixel ignores blending al_put_pixel(p->x, p->y, colors[layer]); } } /* Check that dots appear at the window extremes. */ X = SCREEN_W - 1; Y = SCREEN_H - 1; al_put_pixel(0, 0, al_map_rgb_f(1, 1, 1)); al_put_pixel(X, 0, al_map_rgb_f(1, 1, 1)); al_put_pixel(0, Y, al_map_rgb_f(1, 1, 1)); al_put_pixel(X, Y, al_map_rgb_f(1, 1, 1)); /* al_unlock_bitmap(al_get_backbuffer(display)); */ total_frames++; } now = al_get_time() * 1000; elapsed = now - start; start = now; for (layer = 0; layer < 3; layer++) { for (star = 0; star < NUM_STARS/3; star++) { Point *p = &stars[layer][star]; p->y -= speeds[layer] * elapsed; if (p->y < 0) { p->x = rand() % SCREEN_W; p->y = SCREEN_H; } } } draw_ship(ship); if(!blast->gone) { draw_blast(blast); } draw_asteroids(a); al_flip_display(); } } length = al_get_time() - program_start; /* printf("Length = %f\n", length); */ al_destroy_timer(timer); al_destroy_display(display); al_destroy_event_queue(event_queue); return 0; }
int main(void) { bool done =false; bool redraw = true; ALLEGRO_DISPLAY *display = NULL; ALLEGRO_TIMER *timer =NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; SpaceShip ship; Bullet bullet[num_bullets]; Commet commet[num_commets]; if(!al_init()) { fprintf(stderr,"allegro is not intialized"); return -1; } display = al_create_display(SCREEN_W,SCREEN_H); if(!display) { fprintf(stderr,"failed to intialize the display"); return -1; } timer = al_create_timer(1.0/FPS); if(!timer) { fprintf(stderr,"failed to intialize timer"); al_destroy_display(display); return -1; } event_queue = al_create_event_queue(); if(!event_queue) { fprintf(stderr,"failed to create event queue"); al_destroy_display(display); al_destroy_timer(timer); return -1; } al_install_keyboard(); al_register_event_source(event_queue,al_get_timer_event_source(timer)); al_register_event_source(event_queue,al_get_keyboard_event_source()); al_register_event_source(event_queue,al_get_display_event_source(display)); init_ship(&ship); init_bullet(&bullet); init_commet(&commet); al_start_timer(timer); while(!done) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue,&ev); if(ev.type == ALLEGRO_EVENT_TIMER) { if(keys[KEY_UP]) { move_ship_up(&ship); } if(keys[KEY_DOWN]) { move_ship_down(&ship); }if(keys[KEY_LEFT]) { move_ship_left(&ship); } if(keys[KEY_RIGHT]) { move_ship_right(&ship); } if(keys[KEY_SPACEBAR]) { fire_bullet(&bullet,&ship); } if(!GameOver) { update_bullet(&bullet); update_commet(&commet); bullet_collision(&bullet,&commet); } redraw = true; } else if(ev.type==ALLEGRO_EVENT_DISPLAY_CLOSE) { done = true; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: { keys[KEY_UP]=true; break; } case ALLEGRO_KEY_DOWN: { keys[KEY_DOWN]=true; break; } case ALLEGRO_KEY_LEFT: { keys[KEY_LEFT]=true; break; } case ALLEGRO_KEY_RIGHT : { keys[KEY_RIGHT]=true; break; } case ALLEGRO_KEY_SPACE: { keys[KEY_SPACEBAR] = true; break; } } } else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: { keys[KEY_UP]=false; break; } case ALLEGRO_KEY_DOWN: { keys[KEY_DOWN]=false; break; } case ALLEGRO_KEY_LEFT: { keys[KEY_LEFT]=false; break; } case ALLEGRO_KEY_RIGHT : { keys[KEY_RIGHT]=false; break; } case ALLEGRO_KEY_SPACE: { keys[KEY_SPACEBAR]=false; break; } } } if(redraw && al_event_queue_is_empty(event_queue)) { redraw = false ; al_clear_to_color(al_map_rgb(255,100,100)); draw_ship(&ship); draw_bullet(bullet); draw_commet(commet); al_flip_display(); al_clear_to_color(al_map_rgb(255,100,100)); } } al_destroy_display(display); al_destroy_timer(timer); al_destroy_event_queue(event_queue); return 0; }
int main(int argc, char **argv) { ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_FONT *font_arial_36 = NULL; ALLEGRO_FONT *font_arial_24 = NULL; ALLEGRO_TRANSFORM transform; bool key[6] = { false, false, false, false, false, true }; bool redraw = true; bool doexit = false; char display_score[20]; char display_lives[20]; char display_ammo[20]; char display_countdown[20]; int ammo = 99; if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\n"); return -1; } al_init_font_addon(); if (!al_init_ttf_addon()) { fprintf(stderr, "failed to initialize ttf addon!\n"); return -1; } if(!al_install_keyboard()) { fprintf(stderr, "failed to initialize the keyboard!\n"); return -1; } timer = al_create_timer(1.0 / FPS); if(!timer) { fprintf(stderr, "failed to create timer!\n"); return -1; } display = al_create_display(SCREEN_W, SCREEN_H); if(!display) { fprintf(stderr, "failed to create display!\n"); al_destroy_timer(timer); return -1; } event_queue = al_create_event_queue(); if(!event_queue) { fprintf(stderr, "failed to create event_queue!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } font_arial_36 = al_load_ttf_font("arial.ttf", 36, 0); if (!font_arial_36){ fprintf(stderr, "arial 36 not loaded!\n" ); return -1; } font_arial_24 = al_load_ttf_font("arial.ttf", 24, 0); if (!font_arial_36){ fprintf(stderr, "arial 24 not loaded!\n" ); return -1; } al_init_primitives_addon(); al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_timer_event_source(timer)); al_register_event_source(event_queue, al_get_keyboard_event_source()); /* Start game */ Spaceship* ship = new_ship(); last = make_roids(ROIDS); Blast **blasts = new_blasts(); int countdown = 10; while(countdown && !DEBUG_MODE) { al_clear_to_color(al_map_rgb(0,0,0)); /* Welcome - Ugly code, write nicer function. */ al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_36, al_map_rgb(255,0,0), SCREEN_W/2, 100, ALLEGRO_ALIGN_CENTRE, "Welcome to Casper's BLASTEROIDS!"); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 150, ALLEGRO_ALIGN_CENTRE, "You got three lives, 100 shots and a lot of asteroids to blast."); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 170, ALLEGRO_ALIGN_CENTRE, "Fire with space, steer with the arrow keys and hit escape"); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 190, ALLEGRO_ALIGN_CENTRE, "if you don't dare to play to the end..."); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 230, ALLEGRO_ALIGN_CENTRE, "(If you get hit by and asteroid, you will die,"); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 250, ALLEGRO_ALIGN_CENTRE, "the first five seconds of a new life, they won't hurt you.)"); sprintf(display_countdown, "%d", countdown); al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_24, al_map_rgb(230,230,230), SCREEN_W/2, 300, ALLEGRO_ALIGN_CENTRE, display_countdown); al_flip_display(); sleep(1); countdown--; } al_start_timer(timer); while(!doexit) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_TIMER) { redraw = true; if(ship->timer > 0) ship->timer--; } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { break; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_K: case ALLEGRO_KEY_UP: key[KEY_UP] = true; move_ship(ship, KEY_UP); break; case ALLEGRO_KEY_J: case ALLEGRO_KEY_DOWN: key[KEY_DOWN] = true; move_ship(ship, KEY_DOWN); break; case ALLEGRO_KEY_H: case ALLEGRO_KEY_LEFT: key[KEY_LEFT] = true; move_ship(ship, KEY_LEFT); break; case ALLEGRO_KEY_L: case ALLEGRO_KEY_RIGHT: key[KEY_RIGHT] = true; move_ship(ship, KEY_RIGHT); break; case ALLEGRO_KEY_SPACE: key[KEY_SPACE] = true; if (ammo>0) { shoot_blast(blasts[ammo], ship); ammo--; } break; case ALLEGRO_KEY_ESCAPE: doexit = true; break; } } if(redraw && al_is_event_queue_empty(event_queue)) { redraw = false; al_clear_to_color(al_map_rgb(0,0,0)); move_ship(ship, NONE); draw_ship(ship); move_blasts(blasts); draw_blasts(blasts); check_collision(last, ship, blasts); move_roids(last); draw_roids(last); if(!ship->lives || !ammo) { /* Game over. */ al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_36, al_map_rgb(200,200,200), SCREEN_W/2, SCREEN_H/2-100, ALLEGRO_ALIGN_CENTRE, "GAME OVER"); doexit = "true"; } if(!ROIDS_ALIVE) { /* You Won. */ al_identity_transform(&transform); al_use_transform(&transform); al_draw_text(font_arial_36, al_map_rgb(200,200,200), SCREEN_W/2, SCREEN_H/2-100, ALLEGRO_ALIGN_CENTRE, "YOU WON"); doexit = "true"; } /* Score */ al_identity_transform(&transform); al_use_transform(&transform); sprintf(display_score, "%d", score); al_draw_text(font_arial_24, al_map_rgb(200,200,200), 50, 10, ALLEGRO_ALIGN_CENTRE, display_score); /* Lives */ sprintf(display_lives, "%d", ship->lives); al_draw_text(font_arial_24, al_map_rgb(200,200,200), SCREEN_W-50, 10, ALLEGRO_ALIGN_CENTRE, display_lives); /* Ammo */ al_identity_transform(&transform); al_use_transform(&transform); sprintf(display_ammo, "%d", ammo); al_draw_text(font_arial_24, al_map_rgb(200,200,200), 50, SCREEN_H-50, ALLEGRO_ALIGN_CENTRE, display_ammo); al_flip_display(); if (doexit) sleep(3); } } destroy_ship(ship); destroy_roids(last); destroy_blasts(blasts); /* End game. */ al_shutdown_primitives_addon(); al_destroy_timer(timer); al_destroy_display(display); al_destroy_event_queue(event_queue); return 0; }