예제 #1
0
/*player_class::player_class(events_class* new_events)
{
    tile=SDL_LoadBMP("red.bmp");
    event1=new_events;
    position.x=0;
    position.y=0;
    velocity.x=0;
    velocity.y=0;
}*/
void player_class::update()
{
    on_screen_check();
    ///does the physics won't be neccassarry until some sort of map is implemented
    update_physics();
    accelerate();
    move();
}
예제 #2
0
파일: Game.cpp 프로젝트: Krozark/SFML-book
    void Game::run(int minimum_frame_per_seconds, int physics_frame_per_seconds)
    {
        sf::Clock clock;
        const sf::Time timePerFrame = sf::seconds(1.f/minimum_frame_per_seconds);
        const sf::Time timePerFramePhysics = sf::seconds(1.f/physics_frame_per_seconds);

        while (_window.isOpen())
        {
            sf::Time time = clock.restart();

            processEvents();

            if(not _stats.isGameOver())
            {
                update_physics(time,timePerFramePhysics);
                update(time,timePerFrame);
            }

            render();
        }
    }
예제 #3
0
int main(int argc, const char **argv){


    struct Personaje prota[MAXIMO];


    while(1){


        for (int i=0; i<MAXIMO; i++)
            update_physics(&prota[i]);
        


    }






	return EXIT_SUCCESS;
}
예제 #4
0
int main(int argc, char **argv){

    struct Movil nave;
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_BITMAP  *sprites   = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    bool key[4] = { false, false, false, false  };
    bool redraw = true;
    bool doexit = false;

    /* Alegro startup */

    if(!al_init()) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize allegro!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    if(!al_init_image_addon()) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    if(!al_install_keyboard()){
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    };

    /* Alegro artifact creation */

    display = al_create_display(SCREEN_W, SCREEN_H);

    if(!display) {
        al_show_native_message_box(display, "Error", "Error", "Failed to initialize display!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        return 0;
    }

    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        al_show_native_message_box(display, "Error", "Error", "failed to create timer!\n",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);
        al_destroy_display(display);
        return -1;
    }
    event_queue = al_create_event_queue();
    if(!event_queue) {
        al_show_native_message_box(display, "Error", "Error", "failed to create event_queue!\n",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    /* stitching */
    sprites = al_load_bitmap("images/xenon2_sprites.png");

    if(!sprites) {
        al_show_native_message_box(display, "Error", "Error", "Failed to load sprites!",
                NULL, ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        al_destroy_event_queue(event_queue);
        return 0;
    }

    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    al_register_event_source(event_queue, al_get_timer_event_source(timer));


    /* Init game objects */
    init(sprites, &nave);

    al_clear_to_color(al_map_rgb(0,0,0));
    al_flip_display();
    al_start_timer(timer);


    /* Game loop */

    while(!doexit){
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);


        if(ev.type == ALLEGRO_EVENT_TIMER)
            redraw = true;
        else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = true;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = true;
                    break;
            }
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_UP] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_DOWN] = false;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

        update_physics(key, &nave);

        if(redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            //al_draw_bitmap(sprites,200,200,0);
            al_draw_bitmap(nave.img, 100, 100, 0);
            al_flip_display();
        }

    }

    /* Housekeeping */

    al_rest(2);

    al_destroy_display(display);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_bitmap(sprites);

    return 0;
}
예제 #5
0
/* returns 1 if apple was hit, otherwise 0 */
int simulate_objects(object *objects, float audio_level)
{
    enum object_ctr i;

    if (objects[APPLE].invincibility_timer != 0)
        objects[APPLE].invincibility_timer--;

    /* handle respawn timing */
    for (i = 0; i < LAST_MOVER; i++) {
        object *o = &objects[i];

        if  (o->respawn_timer != 0)
            o->respawn_timer--;
        else if (o->destroyed && o->respawn_timer == 0) {   /* time to respawn */
            o->respawn_timer = 0;
            o->destroyed = 0;
            if (i == APPLE)
                o->invincibility_timer = APPLE_INVINCIBILITY_TIME;
            reset_object_physics(objects, i);
        }
    }

    for (i = 0; i < LAST_MOVER; i++) {
        object *o = &objects[i];

        if (o->destroyed)
            continue;

        if (i == APPLE)
            o->y_acc = G - MIC_SENSITIVITY*audio_level;

        update_physics(objects, i, MODE_WRT_APPLE);
        /*printf("%f %f\n", o->x_pos, o->y_pos);*/
        if (i == APPLE && o->y_pos < 0) {
            o->y_pos = 0; /* cap the apple to the top of the screen */
            o->y_vel = 0;
        }

        if (i != APPLE &&
                !objects[APPLE].destroyed &&
                objects[APPLE].invincibility_timer == 0 &&
                check_collision(o, &objects[APPLE]) == 1) {
            objects[APPLE].destroyed = 1;
            load_respawn(&objects[APPLE], APPLE, 1.0);
            load_respawn(o, i, 20/(objects[APPLE].x_vel));
        }

        if ( (check_if_offscreen(o) == 1 ||
              check_ground_collision(o, &objects[GROUND]) == 1)
                && !o->destroyed ) {
            o->destroyed = 1;
            if (i != APPLE) {
                /* third arg is multiplier on respawn time -
                   decrease spawn interval as goes faster */
                load_respawn(o, i, 20/(objects[APPLE].x_vel));
            } else
                load_respawn(o, i, 1.0);
        }
    }
    
    /* apple has just been destroyed */
    if (objects[APPLE].respawn_timer == APPLE_RESPAWN_INTERVAL) {
        /* don't reset velocity */
        objects[APPLE].reset_x_vel = objects[APPLE].x_vel;
        return 1;
    } else
        return 0;
}
예제 #6
0
int main(int argc, char **argv){

    /*declaramos nave como una estructura tipo móvil, q está definida
     * en el archivo "physics.h"*/
    struct Movil nave;


    /*creamos las variables de allegro, que son punteros
     * apuntando a NULL, de momento*/
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_BITMAP *sprites = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;

    bool key[4] = {false, false, false,false};//Array para las teclas, todos a false 
    bool redraw = true;
    bool do_exit = false;

    /* Inicializamos allegro */
    if(!al_init()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize allegro!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }

    /* Inicializamos añadido de imágenes */
    if(!al_init_image_addon()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize al_init_image_addon!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }

ni    /* Inicializamos el teclado */
    if(!al_install_keyboard()) {
        al_show_native_message_box (
                display,
                "Error",
                "Error",
                "Failed to initialize al_init_image_addon!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    };

    /* Alegro artifact creation
     * del display, timer, cola eventos y sprites*/

    display = al_create_display(SCREEN_W, SCREEN_H);
    if(!display) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "Failed to initialize display!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        return 0;
    }


    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "failed to create timer!\n",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);

        return 0;
    }


    event_queue = al_create_event_queue();
    if(!event_queue) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "failed to create event_queue!\n",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);

        return 0;
    }


    sprites = al_load_bitmap("images/xenon2_sprites.png");
    al_convert_mask_to_alpha(sprites, al_map_rgb(255,0,255));

    if(!sprites) {
        al_show_native_message_box(
                display,
                "Error",
                "Error",
                "Failed to load sprites!",
                NULL,
                ALLEGRO_MESSAGEBOX_ERROR);

        al_destroy_display(display);
        al_destroy_timer(timer);
        al_destroy_event_queue(event_queue);

        return 0;
    }

    /* registramos todos los eventos provenientes de la pantalla
     * el keyboard y el temporizador*/
    al_register_event_source(event_queue, al_get_display_event_source(display));
    al_register_event_source(event_queue, al_get_keyboard_event_source());
    al_register_event_source(event_queue, al_get_timer_event_source(timer));


    /* Init es una funcion definida como extern el "physics.h" , que le meto
     * los sprites, que es el bitmap de la nave, y &nave, que es una dirección
     * de memoria donde hemos declarado nave como estructura*/
    init(sprites, &nave);

    al_start_timer(timer);

    while(!doexit){
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);

        if(ev.type == ALLEGRO_EVENT_TIMER)
            redraw = true;
        else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        /* éste bloque funciona con el evento KEY_DOWN, y cuando apretamos
         * cualquier tecla, se registra el avento KEY_DOWN q corresponda */
        else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_THROTTLE] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_BRAKE] = true;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_ROTATE_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_ROTATE_RIGHT] = true;
                    break;
            }
            /* Éste bloque funciona con el evento KEY_UP, cuando soltamos
             *  la tecla se registra el evento KEY_DOWN correspondiente.*/
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    key[KEY_THROTTLE] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    key[KEY_BRAKE] = false;
                    break;

                case ALLEGRO_KEY_LEFT:
                    key[KEY_ROTATE_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    key[KEY_ROTATE_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

        if(redraw && al_is_event_queue_empty(event_queue)) {
            redraw = false;
            update_physics(key, &nave);
            al_clear_to_color(al_map_rgb(0,0,0));

 //         al_draw_bitmap(sprites,200,200,0);
            al_draw_bitmap(nave.img[2 + (int) (nave.v.x / ROLL) ],
                    SCREEN_W / 2 + nave.r.x,
                    SCREEN_H - 50 - nave.r.y,
                    0);
            al_flip_display();
        }
    }

        /* DEstrucción de los artefactos */
    al_destroy_display(display);
    al_destroy_timer(timer);
    al_destroy_event_queue(event_queue);
    al_destroy_bitmap(sprites);


    return 0;
}
예제 #7
0
int main(){

    struct Movil nave;
    ALLEGRO_DISPLAY *display = NULL;
    ALLEGRO_EVENT_QUEUE *event_queue = NULL;
    ALLEGRO_TIMER *timer = NULL;
    ALLEGRO_BITMAP *bouncer = NULL;
    float bouncer_x = SCREEN_W / 2.0 - BOUNCER_SIZE / 2.0;
    float bouncer_y = SCREEN_H / 2.0 - BOUNCER_SIZE / 2.0;
    bool keys[4] = { false, false, false, false };
    bool redraw = true;
    bool doexit = false;

    if(!al_init()){
        fprintf(stderr, "fallo para iniciar allegro\n");
        return -1;
    }

    if(!al_install_keyboard()){
        fprintf(stderr, "Fallo al iniciar el teclado\n");
        return -1;
    }

    timer = al_create_timer(1.0 / FPS);
    if(!timer) {
        fprintf(stderr, "Fallo al iniciar el timer\n");
        return -1;
    }

    display = al_create_display(SCREEN_W, SCREEN_H);
    if(!display) {
        fprintf(stderr, "Fallo al crear el display\n");
        al_destroy_timer(timer);
        return -1;
    }

    bouncer = al_create_bitmap(BOUNCER_SIZE, BOUNCER_SIZE);
    if(!bouncer) {
        fprintf(stderr, "Fallo al crear el bouncer\n");
        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    al_set_target_bitmap(bouncer);

    al_clear_to_color(al_map_rgb(0,0,0));

    al_set_target_bitmap(al_get_backbuffer(display));

    event_queue = al_create_event_queue();
    if(!event_queue) {
        fprintf(stderr, "fallo al crear la cola de eventos\n");
        al_destroy_bitmap(bouncer);
        al_destroy_display(display);
        al_destroy_timer(timer);
        return -1;
    }

    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());

    al_clear_to_color(al_map_rgb(0,120,120));

    al_flip_display();

    al_start_timer(timer);

    while(!doexit){
        ALLEGRO_EVENT ev;
        al_wait_for_event(event_queue, &ev);


        if(ev.type == ALLEGRO_EVENT_TIMER)
            redraw = true;
        else if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
            break;
        else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    keys[KEY_THROTTLE] = true;
                    break;

                case ALLEGRO_KEY_DOWN:
                    keys[KEY_BRAKE] = true;
                    break;

                case ALLEGRO_KEY_LEFT:
                    keys[KEY_ROTATE_LEFT] = true;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    keys[KEY_ROTATE_RIGHT] = true;
                    break;
            }
        } else if (ev.type == ALLEGRO_EVENT_KEY_UP) {
            switch(ev.keyboard.keycode) {
                case ALLEGRO_KEY_UP:
                    keys[KEY_THROTTLE] = false;
                    break;

                case ALLEGRO_KEY_DOWN:
                    keys[KEY_BRAKE] = false;
                    break;

                case ALLEGRO_KEY_LEFT:
                    keys[KEY_ROTATE_LEFT] = false;
                    break;

                case ALLEGRO_KEY_RIGHT:
                    keys[KEY_ROTATE_RIGHT] = false;
                    break;

                case ALLEGRO_KEY_ESCAPE:
                    doexit = true;
                    break;
            }
        }

if(redraw && al_is_event_queue_empty(event_queue)){
    redraw = false;

    update_physics(keys, &nave);

    al_clear_to_color(al_map_rgb(0,120,120));

    al_draw_bitmap(bouncer, bouncer_x, bouncer_y, 0);

    al_flip_display();
}
}

al_destroy_bitmap(bouncer);
al_destroy_timer(timer);
al_destroy_display(display);
al_destroy_event_queue(event_queue);
return EXIT_SUCCESS;
}