Урок 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
- 988 reads
vedro-compota
Wed, 05/03/2023 - 19:13
Permalink
по условию верно, решите
по условию верно, решите через переопределение getNewPosition(), а drawFrame() оставим без изменения
_____________
матфак вгу и остальная классика =)
Dennis80
Wed, 05/24/2023 - 12:07
Permalink
uses Crt; // импортируем