Member 14488895 Ответов: 2

Я попытался использовать код мыши, описанный в наших учебниках, но мне не удалось заставить его работать. Если бы кто-нибудь мог помочь мне запустить этот проект


Бит-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);
    }
}

2 Ответов

Рейтинг:
1

Gerry Schmitz

Требовалось использовать клавиатуру, а не мышь.

Цитата:
Объект игрока имеет 4 версии изображения ракеты для 4 направлений и управляется клавиатурой.


Member 14488895

я не знаю как пользоваться клавиатурой ну не могли бы вы помочь мне с решением

Рейтинг:
0

KarstenK

Когда вам нужны данные клавиатуры вы можете использовать клавиатура allegro или используйте некоторые стандартные функции, такие как функция getchar().