Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 0
Регистрация: 31.03.2016
Сообщений: 44

Написать программу, отображающую перемещение точки

11.09.2016, 13:43. Показов 2898. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу, отображающую перемещение точки в замкнутом прямоугольном пространстве на экране монитора. Предусмотреть отражение точки от сторон прямоугольника.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.09.2016, 13:43
Ответы с готовыми решениями:

Реализовать программу ,отображающую код нажатой клавиши
Реализовать программу ,отображающую код нажатой клавиши. в форме

Составить программу отображающую графики функций sin(x) cos(x) на интервале [Xmin, Xmax]
Составить программу отображающую графики функций sin(x) cos(x) на интервале . Предусмотреть возможность изменения разметки координатных...

Написать программу, которая выводила бы на весь экран монитора случайно точки пока вы не нажмете Esc
Всем привет вот такая вот задачка. Написать программу, которая выводила бы в графическом режиме на весь экран монитора, кроме...

18
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
12.09.2016, 01:44
Такую программу легко сделать, используя pictureBox с нанесенной точкой (маленький цветной кружок). и при
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
12.09.2016, 02:25
Создайте picturebox и в нём перемещайте свою точку. Для отражения: либо через углы рассчитывать, либо просто инвертировать одну из координат(левая и правая стенка - x, верх и низ - y)
0
2 / 2 / 0
Регистрация: 31.03.2016
Сообщений: 44
12.09.2016, 09:34  [ТС]
Цитата Сообщение от zna926 Посмотреть сообщение
Такую программу легко сделать, используя pictureBox с нанесенной точкой (маленький цветной кружок). и при
можно код?
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.09.2016, 10:28
Зачем пикчурбокс? Прямо на форме рисуйте. Переопределите метод OnPaint, из аргументов которого можно получить graphics, и на нем рисуйте
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
12.09.2016, 16:06
Форма создана для того, чтоб на ней контролы размещать, а не рисовать. Если потом понадобится сделать ввод скорости точки, то без picturebox это будет не удобно.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
12.09.2016, 16:40
Цитата Сообщение от DevAlone Посмотреть сообщение
Форма создана для того, чтоб на ней контролы размещать
Это кто вам такое сказал?

Пичурбокс нужен для отображения картинки. Для подобных вещей он избыточен. Есть панель, на крайний случай, но тогда уже лучше юзерконтрол использовать
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
12.09.2016, 16:57
Цитата Сообщение от sldp Посмотреть сообщение
Это кто вам такое сказал?
Это я сам так решил. С контролами работать проще и удобнее, а для ручного рисования есть WinAPI.
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
12.09.2016, 23:19
Для перемещения пикчербокса используйте таймер и этого вполне достаточно.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
13.09.2016, 11:58
Примитивный пример.
На практике так(при каждом кадре смешать на 1 пиксель) делать нельзя ибо частота кадров - величина переменная, а скорость должна быть постоянно всегда той, которая нужна нам. Для этого размер сдвига нужно рассчитывать по формуле расстояние = скорость * время, где скорость - какая-то константа выбранная вами, а время - время между двумя кадрами (запоминаем текущее время и в следующий раз вычитаем его из нового)

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
public partial class Form1 : Form
{
    Point locationPoint;
    Direction DirectionPoint;
    Size SizePoint;
 
    public Form1()
    {
        InitializeComponent();
        SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
 
        locationPoint = new Point(0, Height / 2);
        DirectionPoint = Direction.Right;
        SizePoint = new Size(10, 10);
 
        Application.Idle += delegate { Invalidate(); };
    }
 
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        locationPoint.Offset(DirectionPoint == Direction.Right ? 1 : -1, 0);
        if (locationPoint.X < 1)
            DirectionPoint = Direction.Right;
        else if (locationPoint.X >= Width)
            DirectionPoint = Direction.Left;
 
        e.Graphics.FillEllipse(Brushes.Black, new Rectangle(locationPoint, SizePoint));
    }
}
 
enum Direction
{
    Left,
    Right
}
2
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
13.09.2016, 13:32
sldp, все это не нужно, если использовать таймер с рикчербоксом, код - не более 10 - 15 строк
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
13.09.2016, 14:39
zna926, куда разумнее делать анимацию движения ричтекстбокса? Серьезно!?)
1
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
13.09.2016, 15:47
sldp, судите сами. Вот поднял я старый код. Движение шарика между стенками по горизонтали - 7 строк,
по вертикали - тоже 7. Можно, конечно, добавить регулирование скорости - еще 5 - 6 строк, а еще лучше наблюдать когда 2 шарика.
0
 Аватар для Spectral-Owl
608 / 583 / 157
Регистрация: 29.06.2010
Сообщений: 1,620
13.09.2016, 16:39
а потом мы расширим проект до сотни шариков по горизонтали, и до двух с половиной сотен по вертикали. И придём к выводу, что оба варианта, как собственно технология WinForms тут не подходит, т.к. здесь эта анимация отъест сотню нефти.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
13.09.2016, 18:04
zna926, Только в моем случае мы практически одной (28й) строкой рисуем точку, а в вашем n-е количество тратим на создание, например, ричтекстбокса. И на выходе двигаем такой контрол, который создан для другого, и который, к тому же, достаточно тяжеловесный.

Просто етсь такой "учитель" по фамилии Волосатов (имени не помню). У него курсы по программированию. В частности и на C#. Есть там курс игры Сокобан(2д игра, передвигаем ящики на места), где, по его словам, мы научимся делать настоящую полноценную игру, которую отлично можно использовать в качестве портфолио. Вкратце говоря сделал он двумерный массив пикчурбоксов и меняет на них картинки. Все это глючит при ресайзе, но не суть. "Учитель" плевал на все каноны ООП, покрыл код огромным количеством костылей, как например не зная понятия события он вместо его создания запускает таймер, который постоянно читает одно поле и, елси оно отлично от -1, то что-то делает. И таким стилем все другое. И вроде бы пусть играется, все с чего-то начинали, но данный персонаж продает свои курсы за 4000р! Начинающий не знают ничего и верят ему, что пишет крутую программу согласно всем современным канонам.

По этому где есть шарик отскакивающий от стенок, там скоро появляется и ракетка) И если уже начинать писать примитивную игрушку, то лучше хоть чутка грамотнее.

Цитата Сообщение от Spectral-Owl Посмотреть сообщение
а потом мы расширим проект до сотни шариков по горизонтали, и до двух с половиной сотен по вертикали.
Ну с таким GDI легко справится
0
549 / 480 / 315
Регистрация: 24.09.2013
Сообщений: 3,345
Записей в блоге: 1
13.09.2016, 22:35
sldp Глубина Вашей логики понятна. Лучше стрелять из пушек по воробьям, чем воспользоваться примитивным кодом.
Думаю, что переписку можно уже прекращать
0
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
14.09.2016, 07:00
Цитата Сообщение от zna926 Посмотреть сообщение
sldp Глубина Вашей логики понятна. Лучше стрелять из пушек по воробьям, чем воспользоваться примитивным кодом.
Его логика в том, что лучше делать правильно, чем неправильно. Рисовать на одном контроле(будь то форма или panel, или picturebox) 1000 точек куда менее затратно, чем двигать 1000 контролов

Добавлено через 2 минуты
Цитата Сообщение от sldp Посмотреть сообщение
Примитивный пример.
А кто у вас событие вызывает? Ну кроме самого окна при изменении размеров.
0
310 / 318 / 119
Регистрация: 29.10.2011
Сообщений: 1,006
14.09.2016, 10:34
DevAlone, Грубо говоря событие Application.Idle вызывается всегда, когда выполнена вся очередь сообщений(клики мышью, изменение размера и т.п.)
1
331 / 283 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
14.09.2016, 16:04
Цитата Сообщение от sldp Посмотреть сообщение
DevAlone, Грубо говоря событие Application.Idle вызывается всегда, когда выполнена вся очередь сообщений(клики мышью, изменение размера и т.п.)
Так, по идее, частота кадров будет зависить от всяких разных факторов и станет очень не постоянной. Я, когда писал, на C# прогу моделирования движения большого количества шариков с физикой, использовал timer для вызова перерисовки, вполне хватало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.09.2016, 16:04
Помогаю со студенческими работами здесь

Перемещение объекта из одной точки в другую и обратно
сделал цикл: for (int i = 1; i == 1; i++) { if (Monster.Location.X &lt;= 787) {...

Написать программу, отображающую перемещение точки в замкнутом прямоугольном пространстве на экране монитора
Всем привет, нужно решить задачку: Написать программу, отображающую перемещение точки в замкнутом прямоугольном пространстве на экране...

Написать программу, отображающую графики функций
помогите сделать задачу Задание: Написать программу, отображающую графики функций: • y=sin(x)*x; • y=cos3(x); • y=sin3(x)+cos3(x); ...

Написать программу, отображающую движение часовой и минутной стрелок часов
Написать программу,отображающую во временном масштабе 60:1 движение часовой и минутной стрелок часов,т.е. минутная стрелка делает полный...

Написать программу анализирующую лог файл маршрутизатора, отображающую интенсивность сканирования портов
Написать программу анализирующую лог файл маршрутизатора, отображающую интенсивность сканирования портов по минутам указанного часа. ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru