Напишите, пожалуйста, программу по которой в pascal будет выводиться анимация...

0 голосов
129 просмотров

Напишите, пожалуйста, программу по которой в pascal будет выводиться анимация перекрестка, по которому проезжают две машины, одна из которых останавливается на светофоре, и когда загорается зеленый свет, она проезжает дальше. CРОЧНО!!!


Информатика (706 баллов) | 129 просмотров
0

Можно простой сделать ,если красный то едет первая машина бесли зеленый вторая

0

Еще можете сделать чтобы можно было задавать скорости машин

0

Изначально, или во время движения?

0

изначально

0

Сколько вам осталось?

0

Минут 5-20

0

uses GraphABC;Varx,y:integer;C:word;BeginLockDrawing;RepeatClearWindow;Case (C div 300) mod 3 of0:SetBrushColor(clGreen);1:SetBrushColor(clYellow);2:SetBrushColor(clRed);End;Circle(-30+(WindowWidth div 2),-40+(WindowHeight div 2),10);Case (C div 300) mod 3 of2:SetBrushColor(clGreen);1:SetBrushColor(clYellow);0:SetBrushColor(clRed);End;Circle(-40+(WindowWidth div 2),30+(WindowHeight div 2),10);if C<65535 then C:=C+1else C:=0;

0

SetBrushColor(clMedGray);FillRect(0,20+(WindowHeight div 2),WindowWidth,-20+(WindowHeight div 2));FillRect(20+(WindowWidth div 2),0,-20+(WindowWidth div 2),WindowHeight);SetBrushColor(clGreen);FillRect(-13+(WindowWidth div 2),-40+y,13+(WindowWidth div 2),y);if ((x<(WindowWidth div 2)-20)or(x-40>=(WindowWidth div 2)+20)) then x:=x+1else if (C div 85) mod 3 = 0 then if (y-40>=20+(WindowHeight div 2))or(y<=(WindowHeight div 2)-20) then x:=x+1;

0

if x>=WindowWidth+40 then x:=0;SetBrushColor(clRed);FillRect(-40+x,13+(WindowHeight div 2),x,-13+(WindowHeight div 2));if (y<(WindowHeight div 2)-20)or(y-40>=(WindowHeight div 2)+20) then y:=y+1else if (C div 85) mod 3 = 2 then if (x-40>=20+(WindowWidth div 2))or(x<=(WindowWidth div 2)-20) then y:=y+1;if y>=WindowHeight+40 then y:=0;RedrawUntil false;End.

0

Программа глючная, и явно какое-то условие лишнее, а поскольку машины и на жёлтый выехать могут, то какого-то не хватает.

Дан 1 ответ
0 голосов
Правильный ответ

Код PascalABC 3.0

uses GraphABC, Crt;
Var
x,y,t,v1,v2:integer;
C:word;
Begin
Write('Введите время работы светофора:  ');
ReadLn(t);
Write('Введите скорость зелёной машины: ');
ReadLn(v1);
Write('Введите скорость красной машины: ');
ReadLn(v2);
LockDrawing;
Repeat
ClearWindow;
Case (C div t) mod 3 of
0:SetBrushColor(clGreen);
1:SetBrushColor(clYellow);
2:SetBrushColor(clRed);
End;
Circle(-30+(WindowWidth div 2),-40+(WindowHeight div 2),10);

Case (C div t) mod 3 of
2:SetBrushColor(clGreen);
1:SetBrushColor(clYellow);
0:SetBrushColor(clRed);
End;
Circle(-40+(WindowWidth div 2),30+(WindowHeight div 2),10);
if C<65535 then C:=C+1<br>else C:=0;

SetBrushColor(clMedGray);
FillRect(0,20+(WindowHeight div 2),WindowWidth,-20+(WindowHeight div 2));
FillRect(20+(WindowWidth div 2),0,-20+(WindowWidth div 2),WindowHeight);

SetBrushColor(clGreen);
FillRect(-13+(WindowWidth div 2),-40+y,13+(WindowWidth div 2),y);
if ((x+v1<=(WindowWidth div 2)-20)or(x-40>=(WindowWidth div 2)+20)) then x:=x+v1
else
   Begin
   if ((y-40>=20+(WindowHeight div 2))or(y<=(WindowHeight div 2)-20)) then<br>      Begin
      if ((C div t) mod 3 = 2)or(x>(WindowWidth div 2)-20) then x:=x+v1
      End
   End;

if x>=WindowWidth+40 then x:=0;
SetBrushColor(clRed);
FillRect(-40+x,13+(WindowHeight div 2),x,-13+(WindowHeight div 2));
if (y+v2<=(WindowHeight div 2)-20)or(y-40>=(WindowHeight div 2)+20) then y:=y+v2
else
   Begin
   if (x-40>=20+(WindowWidth div 2))or(x<=(WindowWidth div 2)-20) then<br>      Begin
      if ((C div t) mod 3 = 0)or(y>(WindowHeight div 2)-20) then y:=y+v2
      End
   End;

if y>=WindowHeight+40 then y:=0;
Redraw
Until false;

End.

(34.0k баллов)
0

Ох, кодировки)

0

Исправил уже)))

0

Чёрт... Вместо того, чтобы комментарии открыть, случайно отправил нарушение. Сейчас пойду сам убирать)

0

Ну, теперь у вас Проверенный ответ)

0

А 'С' что делает в программе?

0

Это счётчик для светофора