Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/64: Рейтинг темы: голосов - 64, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
1

Движение объектов

15.12.2013, 11:19. Показов 13430. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте друзья, мне нужна помощь в написании программы C++
Нужно сделать объект, который будет двигаться по экрану:
Движение под углом 45 градусов с отражением от границ экрана. Начальные значения — dx = 5, dy = 5.
Управление клавишами со стрелками Влево(0,75), Вправо(0,77), Вверх(0,72), Вниз(0,80).
Нужна любая помощь в написании этой программы)
Спасибо заранее
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2013, 11:19
Ответы с готовыми решениями:

Работа в графическом режиме. Графические примитивы, движение объектов.
В соответствии с возникающими ассоциациями от словесного описания картины, нарисовать ее...

В программе реализовать возможность записи объектов в файл и чтения объектов из файла
Добрый день, помогите, пожалуйста! У меня есть программа: #include <iostream> #include...

Передача объектов дочерних классов через массив объектов родительского класса в функцию
Здравствуйте. Возможно, вопрос больше относится к теории ООП, но все же я не решился задавать его в...

Добавление и удаление объектов. Рисование объектов на экране
Доброго времени суток. Есть очень интересующий вопрос, как сделать добавление, обновление,...

3
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
15.12.2013, 11:56 2
На Win32 используя ресусный диалог:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <windows.h>
#define BALL                            102
int x,y,dx,dy; // Координаты и скорости объекта
const int R=20; // радиус объекта
int WINAPI fn(HWND hwnd,int cmd,WPARAM wp,LPARAM lp)
{
    switch(cmd)
    {
 
    case WM_INITDIALOG:
        x=0;y=0; // задание начальных координат
        dx=2;dy=-2; // задание начальных координат
        SetTimer(hwnd,1,25,NULL); // запуск таймера каждые 25 миллисекунд
        return 1;
    case WM_TIMER: // появилось ссобщение от таймера
        {
            x+=dx;y+=dy; // пересчет координат
            RECT rc;GetClientRect(hwnd,&rc); // узнать размеры окна
            // проверка столкновения с границей
            if(x>rc.right-R)dx=-abs(dx);
            if(x<R)dx=abs(dx);
            if(y>rc.bottom-R)dy=-abs(dy);
            if(y<R)dy=abs(dy);
            InvalidateRect(hwnd,NULL,TRUE); // команда на перерисовку окна
        }
        return 1;
    case WM_CLOSE:
        EndDialog(hwnd,3); // закрытие окна
        return 1;
    case WM_SIZE:
        InvalidateRect(hwnd,NULL,TRUE);// перерисовка при изменении размера окна
        return 1;
    case WM_COMMAND:
        return 0;
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            HBRUSH b1,b0;
            b1=CreateSolidBrush(RGB(255,0,0)); // красная кисть
            b0=(HBRUSH)SelectObject(hdc,b1);
            Ellipse(hdc,x-R,y-R,x+R,y+R);  // Рисуем красный круг в точке (x,y) радиуса R 
            SelectObject(hdc,b0);
            DeleteObject(b1);
            EndPaint(hwnd, &ps);
        }
        return 1;
    }
    return 0;
}
int WINAPI WinMain(HINSTANCE hi,HINSTANCE,LPSTR,int) 
{
    return DialogBox(hi,MAKEINTRESOURCE(BALL),NULL,(DLGPROC)fn);
}
Текст ресурса (ball.rc)
C++
1
2
3
4
5
6
7
8
#include "windows.h"
#define BALL                            102
 
BALL DIALOGEX 0, 0, 372, 250
STYLE  WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "Moving"
BEGIN
END
0
0 / 0 / 0
Регистрация: 15.12.2013
Сообщений: 10
15.12.2013, 18:04  [ТС] 3
А может кто-нибудь помочь тем, что объяснит это?)
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
15.12.2013, 19:44 4
Создаете проект win32 и добавляете к нему 2 файла:
1. ресурс файл xxxx.rc содержит образцы диалогов и др. элементы.
2. файл xxxx.cpp содержит точку входа в программу - функцию int WINAPI WinMain()
и функцию обработчик сообщений int WINAPI fn().
WinMin вызывает менеджер диалога, который берет из ресурса образец диалога с названием BALL
и открывает его.
Далее для каждого из событий вызывается функция fn. Параметр cmd определяет причину вызова.
Вызов SetTimer(hwnd,1,25,NULL); заставляет вызывать эту функцию каждые 25 миллисекунд с
cmd=WM_TIMER. Пересчитываем координаты фигуры и вызываем функцию
InvalidateRect(hwnd,NULL,TRUE);
эта команда на перерисовку окна, которая заставляет windows послать сообщение WM_PAINT.
В этот момент и рисуется фигура в точке (X,Y).
Более подробно см. в разделе
https://www.cyberforum.ru/win-api/
0
15.12.2013, 19:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2013, 19:44
Помогаю со студенческими работами здесь

Движение объектов
Форумчане кто знает можете написать как сделать движение точки в с++, много перелазил ничего не...

Движение планеты в системе двойной звезды или движение трех тел
программа должна выводить координаты движения звезд и планеты в файл (рисую в gnuplot). ...

Движение объектов
Здрасти. У меня есть дорога и машинка. как можно сделать чтобы машинка ехала только там где...

Движение объектов
делаю игру танк. На поле 5 танков, но они движутся у меня асинхронно(одинаково). Кажется все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru