Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103

Код для имитации отрыва самолета от взлетной полосы

31.10.2013, 05:14. Показов 1584. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что лучше использовать в коде для иммитации отрыва самолета от полосы и удаления огней ВПП.Буферизация с циклом for () для смещения огней я так понял не очень дружит с кодом вращения винта самолета и pictureBox1.
Проект присутствует на форуме.Код выглядит так:


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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        SoundPlayer sp;
        SoundPlayer sp_1;
        SoundPlayer sp_2;
        private BufferedGraphics _bufGraphics;
        public Form1()
        {
            InitializeComponent();
            InitializeGraphics();
            sp = new SoundPlayer(@"D:\wav\AN_2.wav");
            sp_1 = new SoundPlayer(@"D:\wav\aeroport_Domodedovo.wav");
            sp_2 = new SoundPlayer(@"D:\Музыка\Posadka_tu_154_v_Moskve_peregovory_dispetchera_i_p.wav");
        }
        private void InitializeGraphics()
        {
            BufferedGraphicsContext context = new BufferedGraphicsContext();
            _bufGraphics = context.Allocate(CreateGraphics(), ClientRectangle);
            context.MaximumBuffer = ClientRectangle.Size;
        }
 
        Pen MyPen = new Pen(Color.Brown, 7);
        Pen MyPen_0= new Pen(Color.Yellow, 7);
        float x2 = 275;
        float y2 = 150;
        int fi = -90;
        int r = 125;
        float x3 = 275;
        float y3 = 400;
        int fi_1 = +90;      
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
            fi += 30;
            float cosFi = (float)Math.Cos(((Math.PI * fi) / 180));
            float sinFi = (float)Math.Sin(((Math.PI * fi) / 180));
 
            x2 = 458 + r * cosFi;
            y2 = 275 + r * sinFi;
 
            fi_1 += 30;
            float cosFi_1 = (float)Math.Cos(((Math.PI * fi_1) / 180));
            float sinFi_1 = (float)Math.Sin(((Math.PI * fi_1) / 180));
 
            x3 = 458 + r * cosFi_1;
            y3 = 275 + r * sinFi_1;
 
            pictureBox1.Refresh();
 
        }
 
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {                    
             Pen MyPen_1 = new Pen(Color.Red, 12);
            e.Graphics.DrawEllipse(MyPen_1, 405, 225, 100, 100);            
            Pen MyPen_2 = new Pen(Color.Green, 10);
            e.Graphics.DrawLine(MyPen_2, 690, 270, 510, 270);
            e.Graphics.DrawLine(MyPen_2, 230, 270, 400, 270);
            e.Graphics.DrawLine(MyPen, 455, 275, x2, y2);
            e.Graphics.DrawLine(MyPen_0, 455, 275, x3, y3);
            Pen MyPen_3 = new Pen(Color.Green, 6);
            e.Graphics.DrawLine(MyPen_3, 315, 270, 315, 320);
            e.Graphics.DrawLine(MyPen_3, 600, 270, 600, 320);
            Pen MyPen_4 = new Pen(Color.Purple, 8);
            e.Graphics.DrawEllipse(MyPen_4,595, 310, 10, 50);
            e.Graphics.DrawEllipse(MyPen_4, 310, 310, 10, 50);
            Pen MyPen_5= new Pen(Color.White, 5);
            e.Graphics.DrawArc(MyPen_5, 428, 195, 58, 50, 530, +200);
            Pen MyPen_6 = new Pen(Color.Purple, 15);
            e.Graphics.DrawEllipse(MyPen_6, 452, 273, 5, 5);
 
 
 
            Pen MyPen_7 = new Pen(Color.Blue, 12);
            e.Graphics.DrawEllipse(MyPen_7, 700, 500, 15, 15);
            Pen MyPen_8 = new Pen(Color.Blue, 12);
            e.Graphics.DrawEllipse(MyPen_8, 197, 500, 15, 15);
 
            Pen MyPen_9 = new Pen(Color.Blue, 10);
            e.Graphics.DrawEllipse(MyPen_9, 660, 400, 10, 10);
            Pen MyPen_10 = new Pen(Color.Blue, 10);
            e.Graphics.DrawEllipse(MyPen_10, 244, 400, 10, 10);
 
            Pen MyPen_11 = new Pen(Color.Blue, 8);
            e.Graphics.DrawEllipse(MyPen_11, 620, 320, 10, 10);
            Pen MyPen_12 = new Pen(Color.Blue, 8);
            e.Graphics.DrawEllipse(MyPen_12, 280, 320, 10, 10);
 
            Pen MyPen_13 = new Pen(Color.Blue, 6);
            e.Graphics.DrawEllipse(MyPen_13, 590, 245, 8, 8);
            Pen MyPen_14 = new Pen(Color.Blue, 6);
            e.Graphics.DrawEllipse(MyPen_14, 320, 245, 8, 8);
 
            Pen MyPen_15 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_15, 565, 195, 6, 6);
            Pen MyPen_16 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_16, 345, 195, 6, 6);
 
            Pen MyPen_17 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_17, 545, 150, 4, 4);
            Pen MyPen_18 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_18, 370, 150, 4, 4);
 
            Pen MyPen_19 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_19, 530, 110, 2, 2);
            Pen MyPen_20 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_20, 395, 110, 2, 2);
 
            Pen MyPen_21 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_21, 515, 70, 2, 2);
            Pen MyPen_22 = new Pen(Color.Blue, 4);
            e.Graphics.DrawEllipse(MyPen_22, 415, 70, 2, 2);
 
            Pen MyPen_23 = new Pen(Color.Blue, 3);
            e.Graphics.DrawEllipse(MyPen_23, 500, 27, 2, 2);
            Pen MyPen_24 = new Pen(Color.Blue, 3);
            e.Graphics.DrawEllipse(MyPen_24, 435, 27, 2, 2);         
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            sp_2.Play();
            System.Threading.Thread.Sleep(50000);
            sp_2.Dispose();
            timer1.Start();
 
            sp.PlayLooping();                  
        }
        private void button2_Click(object sender, EventArgs e)
        {
            sp_1.Play();
            timer1.Stop();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
 
            timer1.Stop();
            sp_2.Stop();
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            timer1.Start();
            sp.Play();
        }
 
        private void button5_Click(object sender, EventArgs e)
        {
            //Код пока не работает(?)
 
            for (int x = 60; x < 650; x++)
            {
                //Рисуем в буфере, чтобы не мигало изображение              
                _bufGraphics.Graphics.Clear(Color.Black);
                _bufGraphics.Graphics.DrawEllipse(new Pen(Color.Red, 50), x, 300, 50, 50);
                _bufGraphics.Render(); //выводим то, что отрисовано в буфере
 
 
            }          
 
        }
 
        private void button5_Paint(object sender, PaintEventArgs e)
        {
           
 
        }
 
        private void button6_Paint(object sender, PaintEventArgs e)
        {
            
 
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.10.2013, 05:14
Ответы с готовыми решениями:

Определить длину посадочной полосы для самолета
самолете на земле нужна посадочная полоса длиной 300 м, ускорение самолета при торможении равно 6м / с ^ 2. какой длины палуба авианосца...

Код имитации нажатия клавиши
Подскажите код программы на virtual basic которая бы в фоновом режиме осуществляла бы имитацию нажатия клавиши (только одной и той же...

Требуется программист для интересной работы, без отрыва от основной работы.
Нужен сильный программист хорошо понимающий в Машинном коде знающий Паскаль, C++. Желательно знание движка игры: &quot;Half-Life&quot; ...

3
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
31.10.2013, 09:42
разбавьте, пожалуйста, описание проблемы знаками препинания.

для решения проблемы с отрисовкой графики не нужно использовать BufferedGraphics достаточно перевести форму в режим двойной буферизации или любой другой ее элемент тот на котором идет отрисовка. а дальше в обработчике Paint контрола нужно реализовать отрисовку Вашей анимации. это раз. в чем тоже не понятно. что значит не дружит. она не работает вообще работает неправильно или компилируется с ошибкой? хотябыпоясните как должно быть.

Надеюсь, Вы меня поняли. Кстати, Вы не используете Ваш созданный BufferedGraphics при отрисовке непосредственно самолета. Она Вам действительно там нужна?
0
 Аватар для Веселый
87 / 88 / 48
Регистрация: 12.10.2013
Сообщений: 1,103
01.11.2013, 20:56  [ТС]
BufferedGraphics я хотел применить именно для перемещения огней ВПП .Для пробы разместил код прорисовки 1-го фонаря именно в обработчик события для button5.Для лучшей видимости цвет сделал красным. После компиляции
нажатая button5 ничего не выводит на форму и почему-то на время останавливает таймер.
0
208 / 164 / 29
Регистрация: 11.09.2013
Сообщений: 445
01.11.2013, 21:31
я бы посоветовал Вам подойти к вопросу комплексно. попробуйте описать интерфейс IDrawable и затем для каждого элемента сцены создайте класс, который будет наследоваться и от этого интерфейса в том числе. в основной форме создайте List<IDrawable> (не зря ведь полиморфизм придумывали), и добавляйте в него все необходимые объекты.

для того, чтобы все работало, Вам не нужен BufferedGraphics. метод SetStyle любого контрола позволяет автоматически включать двойную буферизацию (т.е. BufferedGraphics все-таки используется, но прозрачно для пользователя) - поковыряйте флаги, которые он хавает

и, наконец, всю отрисовку можно делать в три строки кода (поместить в Form1_Paint):

C#
1
2
3
foreach (IDrawable idr in MyIDrawableItems)
   if (idr != null)
      idr.Draw(e);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.11.2013, 21:31
Помогаю со студенческими работами здесь

Требуется программист для интересной работы, без отрыва от основной работы
Нужен сильный программист хорошо понимающий в Машинном коде знающий Паскаль, C++. Желательно знание движка игры: &quot;Half-Life&quot; ...

Программа для имитации работы часов
Доброго времени суток! Программа должна имитировать работу цифровых часов для отображения времени с точностью до одной секунды. При...

Программы для имитации зажима клавиш
играю в он-лайн игру Lineage что бы атаковать игрока надо зажимать ctrl существуют ли программы которые автоматически могут зажимать нужные...

Использование mouse_event для имитации клика мыши
Привет всем, друзья подскажите, для имитации клика мыши использую setcursorpos(Xc,Yc); ...

Класс Одометр для имитации работы авто
Помогите новичку, вроде и написана программа, но работать ни в какую. Что исправить то не подскажите? И как можно реализовать пункт...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru