屏幕被清除,一个新的屏幕出现在C中?

屏幕被清除,一个新的屏幕出现在C中?,c,allegro5,C,Allegro5,我正在用allegro5用C做一个非常简单的游戏,我试图通过点击某个键来触发屏幕变化。例如,如果按F键,整个屏幕将被清除,并显示一个新屏幕,同时显示一条新消息。有人知道怎么告诉我我做错了什么吗。按F键不会消失,并显示新消息 没有错误消息,文档已编译,但它不符合我的要求 #include <stdio.h> #include <stdlib.h> #include <allegro5/allegro5.h> #include <allegro5/alleg

我正在用allegro5用C做一个非常简单的游戏,我试图通过点击某个键来触发屏幕变化。例如,如果按F键,整个屏幕将被清除,并显示一个新屏幕,同时显示一条新消息。有人知道怎么告诉我我做错了什么吗。按F键不会消失,并显示新消息

没有错误消息,文档已编译,但它不符合我的要求

#include <stdio.h>
#include <stdlib.h>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_primitives.h> // permite colocar formas simples, linhas, pontos, etc. (formas primitivas)
#include <allegro5/allegro_audio.h> // biblioteca de som
#include <allegro5/allegro_acodec.h>

void must_init(bool test, const char *description){
    if(test) return;

    printf("couldn't initialize %s\n", description);
    exit(1);
}

int main(){
    must_init(al_init(), "allegro"); // auxilia o must_init(), evitar de colocar instruções a mais par averificar erros.
    must_init(al_install_keyboard(), "keyboard");
    must_init(al_install_mouse(), "mouse"); // instalando o mouse

    ALLEGRO_TIMER* timer = al_create_timer(1.0 / 30.0);
    must_init(timer, "timer");

    ALLEGRO_EVENT_QUEUE* queue = al_create_event_queue();
    must_init(queue, "queue");

     // Permite que as formas e linhas tenham maior definição, deixar mais suave
    al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST); // imagem suave
    al_set_new_display_option(ALLEGRO_SAMPLES, 8, ALLEGRO_SUGGEST); // imagem suave
    al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR | ALLEGRO_MAG_LINEAR); // imagem suave

    ALLEGRO_DISPLAY* disp = al_create_display(1200, 800);
    must_init(disp, "display");

    ALLEGRO_FONT* font = al_create_builtin_font();
    must_init(font, "font");

    ALLEGRO_FONT* font1 = al_create_builtin_font();
    must_init(font1, "font1");

    must_init(al_init_primitives_addon(), "primitives"); // Para inserir linhas, formas e pontos no código

    al_register_event_source(queue, al_get_keyboard_event_source());
    al_register_event_source(queue, al_get_display_event_source(disp));
    al_register_event_source(queue, al_get_timer_event_source(timer));
    al_register_event_source(queue, al_get_mouse_event_source());  // adicionado para o mouse funcionar

    bool done = false;
    bool redraw = true;
    ALLEGRO_EVENT event;

    float x, y;
    x = 100;
    y = 100;

    #define KEY_SEEN     1
    #define KEY_RELEASED 2

    unsigned char key[ALLEGRO_KEY_MAX]; 
    memset(key, 0, sizeof(key)); // tem que iniciar zerado
    al_hide_mouse_cursor(disp); // faz com que o mouse do computador suma

    al_start_timer(timer);
    while(1){
        al_wait_for_event(queue, &event);

        switch(event.type){
            case ALLEGRO_EVENT_TIMER:
                // lógica do jogo aqui!            

                al_clear_to_color(al_map_rgb(0, 0, 0));
                al_draw_text(font, al_map_rgb(255, 255, 255), 430, 650, 0, "APERTE ENTER PARA COMEÇAR OU ESC PARA SAIR");
                al_draw_text(font, al_map_rgb(255, 255, 255), 430, 750, 0, "@ TODOS DIREITOS RESERVADOS AO DINO PESCOÇUDO @");
                al_draw_rectangle(10, 10, 1190, 790, al_map_rgb_f(0, 0, 1), 2); // para ficar opaca em cima da imagem, foi colocado o primeiro 0. Varia de 0 a 1, sendo 1 totalmente solido
                al_draw_filled_triangle(x, y, x + 10, y + 5, x , y + 10, al_map_rgb(255, 0, 0)); // desenha o retangulo do mouse

                al_flip_display();

                switch(event.type){
                    case ALLEGRO_EVENT_KEY_DOWN:
                        if(event.keyboard.keycode == ALLEGRO_KEY_F){
                            //done = true;
                            al_destroy_font(font);
                            al_destroy_display(disp);
                            al_destroy_timer(timer);
                            al_destroy_event_queue(queue);
                                
                            redraw = true;
                            al_clear_to_color(al_map_rgb(0, 0, 0));
                            al_draw_text(font1, al_map_rgb(255, 255, 255), 200, 750, 0, "APERTEI ENTER");
                            al_flip_display(); 
                        }

                }
                redraw = false;
                

                if(key[ALLEGRO_KEY_ESCAPE])
                    done = true;

                for(int i = 0; i < ALLEGRO_KEY_MAX; i++)
                    key[i] &= KEY_SEEN;

                redraw = true;
                break;

            case ALLEGRO_EVENT_MOUSE_AXES:
                x = event.mouse.x;
                y = event.mouse.y;
                break;

            case ALLEGRO_EVENT_KEY_DOWN: // quando o botão e apertado
                key[event.keyboard.keycode] = KEY_SEEN | KEY_RELEASED; // usado no mouse, deixe
                // esse dois if é usado para sair som especifico ao clicar em um botão, no caso, o E
                // usar para a cena final, da explosão
                if(event.keyboard.keycode != ALLEGRO_KEY_ESCAPE)
                    break;
                
                break;

            case ALLEGRO_EVENT_KEY_UP: // quando o botão é solto
                key[event.keyboard.keycode] &= KEY_RELEASED;
                break;

            case ALLEGRO_EVENT_DISPLAY_CLOSE:
                done = true;
                break;
        }

        if(done)
            break;

        
    }

    al_destroy_font(font);
    al_destroy_display(disp);
    al_destroy_timer(timer);
    al_destroy_event_queue(queue);

    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括//permite colocar formas simples、linhas、pontos等(formas primitivas)
#包括//索姆图书馆
#包括
无效必须初始化(布尔测试,常量字符*说明){
如果(测试)返回;
printf(“无法初始化%s\n”,说明);
出口(1);
}
int main(){
MuSuiNIT(Al席In),“AlelGRO”;//AuxiLi o MuthSuthIn(),EVITAR de Culoar StudioS。
必须初始化(安装键盘(),“键盘”);
必须初始化(安装鼠标(),“鼠标”);//instalando鼠标
快板计时器*计时器=所有创建计时器(1.0/30.0);
必须初始化(计时器,“计时器”);
ALLEGRO_EVENT_QUEUE*QUEUE=al_create_EVENT_QUEUE();
必须初始化(队列,“队列”);
//许可证的形式是由tenham maior definição、deixar mais suave组成的
al_set_new_display_选项(ALLEGRO_SAMPLE_BUFFERS,1,ALLEGRO_SUGGEST);//imagem suave
al_set_new_display_选项(ALLEGRO_示例,8,ALLEGRO_SUGGEST);//imagem suave
al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR | ALLEGRO_MAG_LINEAR)//imagem suave
快板显示*disp=al_创建显示(1200800);
必须初始化(显示);
ALLEGRO_FONT*FONT=al_create_builtin_FONT();
必须初始化(字体,“字体”);
ALLEGRO_FONT*font1=al_create_builtin_FONT();
必须初始化(font1,“font1”);
must_init(al_init_primitives_addon(),“primitives”);//Para inserir linhas,formas e pontos no código
al_寄存器\事件\源(队列,al_获取\键盘\事件\源());
al_寄存器\事件\源(队列,al_获取\显示\事件\源(disp));
al_寄存器_事件_源(队列,al_获取_定时器_事件_源(定时器));
al_register_event_source(队列,al_get_mouse_event_source());//adicionado para o mouse function
bool done=false;
布尔重绘=真;
快板活动;
浮动x,y;
x=100;
y=100;
#定义键1
#定义密钥\u已发布2
无符号字符键[ALLEGRO_key_MAX];
memset(key,0,sizeof(key));//tem que iniciar zerado
隐藏鼠标光标(disp)//faz com que o mouse do computator suma
启动定时器(定时器);
而(1){
等待事件(队列和事件);
开关(事件类型){
案例快板事件计时器:
//洛吉卡多乔戈阿基!
al_clear_to_color(al_map_rgb(0,0,0));
绘图文本(字体,地图rgb(255,255,255),430,650,0,,“输入一段文字”或“输入一段文字”);
画图文字(字体,地图rgb(255,255,255),430750,0,“@TODOS DIREITOS RESERVADOS AO DINO PESCOÇUDO”);
绘制矩形图(10,10,1190,790,绘制矩形图(0,0,1,2);//图像的光学处理,彩色图像,彩色图像,彩色图像,彩色图像0
al_draw_filled_triangle(x,y,x+10,y+5,x,y+10,al_map_rgb(255,0,0));//desenha o retangulo do鼠标
al_flip_display();
开关(事件类型){
案例快板事件键向下:
if(event.keyboard.keycode==快板键){
//完成=正确;
销毁字体(字体);
铝显示器(disp);
al_销毁_定时器(定时器);
销毁事件队列(队列);
重画=真;
al_clear_to_color(al_map_rgb(0,0,0));
画图文字(字体1,画图rgb(255,255,255),200,750,0,“按比例输入”);
al_flip_display();
}
}
重画=假;
如果(键[快板键])
完成=正确;
对于(int i=0;i
谢谢