Урок 29. Задача 1.
Primary tabs
У вас есть код, который создает сцену, которой можно управлять нажимая клавиши '1' '2'.
uses Crt; // импортираем модуль Crt type Animal = class public constructor create(skinValue: char); procedure drawFrame(); procedure handleCommand(); function getCommand(): char; protected skin: char; // внешний вид position: integer; // текущая позиция command: char; // последняя введенная команда function getNewPosition(commandValue: char): integer; end; constructor Animal.create(skinValue: char); begin self.skin := skinValue; self.command := ' '; // значение по умолчанию end; procedure Animal.drawFrame(); var i: integer; begin for i:=1 to (self.position-1) do write(' '); writeln(self.skin); end; procedure Animal.handleCommand(); begin self.command := ReadKey(); // вместо readln(command) self.position := self.getNewPosition(self.command); end; function Animal.getNewPosition(commandValue: char): integer; begin if (commandValue = '2') then result := self.position + 1 else if (position > 1) then result := self.position - 1; end; function Animal.getCommand(): char; begin result := self.command; end; var AnimalItem: Animal; begin AnimalItem := Animal.create('*'); while(AnimalItem.getCommand() <> 'q') do begin ClrScr(); AnimalItem.drawFrame(); Delay(500); if (keyPressed()) then AnimalItem.handleCommand(); end; writeln('Programma zavershena!'); readln(); end.-- создайте класс AnimalNext, унаследованный от Animal и с помощью переопределения метода сделайте так. чтобы его объект перемещался влево и вправо сразу на 2 пробельный символа при нажатии управляющих клавиш (а не на 1 символ, как случае с исходным классом Animal).
uses Crt; // импортираем модуль Crt
type
Animal = class
public
constructor create(skinValue: char);
procedure drawFrame();
procedure handleCommand();
function getCommand(): char;
protected
skin: char; // внешний вид
position: integer; // текущая позиция
command: char; // последняя введенная команда
function getNewPosition(commandValue: char): integer;
end;
AnimalNext = class(Animal) // Наследник класса Animal
procedure drawFrame(); // Процедура для ее переопределения в потомке класса Animal
end;
constructor Animal.create(skinValue: char);
begin
self.skin := skinValue;
self.command := ' '; // значение по умолчанию
end;
procedure Animal.drawFrame();
var i: integer;
begin
for i:=1 to (self.position-1) do
write(' ');
writeln(self.skin);
end;
procedure Animal.handleCommand();
begin
self.command := ReadKey(); // вместо readln(command)
self.position := self.getNewPosition(self.command);
end;
function Animal.getNewPosition(commandValue: char): integer;
begin
if (commandValue = '2') then
result := self.position + 1
else
if (position > 1) then
result := self.position - 1;
end;
function Animal.getCommand(): char;
begin
result := self.command;
end;
procedure AnimalNext.drawFrame(); // Переопределяемая процедура
var i: integer;
begin
for i:=1 to (self.position-1) do
write(' '); // Сдвиг на два пробела
writeln(self.skin);
end;
var
AnimalNextItem: AnimalNext;
begin
AnimalNextItem:= AnimalNext.create('*');
while(AnimalNextItem.getCommand() <> 'q') do
begin
ClrScr();
AnimalNextItem.drawFrame();
Delay(200); // Задержка
if (keyPressed()) then
AnimalNextItem.handleCommand();
end;
writeln('Programma zavershena!');
readln();
end.
- Log in to post comments
- 1558 reads
vedro-compota
Wed, 05/03/2023 - 19:13
Permalink
по условию верно, решите
по условию верно, решите через переопределение getNewPosition(), а drawFrame() оставим без изменения
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 05/24/2023 - 12:07
Permalink
uses Crt; // импортируем
uses Crt; // импортируем модуль Crt type Animal = class public constructor create(skinValue: char); procedure drawFrame(); procedure handleCommand(); function getCommand(): char; protected skin: char; // внешний вид position: integer; // текущая позиция command: char; // последняя введенная команда function getNewPosition(commandValue: char): integer; virtual; end; AnimalNext = class(Animal) // Наследник класса Animal function getNewPosition(commandValue: char): integer; override; // Функция для ее переопределения в потомке класса Animal end; constructor Animal.create(skinValue: char); begin self.skin := skinValue; self.command := ' '; // значение по умолчанию end; procedure Animal.drawFrame(); var i: integer; begin for i:=1 to (self.position-1) do write(' '); writeln(self.skin); end; procedure Animal.handleCommand(); begin self.command := ReadKey(); // вместо readln(command) self.position := self.getNewPosition(self.command); end; function Animal.getNewPosition(commandValue: char): integer; begin if (commandValue = '2') then result := self.position + 1 else if (position > 1) then result := self.position - 1; end; function Animal.getCommand(): char; begin result := self.command; end; function AnimalNext.getNewPosition(commandValue: char): integer; // Переопределяемоя функция begin if (commandValue = '2') then result := self.position + 2 else if (position > 1) then result := self.position - 2; end; var AnimalNextItem: AnimalNext; begin AnimalNextItem:= AnimalNext.create('*'); while(AnimalNextItem.getCommand() <> 'q') do begin ClrScr(); AnimalNextItem.drawFrame(); Delay(200); if (keyPressed()) then AnimalNextItem.handleCommand(); end; writeln('Programma zavershena!'); readln(); end.