Ir ao conteúdo
  • Cadastre-se

C Criação de Mapa com Allegro


erique

Posts recomendados

4 minutos atrás, vangodp disse:

@erique Aqui tem um exemplo de menu em allegro de davidcoptero:

http://devcpp-allegro.blogspot.com.es/2012/02/como-creo-un-menu-en-c.html#more

 

Acho que vou fazer o seguinte, vou dividir esse menu abaixo, em várias funções, 1 para cada opção do menu, e vou posicionar 1 em cada posição do mapa em forma sequencial, assim eu posso manipular, uma imagem fixa para o menu, e vai me atender, pelo menos na teoria

 

Uma dúvida, tem como importar imagem em gif?, para ser o fundo da tela no caso, penso em fazer algo animado, caso tenha como fazer.

 

Se sim, a importação seria da mesma forma de um .bmp, só que com a extensão normal do .gif?, tranks pelo help

 

#include <stdio.h> // Biblioteca de entrada e saída de dados
#include <stdlib.h> // Biblioteca de conversão das strings
#include <conio.h> // Biblioteca de manipulação de caracteres
#include <locale.h> // Biblioteca de acentuação de caracteres
#include <allegro.h> // Biblioteca gráfica
#include <winalleg.h> // Inclui <windows.h>, dependente do allegro
#define LINHAS 25 // Define a quantidade de linhas da matriz
#define COLUNAS 25 // Define a quantidade de colunas da matriz
#define TAMANHO 25 // Define o tamanho do "quadradro" da imagem importada
BITMAP *criacaodomapa;
BITMAP *muro;
BITMAP *trilha;

char matriz[LINHAS][COLUNAS] = {
"MMMMMMMMMMMMMMMMMMMMMMMM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTMMMMMMMMMMMMTTMMMMMMMM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTMMMMMMMMMMMMMTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTMMMMMMMMMMMMMMMTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MMMMMMMMTTTTTTTMMMMMMMMM",
};

void desenha_o_mapa() /* Criando o mapa */
{
    int i, j;
    for (i=0;i<LINHAS;i++) {
        for (j=0;j<COLUNAS;j++) {
            if(matriz[i][j]=='T') {
                draw_sprite(criacaodomapa, trilha, j*TAMANHO, i*TAMANHO);
                }
            else if (matriz[i][j]=='M') {
                draw_sprite(criacaodomapa, muro, j*TAMANHO, i*TAMANHO);
                }
        }
    }
}

void tela() { /* Criando da proporção do mapa em tela*/
    // clear_to_color(nomedomapa, makecol(0, 0, 0)); // Limpar mapa em caso de substiição
    blit(criacaodomapa, screen, 0, 0, 0, 0, 900, 750);
}

void jogar()
{
    desenha_o_mapa(); // Desenhar o mapa na tela
    tela(); // Atualização da tela
}

void rankings()
{
    allegro_message("Rankings");
}

void creditos()
{
    allegro_message("Creditos");
}

void sair()
{
    allegro_message("sair");
}

MENU opcao[] =
{
    { "JOGAR", jogar, NULL, 0, NULL },
    { "RANKINGS", rankings, NULL, 0, NULL },
    { "CREDITOS", creditos, NULL, 0, NULL },
    { "SAIR", sair, NULL, 0, NULL }
    };

int main()
{
    allegro_init(); // Inicialização do allegro
    install_keyboard(); // Instalação da função para usar o teclado
    install_mouse(); // Instalação da função para usar o mouse
    set_color_depth(32); // Tipo de cor (16) ou (32) bits
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 900, 750, 0, 0); // Auto decteta o tamanho da tela e o ajusta
    set_window_title("Maze Escape"); // Define o titulo da janela

    criacaodomapa = create_bitmap(900, 750); // Criando o mapa
    muro = load_bitmap("muro.bmp", NULL); // Importação da imagem do Muro
    trilha = load_bitmap("trilha.bmp", NULL); // // Importação da imagem da Trilha

        show_mouse(screen);
        do_menu(opcao, 375, 375);

    while(!key[KEY_ESC]) {} // Precionar ESQ para fechar
    // Destruição do mapa
    destroy_bitmap(criacaodomapa);
    destroy_bitmap(trilha);
    destroy_bitmap(muro);
    return 0;
}
END_OF_MAIN()

Outra dúvida, no meu mapa atual, com o código a cima, quando compila, e entra na opção jogar, ele quebra o mapa, com o anterior, eu tenho que limpar o mapa anterior?, destruir por exemplo, para conseguir printar o próximo mapa na tela?

 

_N2FHre8TtK-qrca-ZojWA.png

 

Teste forum.zip

Link para o comentário
Compartilhar em outros sites

Estou com um probleminha pra importar novas imagens, para o mapa.

 

Quando eu converto de .jpg para .bmp em 32x32 pixels, substituo as mesmas imagens, ele até roda, mas quando abre a parte do jogar, ele trava.

 

Tem alguma coisa errada? 

 

Teste forum.zip < Imagens antigas, funcionando perfeitamente

Imagens puras e já convertidas em anexo

 

Obs: Converti por esse site, e mandei já colocar em 32x32

https://image.online-convert.com/convert-to-bmp

grama.bmp

tijolo.bmp

2fa536ba-7cc5-48d5-849f-930deddc134a.jpg

25bdb0ab-cd4d-4bb3-a5dc-0f33b676834e.jpg

Link para o comentário
Compartilhar em outros sites

@Benjamin Breeg Você conseguiu compilar esse exgui.c?, porque eu não consigo de forma alguma, gostaria de analisar o código, e ver ele na prática pra ter umas ideias pra personalizar.

 

Se conseguir, pode me mandar a sua pasta?, e qual programa usa, assim eu consigo compilar

adicionado 1 minuto depois
1 hora atrás, erique disse:

Estou com um probleminha pra importar novas imagens, para o mapa.

 

Quando eu converto de .jpg para .bmp em 32x32 pixels, substituo as mesmas imagens, ele até roda, mas quando abre a parte do jogar, ele trava.

 

Tem alguma coisa errada? 

 

Teste forum.zip < Imagens antigas, funcionando perfeitamente

Imagens puras e já convertidas em anexo

 

Obs: Converti por esse site, e mandei já colocar em 32x32

https://image.online-convert.com/convert-to-bmp

grama.bmp

tijolo.bmp

2fa536ba-7cc5-48d5-849f-930deddc134a.jpg

25bdb0ab-cd4d-4bb3-a5dc-0f33b676834e.jpg

 

Consegui resolver, usei o photoshop para converter, assim deu certo :)

 

Link para o comentário
Compartilhar em outros sites

Eu não tenho certeza mas o draw_sprite só consegue manipular bmp de no máximo 256 cores, por isso o problema, testei alguns que tinha aqui nessa configuração e todos funcionaram, os que voce converteu ultrapassam esse limite por isso o executável falha.

 

Cara aqui eu uso CodeBlocks 16:01 e MinGW 4.70.. os exemplos compilaram perfeitamente, um ou outro não executaram mas acho que é porque foram feitos para compiladores de 16 bits.

 

Quanto a personalizar aquele menu, é possível sim mas ai precisa estudar as funções de gui do Allegro, esse que o vangodp postou esta excelente, o cara fez varios exemplos de menu com fundo, animação etc etc. Eu também comecei a estudar Allegro a pouco tempo.

 

Baixa o arquivo, veja se consegue rodar.

gui.zip

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Um menu interessante e bem usado, seria com botões(imagem)/texto e identificar quando o usuário clica na área de cada objeto, assim é possível determinar qual ação será feita a partir do evento executado pelo usuário, assim é possível usar try catch e throw. A questão de imagens, texto, etc., no meu variam muito com a história do jogo, tenha em mente qual seu usuário alvo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Ainda não consegui decifrar, porque o "menu" na sua localização antiga, apaga parte do meu mapa.

 

Olha como fica

 

IpilFWUbQ5KXCYqUzzyWww.png

 

Código: 

//#include <stdio.h> // Biblioteca de entrada e saída de dados
//#include <stdlib.h> // Biblioteca de conversão das strings
//#include <conio.h> // Biblioteca de manipulação de caracteres
#include <allegro.h> // Biblioteca gráfica
#include <winalleg.h> // Inclui <windows.h>, dependente do allegro
#define LINHAS 25 // Define a quantidade de linhas da matriz
#define COLUNAS 25 // Define a quantidade de colunas da matriz
#define TAMANHO 18 // Define o tamanho do "quadradro" da imagem importada
BITMAP *criacaodomapa;
BITMAP *muro;
BITMAP *trilha;

char matriz[LINHAS][COLUNAS] = {
"MMMMMMMMMMMMMMMMMMMMMMMM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTMMMMMMMMMMMMTTMMMMMMMM",
"MTTTTTTTTTTTTMTTTTTTTTTM",
"MTTTTTTTTTTMTTTMTTTTTTTM",
"MTTTTTTTTTTMTTMTTTTTTTTM",
"MTTTTTTTTTMTTMTTTTTTTTTM",
"MTTTTTTTTTTTMTTTTTTTTTTM",
"MTTTMMTTMMMMMTTTTTTTTTTM",
"MTTTTTTTTTTTTMMMMMTTTTTM",
"MTTTTTTTTTTTTTTTTMTTTTTM",
"MTTTTTTTTTTTTTTTTMMTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTTTTTTM",
"MTTTTTTTTTTTTTTTTTMTTTTM",
"MMMMMTTMMTMMMMMMMMMMMMTM",
"MTTMTTTTMTMTTTTTTTTTTTTM",
"MTTMTTTTMTMTTTMMMTMMTTMM",
"MTMMTTTTMTMTTTMTTMTTTTTM",
"MTTTTMTTMTMTTTMTTTTTTTTM",
"MTTTTTTTMTMTTTMTTTTTTTTM",
"MMMMMMMMTTTTTTTMMMMMMMMM",
};

void desenha_o_mapa() /* Criando o mapa */
{
    int i, j;
    for (i=0;i<LINHAS;i++) {
        for (j=0;j<COLUNAS;j++) {
            if(matriz[i][j]=='T') {
                draw_sprite(criacaodomapa, trilha, j*TAMANHO, i*TAMANHO);
                }
            else if (matriz[i][j]=='M') {
                draw_sprite(criacaodomapa, muro, j*TAMANHO, i*TAMANHO);
                }
        }
    }
}

void tela() { /* Criando da proporção do mapa em tela*/
    // clear_to_color(nomedomapa, makecol(0, 0, 0)); // Limpar mapa em caso de substiição
    blit(criacaodomapa, screen, 0, 0, 100, 80, 900, 750);
}

void jogar()
{
    desenha_o_mapa(); // Desenhar o mapa na tela
    tela(); // Atualização da tela
    printf("Digite");
}

void rankings()
{
    allegro_message("Rankings");
}

void creditos()
{
    allegro_message("Creditos");
    printf("Teste");
}

void sair()
{
    allegro_message("sair");
}

MENU opcao[] =
{
    { "JOGAR", jogar, NULL, 0, NULL },
    { "RANKINGS", rankings, NULL, 0, NULL },
    { "CREDITOS", creditos, NULL, 0, NULL },
    { "SAIR", sair, NULL, 0, NULL }
    };

int main()
{
    allegro_init(); // Inicialização do allegro
    install_keyboard(); // Instalação da função para usar o teclado
    install_mouse(); // Instalação da função para usar o mouse
    set_color_depth(32); // Tipo de cor (16) ou (32) bits
    set_gfx_mode(GFX_AUTODETECT_WINDOWED, 900, 750, 0, 0); // Auto decteta o tamanho da tela e o ajusta
    set_window_title("Maze Escape"); // Define o titulo da janela
    criacaodomapa = create_bitmap(900, 750); // Criando o mapa
    trilha = load_bitmap("594f655c-0380-4a3b-9237-6dd82ffbd75d.bmp", NULL); // Importação da imagem do Muro
    muro = load_bitmap("ffacd56a-7cfa-45e2-aaa7-0ab704711bea.bmp", NULL); // // Importação da imagem da Trilha

        show_mouse(screen); // Mostrar mouse na tela
        do_menu(opcao, 375, 375);


    while(!key[KEY_ESC]) {} // Precionar ESQ para fechar
    // Destruição do mapa
    destroy_bitmap(criacaodomapa);
    destroy_bitmap(trilha);
    destroy_bitmap(muro);
    return 0;
}
END_OF_MAIN()

 

594f655c-0380-4a3b-9237-6dd82ffbd75d.bmp

ffacd56a-7cfa-45e2-aaa7-0ab704711bea.bmp

adicionado 0 minutos depois

e também está bugando a última linha e coluna, suspeito que seja por causa do tamanho, porque se colocar tamanho 30, ele funciona perfeitamente, mas qualquer valor menor, ele está bugando essa parte

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!