Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <allegro.h>
- #include "structs.h"
- #define largura_da_tela 800
- volatile int exit_program = FALSE; //sair do jogo, deixar numa forma global
- void fecha_programa()
- {
- exit_program = TRUE;
- }
- END_OF_FUNCTION(fecha_programa);
- volatile int ticks = 0;
- void ticker()
- {
- ticks++;
- }
- END_OF_FUNCTION(ticker)
- const int updates_per_second = 60; // Quantas vezes por segundo a tela será atualizada
- int main()
- {
- //INSTALAR FUNÇÕES BÁSICAS DO ALLEGRO
- allegro_init(); // 1ª função que vou chamar e vai iniciar algumas coisas básicas da biblioteca
- install_timer(); // timer para tocar áudio e outros sons, tb para funcionar o mouse
- //configura o timer, PREPARANDO O TERRENO DO TIMER
- LOCK_VARIABLE(ticks);
- LOCK_FUNCTION(ticker); // eu não quero mexer com a função ticker, vou deixar o allegro mexer com ela
- //Criar o timer de verdade
- install_int_ex(ticker, BPS_TO_TIMER(updates_per_second));
- install_keyboard(); // para usar o teclado
- set_color_depth(32); //setar a profundidade das cores (32 bits)
- set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600, 0, 0 );
- /*setar video AUTODETECT roda na maioria dos computadores- 1º parametro é o driver de video, 2 e 3º resolução da tela x, y
- ultimos parametros tela virtual 0, 0 não vai ser utilizado*/
- set_window_title("Game_Freeway"); // o nome que vc quer que apareça na janela - *main.c
- set_alpha_blender();
- LOCK_VARIABLE(exit_program);
- LOCK_FUNCTION(fecha_programa);
- set_close_button_callback(fecha_programa);
- //O JOGO É QUASE UM LOOPING INFINITO, SÓ ACABA QUANDO O USUÁRIO SAI/exit (esc) - CRIAR um WHILE (um laço)
- /*Ao invés de desenhar direto na tela, eu vou criar um tela auxiliar (buffer) p/ não piscar, desenhar tudo na tela aux,
- depois desenho o buffer na screen, depois eu limpo o buffer ao invés de limpar a tela */
- /// BITMAPS
- BITMAP* buffer = create_bitmap(SCREEN_W, SCREEN_H); //recebe como parametro a altura e a largura da tela
- // create_bitmap recebe este espaço scree_w e h ALOCADO DINAMICAMENTE
- BITMAP* estrada = load_bitmap("pista.bmp", NULL);
- BITMAP* carroamarelo = load_bitmap("acarroamarelo.bmp", NULL);
- BITMAP* carroazul = load_bitmap("acarroazul.bmp", NULL);
- BITMAP* carroazulclaro = load_bitmap("acarroazulclaro.bmp", NULL);
- BITMAP* carrobranco = load_bitmap("acarrobranco.bmp", NULL);
- BITMAP* carroroxo = load_bitmap("acarroroxo.bmp", NULL);
- BITMAP* carroverde = load_bitmap("acarroverde.bmp", NULL);
- BITMAP* carrovermelho = load_bitmap("acarrovermelho.bmp",NULL);
- BITMAP* einstein = load_tga("einstein.tga", NULL);
- /// POSIÇÃO DOS CARRINHOS (DEPOIS TENHO CRIAR UMA STRUCT PRA CADA CARRINHO)
- carrinho carrinhoamarelo;
- carrinhoamarelo.pos_x=-80;
- carrinhoamarelo.pos_y=118;
- carrinho carrinhoazul;
- carrinhoazul.pos_x = -80;
- carrinhoazul.pos_y = 167;
- carrinho carrinhoazulclaro;
- carrinhoazulclaro.pos_x = -80;
- carrinhoazulclaro.pos_y = 219;
- carrinho carrinhobranco;
- carrinhobranco.pos_x = -80;
- carrinhobranco.pos_y = 267;
- carrinho carrinhoroxo;
- carrinhoroxo.pos_x = -80;
- carrinhoroxo.pos_y = 319;
- carrinho carrinhoverde;
- carrinhoverde.pos_x = -80;
- carrinhoverde.pos_y = 370;
- carrinho carrinhovermelho;
- carrinhovermelho.pos_x = -80;
- carrinhovermelho.pos_y =418;
- while(!exit_program)
- {
- //PARA O TIMER COMEÇAR A FUNCIONAR
- while(ticks == 0)
- {
- rest(1); // esperar uma unidade de tempo do meu processador
- }
- ///LOGIC
- while(ticks >0)
- {
- int old_ticks = ticks;
- ///INPUT /*onde vc detecta a entrada do teclado do mouse ou demais entradas do usuário */
- if (key[KEY_ESC])
- exit_program = TRUE;
- ///UPDATE - onde vc vai atualizar o status do jogo, vai usar diversas variáveis (LÓGICA DO JOGO)
- carrinhoamarelo.pos_x += 2.3;
- carrinhoazul.pos_x += 3.5;
- carrinhoazulclaro.pos_x += 4;
- carrinhobranco.pos_x += 4.5;
- carrinhoroxo.pos_x += 2.1;
- carrinhoverde.pos_x += 3;
- carrinhovermelho.pos_x += 2.5;
- //Se o carrinho saiu da tela, volta pra posição inicial
- if(carrinhoamarelo.pos_x>largura_da_tela)
- {
- carrinhoamarelo.pos_x = -80;
- }
- if(carrinhoazul.pos_x > largura_da_tela)
- {
- carrinhoazul.pos_x = -80;
- }
- if(carrinhoazulclaro.pos_x > largura_da_tela)
- {
- carrinhoazulclaro.pos_x = -80;
- }
- if(carrinhobranco.pos_x > largura_da_tela)
- {
- carrinhobranco.pos_x = -80;
- }
- if(carrinhoroxo.pos_x > largura_da_tela)
- {
- carrinhoroxo.pos_x = -80;
- }
- if(carrinhoverde.pos_x > largura_da_tela)
- {
- carrinhoverde.pos_x = -80;
- }
- if(carrinhovermelho.pos_x > largura_da_tela)
- {
- carrinhovermelho.pos_x = -80;
- }
- ticks--;
- if(old_ticks <= ticks) // a logica demorou muito, aborta e desenha a tela
- break;
- }
- ///DRAW - parte do desenho, onde vamos desenhar na tela - o allegro tem ponteiro pra bitmap (que é o screen)
- // tudo que vc desenha no screen aparece na tela
- /*circlefill(buffer, pos_x, 110, 57, makecol(0,255,0));
- draw_sprite(screen, buffer, 0, 0); //desenhar na tela(sprit_in), desenhar o buffer na screen, e na posição que eu quero desenhar, buffer e screen mesmo tamanho, então posição inicial 0,0)
- clear(buffer); */
- draw_sprite(buffer, estrada, 0,0);
- draw_sprite(buffer, carroamarelo,carrinhoamarelo.pos_x, carrinhoamarelo.pos_y);
- draw_sprite(buffer, carroazul,carrinhoazul.pos_x, carrinhoazul.pos_y);
- draw_sprite(buffer, carroazulclaro,carrinhoazulclaro.pos_x, carrinhoazulclaro.pos_y);
- draw_sprite(buffer, carrobranco, carrinhobranco.pos_x, carrinhobranco.pos_y);
- draw_sprite(buffer, carroroxo,carrinhoroxo.pos_x,carrinhoroxo.pos_y);
- draw_sprite(buffer, carroverde,carrinhoverde.pos_x,carrinhoverde.pos_y);
- draw_sprite(buffer, carrovermelho, carrinhovermelho.pos_x, carrinhovermelho.pos_y);
- draw_trans_sprite(buffer, einstein, 368, 522);
- draw_sprite(screen,buffer,0,0);
- }
- ///FINALIZAÇÃO
- destroy_bitmap(buffer); //como parametro coloco o ponteiro do bitmap que eu quero destruir
- destroy_bitmap(estrada);
- destroy_bitmap(carroamarelo);
- destroy_bitmap(carroazul);
- destroy_bitmap(carroazulclaro);
- destroy_bitmap(carrobranco);
- destroy_bitmap(carroroxo);
- destroy_bitmap(carroverde);
- destroy_bitmap(carrovermelho);
- destroy_bitmap(einstein);
- allegro_exit();
- return 0;
- }
- END_OF_MAIN();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement