Я попытался использовать код мыши, описанный в наших учебниках, но мне не удалось заставить его работать. Если бы кто-нибудь мог помочь мне запустить этот проект
Бит-1400, назначение М7
Заглавие
Система частиц (на основе образца системы частиц)
функциональные потребности
• Программа будет иметь размер дисплея 640x480.
• Отображается объект игрока с растровым изображением, похожим на ракету (растровый фон должен быть прозрачным).
• Объект игрока имеет 4 версии изображения ракеты для 4 направлений и управляется клавиатурой. Ракета движется постоянно. Игрок может только изменить направление движения.
• Массив частиц следует за ракетой в правильном направлении. Они будут представлять собой постоянный поток частиц, выходящих в конце ракеты и идущих немного назад, прежде чем они исчезнут. Каждая частица, которая исчезает, появится снова в конце ракеты, чтобы создать постоянный поток. Направление этого потока всегда противоположно направлению ракеты.
• Все частицы имеют небольшое случайное движение в дополнение к основному движению, описанному выше.
Требования К Внедрению
• Включите цель/требования/алгоритм в верхнюю часть кода
• Используйте массивы для частиц и структуры для частиц и игрока. Вы можете использовать одну структуру GameObject или определить две для игрока и частицы
Требования К Подаче Заявки
• Представить zip-архив, в том числе исходный файл и растровые изображения с помощью cuLearn. Не отправляйте весь проект или любой другой файл.
Оценка
• Движение ракеты и изменение формы 1+1
• Движение и направление частиц 1+1
• Общая структура программы и кодирование 0.5
• Цель/Требования/Алгоритм 0.5
• Дополнительно: рассмотрим 4 диагональных направления 2
Что я уже пробовал:
int main() { int mouseX = 0, mouseY = 0; int randNum = 0; std::vector <Particle *> Particles; bool running = false, redraw = false, mouseHold = false; int particleCount = 0; al_init(); al_init_image_addon(); al_install_mouse(); al_init_font_addon(); al_init_ttf_addon(); ALLEGRO_DISPLAY* display = al_create_display(640, 480); ALLEGRO_EVENT_QUEUE* event_queue = al_create_event_queue(); ALLEGRO_TIMER* myTimer = al_create_timer(1.0 / 60); ALLEGRO_TIMER* pTimer = al_create_timer(1.0 / 120); ALLEGRO_FONT* myFont = al_load_ttf_font("MyFont.ttf", 20, NULL); al_register_event_source(event_queue, al_get_display_event_source(display)); al_register_event_source(event_queue, al_get_timer_event_source(myTimer)); al_register_event_source(event_queue, al_get_timer_event_source(pTimer)); al_register_event_source(event_queue, al_get_mouse_event_source()); running = true; al_start_timer(myTimer); while(running) { ALLEGRO_EVENT ev; al_wait_for_event(event_queue, &ev); if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE) running = false; if(ev.type == ALLEGRO_EVENT_MOUSE_AXES) { mouseX = ev.mouse.x; mouseY = ev.mouse.y; } if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_DOWN) { if(ev.mouse.button == 1) mouseHold = true; } if(ev.type == ALLEGRO_EVENT_MOUSE_BUTTON_UP) { if(ev.mouse.button == 1) mouseHold = false; } if(ev.type == ALLEGRO_EVENT_TIMER) { randNum = (std::rand()+1 * ev.timer.count) % 50; std::cout << randNum << std::endl; if(mouseHold) { Particle* particle = new Particle(mouseX + randNum, mouseY + randNum); Particles.push_back(particle); } particleCount = Particles.size(); for(auto i : Particles) i->Update(); redraw = true; } for(auto iter = Particles.begin(); iter != Particles.end(); ) { if(!(*iter)->GetAlive()) { delete (*iter); iter = Particles.erase(iter); } else iter++; } if(redraw && al_event_queue_is_empty(event_queue)) { for(auto i : Particles) i->Draw(); al_draw_textf(myFont, al_map_rgb(0,200,0), 0, 10, NULL, "Mouse X: %i", mouseX); al_draw_textf(myFont, al_map_rgb(0,200,0), 0, 30, NULL, "Mouse Y: %i", mouseY); al_draw_textf(myFont, al_map_rgb(0,200,0), 0, 60, NULL, "Particle Count: %i", particleCount); al_flip_display(); al_clear_to_color(al_map_rgb(0,0,0)); redraw = false; } } al_destroy_display(display); al_destroy_event_queue(event_queue); al_destroy_timer(myTimer); for(auto i : Particles) delete i; Particles.clear(); return 0; } for(int i = 0; i < rate; rate++) { randNum = (std::rand()+1 * ev.timer.count) % 50; std::cout << randNum << std::endl; if(mouseHold) { Particle* particle = new Particle(mouseX + randNum, mouseY + randNum); Particles.push_back(particle); } } if(ev.timer.source == timer) { redraw = true; } if (ev.timer.source == fasterTimer) { randNum = (std::rand()+1 * ev.timer.count) % 50; std::cout << randNum << std::endl; if(mouseHold) { Particle* particle = new Particle(mouseX + randNum, mouseY + randNum); Particles.push_back(particle); } }