Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/27: Рейтинг темы: голосов - 27, средняя оценка - 4.85
qliqli
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
1

Мультик в паскале. Графика.

08.11.2010, 12:08. Просмотров 4874. Ответов 3
Метки нет (Все метки)

Товарищи форумчане! требуется ваша помощь срочно
написал кое как программу: самолетик движется по синусоиде, сюда же вставил две тучки. Но и это не работает все вместе на экране не движется- это первая проблема. Вторая проблема-необходимо закрасить фон тучек, сделать фон и залить воном самолетик, украсить(чтобы иллюминаторы тоже были не пусты и тд) Третья проблема необходимо еще что либо добавить, если у вас есть какие нибудь зарисовки процедур, чтобы программа не была уж очень пустой.
вот соответсвенно код, самолетик движется по синусоиде, а тучки по прямой просто. Программа не работает, когда вставил тучки...
Pascal
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
program samol;
uses Graph, Crt;
var
  grDriver: integer;
  grMode: integer;
  ErrCode: integer;
  X,Y:integer;
  gd,gm:integer;
tucha1, tucha2:integer;
  way1,way2:integer;
 
procedure samolet(X, Y: integer);
begin
 
  moveto(X, Y);
 
  linerel(0,40);
 { linerel(20,-20); }
  linerel(70,0);
  linerel(0,70);
  linerel(30,-20);
  linerel(0,-50);
  linerel(30,0);
 
  linerel(10,-10);
 
  linerel(-10,-10);
 
  linerel(-30,0);
  linerel(0,-50);
  linerel(-30,-20);
  linerel(0,70);
  linerel(-50,0);
  linerel(-20,-20);
  circle(X+115,Y+30,5);
  circle(X+95,Y+30,5);
  circle(x+75,y+30,5);
 { circle(x+55,y+30,10);}
  circle(x+35,y+30,5);
  line(x+130,y+20,x+130,y+30);
  line(x+130,y+30,x+140,y+30);
  line(x+5,y+25,x+15,y+25);
  line(x+15,y+25,x+5,y+20);
  line(x+5,y+20,x+5,y+25);
 
end;
 
procedure tuchi(x,y:integer);
 
 
begin
gd:=0; gm:=0;
initgraph(gd,gm,'');
y:=30;
tucha1:=x+1; tucha2:=x+500;
readln;
 
{repeat
delay(20); }
for x:=1 to 680 do begin
setcolor(black);
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(tucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);
 
if tucha1=1 then way1:=2
else if tucha1=500 then way1:=1;
if tucha2=1 then way2:=2
else if tucha2=500 then way2:=1;
if way1=2 then tucha1:=tucha1+1 else tucha1:=tucha1-1;
if way2=2 then tucha2:=tucha2+1 else tucha2:=tucha2-1;
 
setcolor(white);
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(tucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);
 delay(3);
{until keypressed; }
 
end;
end;
 
begin
grDriver := Detect;
  InitGraph(grDriver, grMode, '..\BGI');
  ErrCode := GraphResult;
  Y:= 250;
  if ErrCode = grOk then
  begin
 
for X:=1 to 680 do begin
  Y :=(GetMaxY div 2)+trunc(100*sin(0.01*X)+10) {(GetMaxY div 2) + Trunc(100 * sin(X * (Pi/200)))};
 
  setcolor(white); samolet(X, Y);
  Delay(1);
  setcolor(0); samolet(X, Y);
  tuchi(x,y);
end;
end
  else Writeln('Graphics error: ', GraphErrorMsg(ErrCode));
 
readln;
CloseGraph;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2010, 12:08
Ответы с готовыми решениями:

Мультик на паскале
Помогите написать мультик на паскале с законченным сюжетом. Мне тяжело это...

Графика в Паскале
Если можно то с Объяснениями!!! Или Коментариями в программе!!!

графика в паскале, экран
Как сделать,чтобы графика была не во весь экран... всм initgraph(gd,gm,'');...

Графика в паскале. Движение фигур.
В разделе графика увидел только рекомендации, поэтому решил выложить в общей...

Шахматы в Паскале. Кони. Графика
Здравствуйте уважаемые. Буду очень благодарен если мне помогут разобраться с...

3
Напильнег
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
08.11.2010, 12:56 2
Навскидку - зачем ты в процедуре tuchi инициализируешь графику?
0
qliqli
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
08.11.2010, 16:38  [ТС] 3
Pascal
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
program samol;
uses Graph, Crt;
var
  grDriver: integer;
  grMode: integer;
  ErrCode: integer;
  X,Y:integer;
  gd,gm:integer;
tucha1, tucha2:integer;
  way1,way2:integer;
  yy:integer;
 
procedure samolet(X, Y: integer);
begin
 
  moveto(X, Y);
 
  linerel(0,40);
 { linerel(20,-20); }
  linerel(70,0);
  linerel(0,70);
  linerel(30,-20);
  linerel(0,-50);
  linerel(30,0);
 
  linerel(10,-10);
 
  linerel(-10,-10);
 
  linerel(-30,0);
  linerel(0,-50);
  linerel(-30,-20);
  linerel(0,70);
  linerel(-50,0);
  linerel(-20,-20);
  circle(X+115,Y+30,5);
  circle(X+95,Y+30,5);
  circle(x+75,y+30,5);
 { circle(x+55,y+30,10);}
  circle(x+35,y+30,5);
  line(x+130,y+20,x+130,y+30);
  line(x+130,y+30,x+140,y+30);
  line(x+5,y+25,x+15,y+25);
  line(x+15,y+25,x+5,y+20);
  line(x+5,y+20,x+5,y+25);
 
end;
 
procedure tuchi(x,yy:integer);
 
 
begin
{gd:=0; gm:=0;
initgraph(gd,gm,'')};
yy:=30;
tucha1:=x+1; tucha2:=x+500;
{readln;}
 
{repeat
delay(20); }
{for x:=1 to 680 do begin }
{setcolor(black);
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(ucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);    }
 
{if tucha1=1 then way1:=2
else if tucha1=500 then way1:=1;
if tucha2=1 then way2:=2
else if tucha2=500 then way2:=1;
if way1=2 then tucha1:=tucha1+1 else tucha1:=tucha1-1;
if way2=2 then tucha2:=tucha2+1 else tucha2:=tucha2-1;  }
delay(1);
setcolor(white);
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(tucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);
 
{until keypressed; }
 
 
end;
 
begin
grDriver := Detect;
  InitGraph(grDriver, grMode, '..\BGI');
  ErrCode := GraphResult;
  Y:= 250;
  if ErrCode = grOk then
  begin
 
for X:=1 to 680 do begin
  Y :=(GetMaxY div 2)+trunc(100*sin(0.01*X)+10) {(GetMaxY div 2) + Trunc(100 * sin(X * (Pi/200)))};
 
  setcolor(white); samolet(X, Y);
  Delay(1);
  setcolor(0); samolet(X, Y);
 
  yy:=30;
  begin
  for X:=1 to 680 do
  tuchi(x,yy);
  end;
end;
end
  else Writeln('Graphics error: ', GraphErrorMsg(ErrCode));
 
readln;
CloseGraph;
end.
Добавлено через 38 секунд
вот дальше незнаю что делать

Добавлено через 3 часа 2 минуты
Pascal
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
program samol;
uses Graph, Crt;
var
  grDriver: integer;
  grMode: integer;
  ErrCode: integer;
  X,Y:integer;
  gd,gm:integer;
tucha1, tucha2:integer;
  way1,way2:integer;
  yy:integer;
  size,size2:integer;
  p:pointer;
  k:pointer;
 
procedure samolet(X, Y: integer);
begin
 
  moveto(X, Y);
 
  linerel(0,40);
 { linerel(20,-20); }
  linerel(70,0);
  linerel(0,70);
  linerel(30,-20);
  linerel(0,-50);
  linerel(30,0);
 
  linerel(10,-10);
 
  linerel(-10,-10);
 
  linerel(-30,0);
  linerel(0,-50);
  linerel(-30,-20);
  linerel(0,70);
  linerel(-50,0);
  linerel(-20,-20);
  circle(X+115,Y+30,5);
  circle(X+95,Y+30,5);
  circle(x+75,y+30,5);
 { circle(x+55,y+30,10);}
  circle(x+35,y+30,5);
  line(x+130,y+20,x+130,y+30);
  line(x+130,y+30,x+140,y+30);
  line(x+5,y+25,x+15,y+25);
  line(x+15,y+25,x+5,y+20);
  line(x+5,y+20,x+5,y+25);
 
end;
 
procedure tuchi(x:integer);
 
 
begin
{gd:=0; gm:=0;
initgraph(gd,gm,'')};
{yy:=30;
tucha1:=x+1;} {tucha2:=500-x;}
{readln;}
 
{repeat
delay(20); }
{for x:=1 to 680 do begin }
{setcolor(white);}
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
{circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(tucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);    }
 
{if tucha1=1 then way1:=2
else if tucha1=500 then way1:=1;
if tucha2=1 then way2:=2
else if tucha2=500 then way2:=1;
if way1=2 then tucha1:=tucha1+1 else tucha1:=tucha1-1;
if way2=2 then tucha2:=tucha2+1 else tucha2:=tucha2-1;  }
{delay(20);}
{setcolor(black);  }
circle(tucha1,23,18);
circle(tucha1+36,23,18);
circle(tucha1+36+36,23,18);
circle(tucha1+36+36+36,23,18);
 
{circle(tucha2,23,18);
circle(tucha2+36,23,18);
circle(tucha2+36+36,23,18);
circle(tucha2+36+36+36,23,18);}
 
{until keypressed; }
 
 
end;
 
begin
grDriver := Detect;
  InitGraph(grDriver, grMode, '..\BGI');
  ErrCode := GraphResult;
  Y:= 250;
  if ErrCode = grOk then
  begin
size:=Imagesize(0,100,150,360);
Getmem(p,size);
x:=0; y:=150;
setcolor(white); samolet(x,y);
Getimage(0,100,150,360,p^);
delay(20);
setcolor(black); samolet(x,y);
 
for X:=1 to 680 do begin
  Y :=round(100*sin(x/100)+200);     {(GetMaxY div 2)+trunc(100*sin(0.01*X)+10)}
   {(GetMaxY div 2) + Trunc(100 * sin(X * (Pi/200)))};
  putimage(x,y,p^,xorput);
  delay(20);
  putimage(x,y,p^,xorput);
  {setcolor(white); samolet(X, Y);
  Delay(2);
  setcolor(black); samolet(X, Y);}
 
{  yy:=30;
  begin
  for X:=1 to 680 do }
  y:=30;
  size2:=Imagesize(0,0,150,60);
  Getmem(k,size2);
  x:=0;
  setcolor(white); tuchi(x);
  Getimage(0,0,150,60,k^);
  delay(20);
  setcolor(black);
  tuchi(x);     putimage(x,30,k^,xorput);
  delay(20);
  putimage(x,30,k^,xorput);
 
end;
end
  else Writeln('Graphics error: ', GraphErrorMsg(ErrCode));
 
readln;
CloseGraph;
end.
в чем ошибка?
0
Зелибоба
3 / 3 / 0
Регистрация: 08.11.2010
Сообщений: 20
10.11.2010, 22:21 4
закоулки памяти подсказывают что в графическое модуле паскаля есть малоизвестная функция
которая позволяет запоминать небольшой нарисованный фрагмент в динамическую память
поэтому анимацию можно сделать так: нарисовать облако, закрасить его точками и небольшой кусок неба вокруг него, а после этого сохранить этот кусок а потом вставлять его на экран с небольшим сдвигом тогда каждый раз он будет затирать уж предыдущее изображение и будет создаваться иллюзия движения. так же можно поступить и с самолётом. так как движущихся частей немного то тормозить не должно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2010, 22:21

Графика в Турбо Паскале. Вывод изображения
Я с графикой в Турбо Паскале не знаком. Поэтому не могли бы привести пример...

Графика в паскале (построить график функции)
Необходимо построить графики заданной функции в паскале. Условие задачи: ...

Графика на паскале ввод с клавиатури и движужйшеся кружок
Можете пожалуйста помочь я не могу не как зделать так чтоб по игрику не...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru