kr.pas
program Solution;
uses
Crt, Graph, Smile;
var
GrDriver, GrMode: Integer;
S: TSmile;
C: Integer;
begin
ClrScr;
WriteLn('Клавиши управления:');
WriteLn;
WriteLn('Клавиши со стрелками — перемещение смайлика');
WriteLn('R— самоперемещение смайлика под действием генератора случайных чисел');
WriteLn('Esc — выход');
WriteLn;
WriteLn('Для продолжения нажмите любую клавишу...');
ReadKey;
GrDriver := Detect;
InitGraph(GrDriver, GrMode, '');
if GraphResult <> GrOK then Halt(1);
S.Paint(0, 0);
C := S.GetCommand;
while C <> Close do
begin
if C = Rnd then S.RndMove;
S.MoveObject©;
C := S.GetCommand;
end;
CloseGraph;
end.
Smyle.pas
unit Smile;
interface
uses
Crt, Graph;
const
dx: Integer = 10;
dy: Integer = 10;
Close = 1;
Rnd = 2;
Up = 3;
Right = 4;
Down = 5;
Left = 6;
CurX: Integer = 300;
CurY: Integer = 300;
type
TFigure = object
end;
TDraw = object (TFigure)
procedure Paint(const dx, dy: Integer);
procedure Repaint(const dx, dy: Integer);
end;
TMove = object (TDraw)
function GetCommand: Byte;
procedure MoveObject(const C: Byte);
end;
TSmile = object (TMove)
procedure RndMove;
end;
implementation
{ Рисует смайлик }
procedure TDraw.
begin
SetBkColor(Black);
SetColor(Yellow);
Circle(CurX + dx, CurY + dy, 100);
SetFillStyle(1, LightGray);
FillEllipse(CurX — 55 + dx, CurY — 20 + dy, 10, 10);
FillEllipse(CurX + 55 + dx, CurY — 20 + dy, 10, 10);
SetFillStyle(1, LightRed);
PieSlice(CurX + dx, CurY + 40 + dy, 180, 360, 40);
Inc(CurX, dx);
Inc(CurY, dy);
end;
{ Перерисовка }
procedure TDraw.Repaint(const dx, dy: Integer);
begin
ClearDevice;
Paint(dx, dy);
end;
{ Получение команды от пользователя }
function TMove.GetCommand:byte;
var
c: Char;
t: Byte;
begin
t := 0;
c := ReadKey;
case c of
#27: t := 1;
'r', 'R': t := 2;
#72: t := 3;
#75: t := 4;
#80: t := 5;
#77: t := 6;
end;
GetCommand := t;
end;
{ Произвольное движение }
procedure TSmile.RndMove;
var
t: Integer;
begin
Randomize;
repeat
while (CurX + dx > GetMaxX — 100) or (CurX + dx < 100) or
(CurY + dy > GetMaxY — 100) or (CurY + dy < 100) do
begin
case Random(4) of
0: dx := -10;
1: dx := 10;
2: dx := 20;
3: dx := -20;
end;
case Random(4) of
0: dy := -10;
1: dy := 10;
2: dy := 20;
3: dy := -20;
end;
end;
Repaint(dx, dy);
Delay(500);
until KeyPressed;
dx := 10;
dy:= 10;
end;
{ Изменение положения смайлика }
procedure TMove.MoveObject(const C: Byte);
begin
case C of
Up: if CurY — dy > 100 then Repaint(0, -dy);
Right: if CurX — dx > 100 then Repaint(-dx, 0);
Down: if CurY + dy < GetMaxY — 100 then Repaint(0, dy);
Left: if CurX + dx < GetMaxX — 100 then Repaint(dx, 0);
end;
end;
end.
Почему может не запускаться программа. У того кто ее скинул она рабочая.
|
|
|
Похожие вопросы |