Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 39

Анимация в dos - реализовать очистку экрана при перерисовке

05.05.2014, 12:15. Показов 1865. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
подскажите пожалуйста чайнику, я написал код, сосуд мой двигается, но не стирается и поэтому размазывается, как сделать что бы он стирался и заново рисовался? я очищал экран, но видимо не в том месте. Либо у меня все стирается и он нормально движется или не чего не стирает, но сам размазывается...
и еще вопрос- как его наклонять? полностью заново рисовать, или есть способ проще?
и последний вопросик - как сосуд наполнить водой, которая потом выливается в другой сосуд?
я пишу в старом Борланде, поэтому прошу не объясняйте мне на дефе или визуале. А то я даже не запущю(

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
#include <stdlib.h>
#include <iostream.h>
#include <graphics.h>
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#define PATHTODRIVER "c:\\borlandc\\bgi\\"
 
class Fon
{
    public:
    Fon();
};
 
    Fon::Fon()
{
    setfillstyle(5,GREEN);
    bar(0,0,getmaxx(),getmaxy());
 
};
 
    class rezerv
{
    int x,y;
    public:
    rezerv(int X, int Y)
    {x=X;y=Y;}
    void Showrezerv();
};
 
    void rezerv::Showrezerv()
{
    y=y+getmaxy();
    setfillstyle(1,7);
    //floodfill(x+230,y-140,7);
    moveto(x,y-205);         lineto(x,y-105);
    moveto(x,y-105);         lineto(x+475,y-105);
    moveto(x+475,y-105);         lineto(x+475,y-205);
 
    setfillstyle(1,1);
    fillellipse(x+237,y-205,x+162,y-540);
 
}
class susudm
{
    int x,y,n;
    public:
    susudm(int X,int Y,int N)
    {x=X; y=Y; n=N;}
    void Showsusudm();
};
    void susudm::Showsusudm()
{
    y=y+getmaxy();
    setcolor(7);
    setfillstyle(1,1);
    //floodfill(x-220,y-660,7);
    for(n=0;n<100;n++)
    {
    x=x+1;
    moveto(x,y-595);    lineto(x+65,y-595);
    moveto(x+8,y-595);  lineto(x-8,y-615);
    moveto(x-8,y-615);  lineto(x-8,y-650);
    moveto(x-8,y-650);  lineto(x+17,y-683);
    moveto(x+17,y-683); lineto(x-8, y-718);
    moveto(x-8,y-718);  lineto(x+75,y-718);
    moveto(x+75,y-718); lineto(x+50,y-683);
    moveto(x+50,y-683); lineto(x+75,y-650);
    moveto(x+75,y-650); lineto(x+75,y-615);
    moveto(x+75,y-615); lineto(x+57,y-595);
     delay(5);
    
    }
}
 
class susudb
{
    int x,y;
    public:
    susudb(int X,int Y)
    {x=X; y=Y;}
    void Showsusudb();
};
    void susudb::Showsusudb()
{
    y=y+getmaxy();
    setcolor(7);
    setfillstyle(1,1);
    //floodfill(x,y-500,7);
    outtextxy(x-250,y-630, "5 litrov");
    moveto(x,y-305);    lineto(x+90,y-305);
    moveto(x+10,y-305); lineto(x-10,y-335);
    moveto(x-10,y-335); lineto(x-10,y-380);
    moveto(x-10,y-380); lineto(x+20,y-425);
    moveto(x+20,y-425); lineto(x-10,y-470);
    moveto(x-10,y-470); lineto(x+100,y-470);
    moveto(x+100,y-470);    lineto(x+70,y-425);
    moveto(x+70,y-425); lineto(x+100,y-380);
    moveto(x+100,y-380);    lineto(x+100,y-335);
    moveto(x+100,y-335);    lineto(x+80,y-305);
 
}
 
void main()
{
    int gdriver=DETECT;
    int gmode;
    int errorcode;
 
    initgraph(&gdriver, &gmode, PATHTODRIVER);
    errorcode=graphresult();
    if(errorcode!=grOk)
{
    printf("ERROR!");
    exit(1);
}
    Fon Fon1;
    rezerv rezerv1(75,75);
    rezerv1.Showrezerv();
    susudb susudb1(110,110);
    susudb1.Showsusudb();
    susudm susudm1(400,400,1);
    susudm1.Showsusudm();
    cin.get();
    closegraph();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2014, 12:15
Ответы с готовыми решениями:

Моргание экрана при перерисовке
Ребята, может кто знает, как убрать моргание экрана при перерисовке, пользуюсь функцией InvalidateRect(), моргает не всегда, но бывает....

Макроопределения на очистку экрана, установку курсора в центре экрана, вывод теста на экран
добрый вечер, может кто помочь с Макроопределениями на очистку экрана, установку курсора в центре экрана, вывод теста на экран,

Разрешение экрана при DOS
Какое разрешение имеет экран, когда включен режим эмуляции DOS'а в полноэкранном режиме?

6
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
05.05.2014, 12:52
Лучший ответ Сообщение было отмечено xDanceRx как решение

Решение

И снова здравствуйте. Как я понял devcpp настроить из thread1160667.html не получилось.
Цитата Сообщение от xDanceRx Посмотреть сообщение
как сделать что бы он стирался и заново рисовался?
Есть два варианта. Первый
C++
1
2
3
4
5
6
7
while (true)
{
    drawShit();   //рисуем 
    delay(100);   //ждем, что бы не торопить события
    cleardevice();//очищаем экран
    moveShit();   //двигаем то что рисуем (а-ля меняем координаты вашего сосуда, или там градус наклона)
}
затирает весь экран.
Есть другой вариант.
C++
1
2
3
4
5
6
7
8
9
while (true)
{
    drawShit();   //рисуем 
    delay(100);   //ждем, что бы не торопить события
    setcolor(BLACK);   //выставляем цвет прорисовки на черный
    drawShit();     //рисуем поверх старого рисунка 
    moveShit();    //двигаем то что рисовали
    setcolor(WHITE);    //выставляем цвет прорисовки на белый
}
[/CPP]
Но думаю хватит и первого варианта.
Вот однако пример на борланде:
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
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#define PATHTODRIVER "c:\\BORLANDC\\bgi\\"
 
void drawSpaceShip(int leftX, int bottomY)   //left bottom point of the spaceship
{
    const int width = 100, length = 125;
    const int rightX = leftX + width, topY = bottomY - length - 1;
    rectangle(leftX, topY, rightX, bottomY);
    
    arc(leftX + width * 2 - width / 10 + 1, topY + length / 2 + 5, 135, 160, 200);
    arc(rightX - width * 2 + width / 10 - 1, topY + length / 2 + 5, 20, 45, 200);
    
    int xFlames = leftX + width / 10;
    
    for (int i = 0; i < 9; i++)
        line(xFlames + width / 10 * i, bottomY, xFlames + width / 10 * i, bottomY + 20);
}
 
int main()
{
    int gdriver=DETECT;
    int gmode;
    initgraph(&gdriver,&gmode,PATHTODRIVER);
 
    int speed = 5;
 
    for (int i = 0; i < 175; i++)
    {
        drawSpaceShip(getmaxx()/2, getmaxy() - i * speed + 200);
        
        delay(50); 
        
        cleardevice();   
    }
    
    return 0;
}
Цитата Сообщение от xDanceRx Посмотреть сообщение
как его наклонять? полностью заново рисовать, или есть способ проще?
Нет, простого способа нету к сожалению. С тригонометрией дружите? Если нет, то вот подкину кусок кода который рисует линию под заданным углом в градусах.
C++
1
2
3
4
5
void angleLine(int x, int y, double length, int angle)
        {
            double radianAngle = (angle*3.14)/180.0;
            line(x, y, x + length * cos(radianAngle), y + length * sin(radianAngle));
        }
может понадобиться подключить
C++
1
#include <math.h>
1
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 39
05.05.2014, 15:04  [ТС]
Большое спасибо.
не могли бы вы его чуть-чуть прокомментировать? или дай ссылочку на мануалы какие-ни будь? то что делается в "void drawSpaceShip" мне не понятно..(

Добавлено через 46 минут
укажите пожалуйста строчку, благодаря которой корабль двигается с низу вверх?
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
05.05.2014, 15:06
Ну drawSpaceShip - это не самый понятный код на свете. Вместо корабля, напишите функцию прорисовки сосуда под переданными в функцию углом и координатами x, y.
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
void drawSpaceShip(int leftX, int bottomY)   //Это функция прорисовки космического корабля - leftX - это координата x лвеой стенки корабля,  bottomY - координата y низа корабля
{
    const int width = 100, length = 125;    //width - ширина корабля, length - длина
    const int rightX = leftX + width, topY = bottomY - length - 1;     //правая стена корабля = левая + ширина, верх корабля = низ - длина - 1
    rectangle(leftX, topY, rightX, bottomY);     //рисуем прямоугольник
    
    arc(leftX + width * 2 - width / 10 + 1, topY + length / 2 + 5, 135, 160, 200);    //рисуем часть арки, про саму функцию см. ссылку после кода
    arc(rightX - width * 2 + width / 10 - 1, topY + length / 2 + 5, 20, 45, 200);
    
    int xFlames = leftX + width / 10;    //длина полосок под короблем, типа огонь
    
    for (int i = 0; i < 9; i++)  //рисуем этот огонь
        line(xFlames + width / 10 * i, bottomY, xFlames + width / 10 * i, bottomY + 20);
}
 
int main()
{
    int gdriver=DETECT;
    int gmode;
    initgraph(&gdriver,&gmode,PATHTODRIVER);
 
    int speed = 5;  //скорость корабля - 5 пикселей
 
    for (int i = 0; i < 175; i++)   //собственно анимация. Отрисовываем корабля 175 раз, начиная с getmaxy() (низ экрна)
    {
        drawSpaceShip(getmaxx()/2, getmaxy() - i * speed + 200);    //рисуем корабль
        
        delay(50);   //задержка 50 миллисекунда
        
        cleardevice();   //очитска экрана
    }
    
    return 0;
}
http://www.cs.colorado.edu/~main/cs1300/doc/bgi/
Эта ссылка - справка по BGI, то есть там описана каждая предоставляемая graphics.h функция.
Надеюсь что нибудь да прояснилось.
1
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 39
05.05.2014, 15:14  [ТС]
dimcoder, я уже очень долго пишу это программу как вы сами заметили...и мне уже нужно её сдавать а я сижу тут на форуме и не знаю простейших вещей...не могли бы вы мне ёё написать и что бы она работала в старом Борланде?? ну очень нужно(((
вот задание: программа градурированния сосудов для отмеривания воды.
Имеются не отградуированные сосуды 5-ти литровый и 3-х литровый. Нужно отмерить 4 литра жидкости. Разработайте алгоритм для этой программы. Предполагается, что есть очень большой резервуар с жидкостью. Процесс градуировки оформить в виде функции.

в общем градуированные- отмеривания.
1 наливаем полный 3-х литровый сосуд, затем выливаем его в 5 литровый и потом еще раз, и у нас остается 1 литр в 3-х литровом.
2 выливаем все из 5 литрового и вливаем в него 1 литр, затем наливаем полный 3-х литровый и выливаем в 5 ти литровый сосуд и в нем будет 4 литра.
0
Полярный
 Аватар для dimcoder
477 / 449 / 158
Регистрация: 11.09.2011
Сообщений: 1,156
05.05.2014, 20:20
Лучший ответ Сообщение было отмечено xDanceRx как решение

Решение

xDanceRx, вот набросал
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
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<math.h>
#define PATHTODRIVER "c:\\BORLANDC\\bgi\\"
 
void angleLine(int x, int y, double length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    line(x, y, x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
void movetoAtAngle(int x, int y, int length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    moveto(x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
void angleLineFromTo(int x, int y, double length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    moveto(x + length * cos(radianAngle), y + length * sin(radianAngle));
    line(x, y, x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
class Bucket
{
    public:
        Bucket(int, int, int, int, int, int);
        void moveByX(int);
        void moveByY(int);
        void tiltby(int);
        void fillto(int);
        void helpMove(int &, int);
        void draw();
        void refresh();
    private:
        int x, y, width, length, angle, nDivisors, fillLevel;
};
 
Bucket::Bucket(int x_, int y_, int width_, int length_, int angle_, int nDivisors_):
    x(x_),
    y(y_),
    width(width_),
    length(length_),
    angle(angle_),
    nDivisors(nDivisors_),
    fillLevel(0)
{
    ;
}
 
void Bucket::draw()
{
    angleLineFromTo(x, y, width,0 + angle);
    angleLineFromTo(getx(), gety(), length, 90 + angle);
    angleLineFromTo(getx(), gety(), width, 180 + angle);
    line(getx(), gety(), x, y);
    
    if (!(x >= -45 && x <= 45))
    {
        for (int i = length - fillLevel; i < length; i++)
        {   
            movetoAtAngle(x, y, i, angle + 90);
            angleLine(getx(), gety(), width, angle);
        }
    }
    else
    {
        for (int i = width - fillLevel; i < width; i++)
        {
            movetoAtAngle(x, y, length, angle + 90);
            movetoAtAngle(getx(), gety(), i, angle);
            angleLine(getx(), gety(), length, angle - 90);
        }
    }
    
    for (int i = 1; i < nDivisors; i++)
    {
        movetoAtAngle(x, y, (length / nDivisors) * i, angle + 90);
        angleLine(getx(), gety(), width / 5, angle);
    }
}
 
void Bucket::moveByX(int deltaX)
{
    helpMove(x, deltaX);
}
 
void Bucket::moveByY(int deltaY)
{
    helpMove(y, deltaY);
}
 
void Bucket::tiltby(int deltaAngle)
{
    helpMove(angle, deltaAngle);
}
 
void Bucket::fillto(int deltaFillLevel)
{
    helpMove(fillLevel, deltaFillLevel);
}
 
void Bucket::helpMove(int &value, int deltaValue)
{
    int change;
    if (deltaValue > 0)
        change = 1;
    else
        change = -1;
        
    int oldValue = value;
    
    for (; value != oldValue + deltaValue; value += change)
        refresh();
        
    setcolor(WHITE);
    draw();
}
 
void Bucket::refresh()
{
    setcolor(WHITE);
    draw();
    delay(15);
    setcolor(BLACK);
    draw();
}
 
int main()
{
    int gdriver=DETECT;
    int gmode;
    initgraph(&gdriver,&gmode,PATHTODRIVER);
 
    int smallX = 300, smallY = 300 + 125 - 75, smallWidth = 70, smallLength = 75;
    int bigX = 400, bigY = 300, bigWidth = 100, bigLength = 125;
    
    Bucket smallBucket(smallX, smallY, smallWidth, smallLength, 0, 3);
    Bucket bigBucket(bigX, bigY, bigWidth, bigLength, 0, 5);
    
    smallBucket.draw();
    bigBucket.draw();
    smallBucket.moveByX(-50);   //передвинуть по оси x
    smallBucket.moveByY(-10);   
    smallBucket.tiltby(-15);   //наклонить на 50 градусов от текущего положения
    smallBucket.fillto(45);     //изменить уровень воды к 45 пикселям
  
    cout << "Press the enter key to continue ...";
    cin.get();
    return 0;
}
Пользоваться дальше просто - в main просто прописать что нужно делать сосуду (ведру в переводе с английского bucket)

Не по теме:

Сначала почему-то сразу подумал что нужно без классов и уже почти дописал прогу со всей анимацие, как меня осенило :wall:



Добавлено через 1 час 11 минут
Таки дописал:
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
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<dos.h>
#include<math.h>
#define PATHTODRIVER "c:\\BORLANDC\\bgi\\"
 
const int universalDelayTime = 5;
 
void angleLine(int x, int y, double length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    line(x, y, x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
void movetoAtAngle(int x, int y, int length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    moveto(x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
void angleLineFromTo(int x, int y, double length, int angle)
{
    double radianAngle = (angle*3.14)/180.0;
    moveto(x + length * cos(radianAngle), y + length * sin(radianAngle));
    line(x, y, x + length * cos(radianAngle), y + length * sin(radianAngle));
}
 
class Bucket
{
    public:
        Bucket(int, int, int, int, int, int);
        void moveByX(int);
        void moveByY(int);
        void tiltby(int);
        void fillto(int);
        void setDelay(int);
        void resetDelay();
        void helpMove(int &, int);
        int getFillLevel();
        int getX(){return x;}
        int getY(){return y;}
        void draw();
        void refresh();
    private:
        int x, y, width, length, angle, nDivisors, fillLevel;
        int delayTime;
};
 
Bucket::Bucket(int x_, int y_, int width_, int length_, int angle_, int nDivisors_):
    x(x_),
    y(y_),
    width(width_),
    length(length_),
    angle(angle_),
    nDivisors(nDivisors_),
    fillLevel(0),
    delayTime(universalDelayTime)
{
    ;
}
 
void Bucket::draw()
{
    angleLineFromTo(x, y, width,0 + angle);
    angleLineFromTo(getx(), gety(), length, 90 + angle);
    angleLineFromTo(getx(), gety(), width, 180 + angle);
    line(getx(), gety(), x, y);
    
    if (angle >= -45 && angle <= 45)
    {
        for (int i = length - fillLevel; i < length; i++)
        {   
            movetoAtAngle(x, y, i, angle + 90);
            angleLine(getx(), gety(), width, angle);
        }
    }
    else
    {
        for (int i = length - fillLevel; i < width; i++)
        {
            movetoAtAngle(x, y, length, angle + 90);
            movetoAtAngle(getx(), gety(), i, angle);
            angleLine(getx(), gety(), length, angle - 90);
        }
    }
    
    for (int i = 1; i < nDivisors; i++)
    {
        movetoAtAngle(x, y, (length / nDivisors) * i, angle + 90);
        angleLine(getx(), gety(), width / 5, angle);
    }
}
 
void Bucket::moveByX(int deltaX)
{
    helpMove(x, deltaX);
}
 
void Bucket::moveByY(int deltaY)
{
    helpMove(y, deltaY);
}
 
void Bucket::tiltby(int deltaAngle)
{
    helpMove(angle, deltaAngle);
}
 
void Bucket::fillto(int deltaFillLevel)
{
    helpMove(fillLevel, deltaFillLevel);
}
 
void Bucket::helpMove(int &value, int deltaValue)
{
    int change;
    if (deltaValue > 0)
        change = 1;
    else
        change = -1;
        
    int oldValue = value;
    
    for (; value != oldValue + deltaValue; value += change)
        refresh();
        
    setcolor(WHITE);
    draw();
}
 
void Bucket::setDelay(int delay_)
{
    delayTime = delay_;
}
 
void Bucket::resetDelay()
{
    delayTime = universalDelayTime;
}
 
void Bucket::refresh()
{
    setcolor(WHITE);
    draw();
    delay(delayTime);
    setcolor(BLACK);
    draw();
}
 
int main()
{
    int gdriver=DETECT;
    int gmode;
    initgraph(&gdriver,&gmode,PATHTODRIVER);
 
    int smallX = 200, smallY = 200 + 125 - 75, smallWidth = 70, smallLength = 75;
    int bigX = 300, bigY = 200, bigWidth = 100, bigLength = 125;
    
    Bucket smallBucket(smallX, smallY, smallWidth, smallLength, 0, 3);
    Bucket bigBucket(bigX, bigY, bigWidth, bigLength, 0, 5);
 
    smallBucket.draw();
    bigBucket.draw();
    
    smallBucket.fillto(smallLength);
    smallBucket.moveByY(-175);
    smallBucket.moveByX(125);
    smallBucket.tiltby(90);
    
    smallBucket.setDelay(0);
    bigBucket.setDelay(0);
    
    for (int i = smallLength; i >= 0; i--)
    {
        smallBucket.fillto(-1);
        bigBucket.fillto(1);
        line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    delay(10);
    }
 
    setcolor(BLACK);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    setcolor(WHITE);
    smallBucket.draw();
    bigBucket.draw();
    
    smallBucket.resetDelay();
    bigBucket.resetDelay();
    
    smallBucket.tiltby(-90);
    
    smallBucket.moveByX(-125);
    smallBucket.moveByY(175);
    
    smallBucket.fillto(smallLength);
    
    smallBucket.moveByY(-175);
    smallBucket.moveByX(125);
    smallBucket.tiltby(90);
    
    smallBucket.setDelay(0);
    bigBucket.setDelay(0);
    
    for (i = smallLength / 3.0 * 2.0; i >= 0; i--)
    {
        smallBucket.fillto(-1);
        bigBucket.fillto(1);
        line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
        delay(10);
    }
    
    setcolor(BLACK);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    setcolor(WHITE);
    smallBucket.draw();
    bigBucket.draw();
    
    smallBucket.resetDelay();
    bigBucket.resetDelay();
    
    smallBucket.tiltby(-90);
    
    smallBucket.moveByX(-125);
    smallBucket.moveByY(175);
    
    bigBucket.moveByX(125);
    bigBucket.tiltby(90);
    
    for (i = bigLength; i >= 0; i--)
    {
        line(bigBucket.getX(), bigBucket.getY(), bigBucket.getX(), getmaxy());
        bigBucket.fillto(-1);
    }
    
    setcolor(BLACK);
    line(bigBucket.getX(), bigBucket.getY(), bigBucket.getX(), getmaxy());
    setcolor(WHITE);
    smallBucket.draw();
    bigBucket.draw();
        
    bigBucket.tiltby(-90);
    bigBucket.moveByX(-125);
    
    smallBucket.moveByY(-175);
    smallBucket.moveByX(125);
    smallBucket.tiltby(90);
    
    smallBucket.setDelay(0);
    bigBucket.setDelay(0);
    
    for (i = smallLength / 3.0; i >= 0; i--)
    {
    smallBucket.fillto(-1);
    bigBucket.fillto(1);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    delay(10);
    }
 
    setcolor(BLACK);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    setcolor(WHITE);
    smallBucket.draw();
    bigBucket.draw();
 
    smallBucket.resetDelay();
    bigBucket.resetDelay();
 
    smallBucket.tiltby(-90);
 
    smallBucket.moveByX(-125);
    smallBucket.moveByY(175);
 
    smallBucket.fillto(smallLength);
 
    smallBucket.moveByY(-175);
    smallBucket.moveByX(125);
    smallBucket.tiltby(90);
    
    smallBucket.setDelay(0);
    bigBucket.setDelay(0);
    
    for (i = smallLength; i >= 0; i--)
    {
    smallBucket.fillto(-1);
    bigBucket.fillto(1);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    delay(10);
    }
    
    setcolor(BLACK);
    line(smallBucket.getX(), smallBucket.getY(), smallBucket.getX(), bigBucket.getY() + bigLength);
    setcolor(WHITE);
    smallBucket.draw();
    bigBucket.draw();
    
    smallBucket.resetDelay();
    bigBucket.resetDelay();
    
    smallBucket.tiltby(-90);
    
    smallBucket.moveByX(-125);
    smallBucket.moveByY(175);
    
    cin.get();
    
    return 0;
}
1
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 39
05.05.2014, 23:59  [ТС]
dimcoder, огромное спасибо! очень выручили, побольше бы таких отзывчивых людей!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2014, 23:59
Помогаю со студенческими работами здесь

Как отменить очистку экрана?
Хочу визуально отследить траекторию движению, но onDrawFrame() очищает кадр перед прорисовкой. Если кто знает как наложить кадры друг на...

Какая функция отвечает за очистку экрана?
собственно вопросы в 120 142 170 178 183 208 строках написаны какая функция отвечает за очистку экрана(только не clrscr из conio.h)? ...

QPainter. Можно ли как то отменить очистку экрана?
Здравствуйте! Необходимо, чтобы в виджете область отрисовки не очищалась с каждым новым кадром. Как это возможно сделать?

Анимация при смене ориентации экрана
У меня есть анимация на фон с плавной сменой фона, но пир повороте анимация стартует занаво, из-за чего то выглядит ужастно ...

Как произвести очистку экрана после ввода команды в командную строку?
к примеру : после ввода команды должна сробатывать команда clscr procedure Handler3; Interrupt; begin if cls=true then begin...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru