Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
xDanceRx
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 33
05.05.2014, 12:15     Анимация в dos - реализовать очистку экрана при перерисовке #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
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();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 12:15     Анимация в dos - реализовать очистку экрана при перерисовке
Посмотрите здесь:

Какая функция отвечает за очистку экрана? C++
C++ Мерцание при перерисовке Controla в диалоге при resize.
C++ Как реализовать вставку ассемблерного кода в код с++ для очистки экрана?
C++ Написать игру. В верхней части экрана летят 3 «звездочки»(***). В нижнем правом углу экрана находиться буква «О»
C++ Организовать добавление данных в файл, просмотр, поиск и очистку данных
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
05.05.2014, 12:52     Анимация в dos - реализовать очистку экрана при перерисовке #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
И снова здравствуйте. Как я понял 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>
xDanceRx
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 33
05.05.2014, 15:04  [ТС]     Анимация в dos - реализовать очистку экрана при перерисовке #3
Большое спасибо.
не могли бы вы его чуть-чуть прокомментировать? или дай ссылочку на мануалы какие-ни будь? то что делается в "void drawSpaceShip" мне не понятно..(

Добавлено через 46 минут
укажите пожалуйста строчку, благодаря которой корабль двигается с низу вверх?
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
05.05.2014, 15:06     Анимация в dos - реализовать очистку экрана при перерисовке #4
Ну 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 функция.
Надеюсь что нибудь да прояснилось.
xDanceRx
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 33
05.05.2014, 15:14  [ТС]     Анимация в dos - реализовать очистку экрана при перерисовке #5
dimcoder, я уже очень долго пишу это программу как вы сами заметили...и мне уже нужно её сдавать а я сижу тут на форуме и не знаю простейших вещей...не могли бы вы мне ёё написать и что бы она работала в старом Борланде?? ну очень нужно(((
вот задание: программа градурированния сосудов для отмеривания воды.
Имеются не отградуированные сосуды 5-ти литровый и 3-х литровый. Нужно отмерить 4 литра жидкости. Разработайте алгоритм для этой программы. Предполагается, что есть очень большой резервуар с жидкостью. Процесс градуировки оформить в виде функции.

в общем градуированные- отмеривания.
1 наливаем полный 3-х литровый сосуд, затем выливаем его в 5 литровый и потом еще раз, и у нас остается 1 литр в 3-х литровом.
2 выливаем все из 5 литрового и вливаем в него 1 литр, затем наливаем полный 3-х литровый и выливаем в 5 ти литровый сосуд и в нем будет 4 литра.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
05.05.2014, 20:20     Анимация в dos - реализовать очистку экрана при перерисовке #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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)

Не по теме:

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



Добавлено через 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 23:59     Анимация в dos - реализовать очистку экрана при перерисовке
Еще ссылки по теме:

Графика в DOS. Анимация C++
Анимация полета по кривой, как реализовать? C++
Мигание окна при перерисовке C++

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

Или воспользуйтесь поиском по форуму:
xDanceRx
0 / 0 / 0
Регистрация: 26.04.2014
Сообщений: 33
05.05.2014, 23:59  [ТС]     Анимация в dos - реализовать очистку экрана при перерисовке #7
dimcoder, огромное спасибо! очень выручили, побольше бы таких отзывчивых людей!
Yandex
Объявления
05.05.2014, 23:59     Анимация в dos - реализовать очистку экрана при перерисовке
Ответ Создать тему
Опции темы

Текущее время: 09:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru