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