Мне скинули прогу на Турбо паскаль. При запуске должно выходить меню для выбора, а затем выходить фигурка в виде смайлика. После запуска run у меня выходит поле с выбором и просто вылетает програма.

вот программы

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.Paint(const dx, dy: Integer);

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.

Почему может не запускаться программа. У того кто ее скинул она рабочая.
09.05.16
0 ответов
Ответов пока нет
Рекомендуем личную консультацию

Галина Владимировна

Сейчас на сайте
Галина Владимировна
Галина Владимировна
Эксперт месяца
Помощь в решении самых разнообразных задач по математическим дисциплинам, в том числе и вузовским. В личном чате бесплатные решения не даю, для этого пишите в общую ленту вопросов.
Посмотреть всех экспертов из раздела Учеба и наука