Ir ao conteúdo
  • Cadastre-se

joao victor caixeta costa

Membro Júnior
  • Posts

    3
  • Cadastrado em

  • Última visita

Reputação

2
  1. @Flávio Pedroza muito obrigado, ajudou bastante nesse problema
  2. estou fazendo um jogo do tipo pong em linguagem C utilizandoa biblioteca allegro 5, e não consigo encontrar uma forma dos personagens não ultrapassarem as paredes da tela, quando se pressiona a tecla para cima, o personagem continua subindo mesmo que acabe a tela como se ainda estivesse espaço, gostaria de travar ele para se movimentar somente dentro do campo visivel do jogo na direção para cima e para baixo. /* Copyright (C) 2016 Marcelo Serrano Zanetti - All Rights Reserved and Pedro Milano 2021 * Licensed under the GNU GPL V3.0 license. All conditions apply. * Powered by Allegro: http://liballeg.org/license.html */ #include <stdio.h> #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_acodec.h> #include <allegro5/allegro_audio.h> const float FPS = 60; const int SCREEN_W = 1024; const int SCREEN_H = 546; const int BOLA_TAMANHO = 32; const int REBATEDOR_LARGURA = 32; const int REBATEDOR_ALTURA = 32; int main(int argc, char **argv) { ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_BITMAP *treinador = NULL; ALLEGRO_BITMAP *pokemon = NULL; ALLEGRO_BITMAP *bola = NULL; ALLEGRO_BITMAP *background = NULL; ALLEGRO_SAMPLE *sample=NULL; ALLEGRO_SAMPLE *sample1=NULL; ALLEGRO_SAMPLE *sample2=NULL; ALLEGRO_SAMPLE *sample3=NULL; ALLEGRO_SAMPLE *sample4=NULL; bool redraw = true; bool doexit = false; if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\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; } if(!al_install_audio()) { fprintf(stderr, "failed to initialize audio!\n"); return -1; } else if (!al_reserve_samples(5)) { fprintf(stderr, "Falha ao reservar samples!\n"); return -1; } if(!al_init_acodec_addon()) { fprintf(stderr, "failed to initialize audio codecs!\n"); return -1; } if (!al_reserve_samples(1)) { fprintf(stderr, "failed to reserve samples!\n"); return -1; } sample = al_load_sample("audio/som.wav"); if (!sample) { fprintf(stderr, "Falha ao carregar sample.\n"); al_destroy_display(display); return false; } sample1 = al_load_sample("audio/intro.wav"); if (!sample1) { fprintf(stderr, "Falha ao carregar sample1.\n"); al_destroy_display(display); return false; } sample2 = al_load_sample("audio/treinador.wav"); if (!sample2) { fprintf(stderr, "Falha ao carregar sample2.\n"); al_destroy_display(display); return false; } sample3 = al_load_sample("audio/pokemon.wav"); if (!sample3) { fprintf(stderr, "Falha ao carregar sample3.\n"); al_destroy_display(display); return false; } sample4 = al_load_sample("audio/hit.wav"); if (!sample4) { fprintf(stderr, "Falha ao carregar sample4.\n"); al_destroy_display(display); return false; } al_set_new_display_flags(ALLEGRO_OPENGL | ALLEGRO_WINDOWED); display = al_create_display(SCREEN_W, SCREEN_H); if(!display) { fprintf(stderr, "failed to create display!\n"); al_destroy_timer(timer); return -1; } al_init_image_addon(); if(!al_init_image_addon()) { fprintf(stderr, "failed to initialize the image addon!\n"); return -1; } background = al_load_bitmap("imagens/fundo.png"); if(!background) { fprintf(stderr, "falhou ao criar o background bitmap!\n"); al_destroy_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_display(display); al_destroy_timer(timer); return -1; al_set_target_bitmap(al_get_backbuffer(display)); } treinador = al_load_bitmap("imagens/treinador.png"); if(!treinador) { fprintf(stderr, "failed to create treinador bitmap!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } pokemon = al_load_bitmap("imagens/pokemon.png"); if(!pokemon) { fprintf(stderr, "failed to create pokemon bitmap!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } float bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0; float bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0; float bola_vx = -4; float bola_vy = -4; float treinador_pos_x = 0; float treinador_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0; float treinador_vy = 0; float pokemon_pos_x = SCREEN_W - REBATEDOR_LARGURA; float pokemon_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0; float pokemon_vy = 0; int click=0; int savebvx; int savebvy; bola = al_load_bitmap("imagens/bola1.png"); if(!bola) { fprintf(stderr, "falhou ao criar a bola bitmap!\n"); al_destroy_display(display); 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_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_display(display); al_destroy_timer(timer); al_destroy_bitmap(background); return -1; } al_set_window_title(display, "PongMon - Pokémon Pong Version"); al_set_target_bitmap(al_get_backbuffer(display)); al_play_sample(sample1, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); menu(); 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,0,0)); al_flip_display(); al_start_timer(timer); while(1) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); if(ev.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) { switch(ev.mouse.button) { case 1: printf("x:%d y:%d\n",ev.mouse.x, ev.mouse.y); if(click==0) { savebvx=bola_vx; savebvy=bola_vy; bola_vx=0; bola_vy=0; click=1; } else { bola_vx=savebvx; bola_vy=savebvy; click=0; } break; } } else if(ev.type == ALLEGRO_EVENT_TIMER) { if(bola_pos_y < 0 || bola_pos_y > SCREEN_H - BOLA_TAMANHO) { bola_vy = -bola_vy; //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // hitparede } if(bola_pos_x < 0 || bola_pos_x > SCREEN_W - BOLA_TAMANHO) { bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0; bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0; bola_vx = -4, bola_vy = -4; //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // ponto } if(bola_pos_x <= treinador_pos_x + REBATEDOR_LARGURA) if(bola_pos_y+BOLA_TAMANHO>=treinador_pos_y) if(bola_pos_y-BOLA_TAMANHO<=treinador_pos_y+REBATEDOR_ALTURA) bola_vx = -bola_vx; if(bola_pos_x + BOLA_TAMANHO >= pokemon_pos_x ) if(bola_pos_y+BOLA_TAMANHO>=pokemon_pos_y) if(bola_pos_y-BOLA_TAMANHO<=pokemon_pos_y+REBATEDOR_ALTURA) bola_vx = -bola_vx; bola_pos_x += bola_vx; bola_pos_y += bola_vy; treinador_pos_y += treinador_vy; pokemon_pos_y += pokemon_vy; redraw = true; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: pokemon=al_load_bitmap("imagens/pu1.png"); pokemon_vy=-4; break; case ALLEGRO_KEY_DOWN: pokemon=al_load_bitmap("imagens/pd1.png"); pokemon_vy=4; break; case ALLEGRO_KEY_W: treinador=al_load_bitmap("imagens/u1.png"); treinador_vy=-4; break; case ALLEGRO_KEY_S: treinador=al_load_bitmap("imagens/d1.png"); treinador_vy=4; break; case ALLEGRO_KEY_ESCAPE: return 0; break; } } else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: pokemon=al_load_bitmap("imagens/pl1.png"); case ALLEGRO_KEY_DOWN: pokemon=al_load_bitmap("imagens/pl1.png"); pokemon_vy=0; break; case ALLEGRO_KEY_W: treinador=al_load_bitmap("imagens/r1.png"); case ALLEGRO_KEY_S: treinador=al_load_bitmap("imagens/r1.png"); treinador_vy=0; break; } } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { break; } if(redraw && al_is_event_queue_empty(event_queue)) { redraw = false; al_clear_to_color(al_map_rgb(0,100,0)); al_draw_bitmap(background, 0, 0, 0); al_draw_bitmap(treinador,treinador_pos_x, treinador_pos_y, 0); al_draw_bitmap(pokemon,pokemon_pos_x, pokemon_pos_y, 0); al_draw_bitmap(bola, bola_pos_x, bola_pos_y, 0); al_flip_display(); } } al_destroy_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_timer(timer); al_destroy_display(display); al_destroy_event_queue(event_queue); al_destroy_sample(sample); al_destroy_sample(sample1); al_destroy_sample(sample2); al_destroy_sample(sample3); al_destroy_sample(sample4); return 0; } void menu() { ALLEGRO_BITMAP *menu=NULL; menu= al_load_bitmap("imagens/intro.png"); if(!menu) { fprintf(stderr, "Falha ao carregar bitmap menu!\n"); return -1; } al_draw_bitmap(menu, 0, 0, 0); al_flip_display(); al_rest(8); }
  3. estou fazendo um trabalho para a faculdade e preciso fazer um jogo em linguagem C utilizando a biblioteca Alegro, o jogo ja esta basicamente pronto, fiz em formato jogo pong padrão, mas gostaria de adicionar um contador de pontos, um placar ao jogo mesmo, mas não exatamente como implementar isso na tela do jogo, se alguém souber como fazer seria de grande ajuda, obrigado. segue o código até agora do jogo #include <stdio.h> #include <allegro5/allegro.h> #include <allegro5/allegro_image.h> #include <allegro5/allegro_acodec.h> #include <allegro5/allegro_audio.h> const float FPS = 60; const int SCREEN_W = 1024; const int SCREEN_H = 546; const int BOLA_TAMANHO = 32; const int REBATEDOR_LARGURA = 32; const int REBATEDOR_ALTURA = 32; int main(int argc, char **argv) { ALLEGRO_DISPLAY *display = NULL; ALLEGRO_EVENT_QUEUE *event_queue = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_BITMAP *treinador = NULL; ALLEGRO_BITMAP *pokemon = NULL; ALLEGRO_BITMAP *bola = NULL; ALLEGRO_BITMAP *background = NULL; ALLEGRO_SAMPLE *sample=NULL; ALLEGRO_SAMPLE *sample1=NULL; ALLEGRO_SAMPLE *sample2=NULL; ALLEGRO_SAMPLE *sample3=NULL; ALLEGRO_SAMPLE *sample4=NULL; bool redraw = true; bool doexit = false; if(!al_init()) { fprintf(stderr, "failed to initialize allegro!\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; } if(!al_install_audio()) { fprintf(stderr, "failed to initialize audio!\n"); return -1; } else if (!al_reserve_samples(5)) { fprintf(stderr, "Falha ao reservar samples!\n"); return -1; } if(!al_init_acodec_addon()) { fprintf(stderr, "failed to initialize audio codecs!\n"); return -1; } if (!al_reserve_samples(1)) { fprintf(stderr, "failed to reserve samples!\n"); return -1; } sample = al_load_sample("audio/som.wav"); if (!sample) { fprintf(stderr, "Falha ao carregar sample.\n"); al_destroy_display(display); return false; } sample1 = al_load_sample("audio/intro.wav"); if (!sample1) { fprintf(stderr, "Falha ao carregar sample1.\n"); al_destroy_display(display); return false; } sample2 = al_load_sample("audio/treinador.wav"); if (!sample2) { fprintf(stderr, "Falha ao carregar sample2.\n"); al_destroy_display(display); return false; } sample3 = al_load_sample("audio/pokemon.wav"); if (!sample3) { fprintf(stderr, "Falha ao carregar sample3.\n"); al_destroy_display(display); return false; } sample4 = al_load_sample("audio/hit.wav"); if (!sample4) { fprintf(stderr, "Falha ao carregar sample4.\n"); al_destroy_display(display); return false; } al_set_new_display_flags(ALLEGRO_OPENGL | ALLEGRO_WINDOWED); display = al_create_display(SCREEN_W, SCREEN_H); if(!display) { fprintf(stderr, "failed to create display!\n"); al_destroy_timer(timer); return -1; } al_init_image_addon(); if(!al_init_image_addon()) { fprintf(stderr, "failed to initialize the image addon!\n"); return -1; } background = al_load_bitmap("imagens/fundo.png"); if(!background) { fprintf(stderr, "falhou ao criar o background bitmap!\n"); al_destroy_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_display(display); al_destroy_timer(timer); return -1; al_set_target_bitmap(al_get_backbuffer(display)); } treinador = al_load_bitmap("imagens/treinador.png"); if(!treinador) { fprintf(stderr, "failed to create treinador bitmap!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } pokemon = al_load_bitmap("imagens/pokemon.png"); if(!pokemon) { fprintf(stderr, "failed to create pokemon bitmap!\n"); al_destroy_display(display); al_destroy_timer(timer); return -1; } float bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0; float bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0; float bola_vx = -4; float bola_vy = -4; float treinador_pos_x = 0; float treinador_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0; float treinador_vy = 0; float pokemon_pos_x = SCREEN_W - REBATEDOR_LARGURA; float pokemon_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0; float pokemon_vy = 0; int click=0; int savebvx; int savebvy; bola = al_load_bitmap("imagens/bola1.png"); if(!bola) { fprintf(stderr, "falhou ao criar a bola bitmap!\n"); al_destroy_display(display); 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_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_display(display); al_destroy_timer(timer); al_destroy_bitmap(background); return -1; } al_set_window_title(display, "PongMon - Pokémon Pong Version"); al_set_target_bitmap(al_get_backbuffer(display)); al_play_sample(sample1, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); menu(); 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,0,0)); al_flip_display(); al_start_timer(timer); while(1) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); if(ev.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) { switch(ev.mouse.button) { case 1: printf("x:%d y:%d\n",ev.mouse.x, ev.mouse.y); if(click==0) { savebvx=bola_vx; savebvy=bola_vy; bola_vx=0; bola_vy=0; click=1; } else { bola_vx=savebvx; bola_vy=savebvy; click=0; } break; } } else if(ev.type == ALLEGRO_EVENT_TIMER) { if(bola_pos_y < 0 || bola_pos_y > SCREEN_H - BOLA_TAMANHO) { bola_vy = -bola_vy; //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // hitparede } if(bola_pos_x < 0 || bola_pos_x > SCREEN_W - BOLA_TAMANHO) { bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0; bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0; bola_vx = -4, bola_vy = -4; //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // ponto } if(bola_pos_x <= treinador_pos_x + REBATEDOR_LARGURA) if(bola_pos_y+BOLA_TAMANHO>=treinador_pos_y) if(bola_pos_y-BOLA_TAMANHO<=treinador_pos_y+REBATEDOR_ALTURA) bola_vx = -bola_vx; if(bola_pos_x + BOLA_TAMANHO >= pokemon_pos_x ) if(bola_pos_y+BOLA_TAMANHO>=pokemon_pos_y) if(bola_pos_y-BOLA_TAMANHO<=pokemon_pos_y+REBATEDOR_ALTURA) bola_vx = -bola_vx; bola_pos_x += bola_vx; bola_pos_y += bola_vy; treinador_pos_y += treinador_vy; pokemon_pos_y += pokemon_vy; redraw = true; } else if(ev.type == ALLEGRO_EVENT_KEY_DOWN) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: pokemon=al_load_bitmap("imagens/pu1.png"); pokemon_vy=-4; break; case ALLEGRO_KEY_DOWN: pokemon=al_load_bitmap("imagens/pd1.png"); pokemon_vy=4; break; case ALLEGRO_KEY_W: treinador=al_load_bitmap("imagens/u1.png"); treinador_vy=-4; break; case ALLEGRO_KEY_S: treinador=al_load_bitmap("imagens/d1.png"); treinador_vy=4; break; case ALLEGRO_KEY_ESCAPE: return 0; break; } } else if(ev.type == ALLEGRO_EVENT_KEY_UP) { switch(ev.keyboard.keycode) { case ALLEGRO_KEY_UP: pokemon=al_load_bitmap("imagens/pl1.png"); case ALLEGRO_KEY_DOWN: pokemon=al_load_bitmap("imagens/pl1.png"); pokemon_vy=0; break; case ALLEGRO_KEY_W: treinador=al_load_bitmap("imagens/r1.png"); case ALLEGRO_KEY_S: treinador=al_load_bitmap("imagens/r1.png"); treinador_vy=0; break; } } else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) { break; } if(redraw && al_is_event_queue_empty(event_queue)) { redraw = false; al_clear_to_color(al_map_rgb(0,100,0)); al_draw_bitmap(background, 0, 0, 0); al_draw_bitmap(treinador,treinador_pos_x, treinador_pos_y, 0); al_draw_bitmap(pokemon,pokemon_pos_x, pokemon_pos_y, 0); al_draw_bitmap(bola, bola_pos_x, bola_pos_y, 0); al_flip_display(); } } al_destroy_bitmap(treinador); al_destroy_bitmap(pokemon); al_destroy_timer(timer); al_destroy_display(display); al_destroy_event_queue(event_queue); al_destroy_sample(sample); al_destroy_sample(sample1); al_destroy_sample(sample2); al_destroy_sample(sample3); al_destroy_sample(sample4); return 0; } void menu() { ALLEGRO_BITMAP *menu=NULL; menu= al_load_bitmap("imagens/intro.png"); if(!menu) { fprintf(stderr, "Falha ao carregar bitmap menu!\n"); return -1; } al_draw_bitmap(menu, 0, 0, 0); al_flip_display(); al_rest(8); }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!