История изменений
Исправление bormant, (текущая версия) :
чтобы после каждого прохождения символа решётки по всей траектории, второй и последующие циклы этого прохождения делались бы точно на тех же координатах, а не со смещением вниз
Так не смещайте. Удалите пересчет координат в конце MoveGrid().
когда сейчас нажимаю любую кнопку, программа в принципе останавливается, но с большой задержкой, помогите сделать без задержки
Завершайте анимацию по нажатии клавиши сразу.
uses Crt, SysUtils;
const
Width = 12;
Height = 12;
Delay = 100;
GridWidth = 10;
GridHeight = 10;
GridBack = '*';
GridRunner = '#';
procedure DrawGrid(x, y: Integer);
var
i, j: Integer;
begin
for i := 0 to GridHeight - 1 do begin
GotoXY(x, y + i);
for j := 0 to GridWidth - 1 do
Write(GridBack);
end;
end;
procedure MoveGrid(x, y: Integer);
procedure Animate;
var
i: Integer;
begin
for i := 0 to GridWidth - 1 do begin
GotoXY(x + i, y);
Write(GridRunner);
GotoXY(x + i, y);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := 0 to GridHeight - 1 do begin
GotoXY(x + GridWidth - 1, y + i);
Write(GridRunner);
GotoXY(x + GridWidth - 1, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridWidth - 1 downto 0 do begin
GotoXY(x + i, y + GridHeight - 1);
Write(GridRunner);
GotoXY(x + i, y + GridHeight - 1);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridHeight - 1 downto 0 do begin
GotoXY(x, y + i);
Write(GridRunner);
GotoXY(x, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
end;
begin
while not KeyPressed do begin
GotoXY(1, 1); Write('X:', x, ' Y:', y);
Animate;
end;
if ReadKey = #0 then ReadKey;
end;
var
x, y: Integer;
begin
ClrScr;
x := (ScreenWidth - GridWidth) div 2;
y := (ScreenHeight - GridHeight) div 2;
DrawGrid(x, y);
MoveGrid(x, y);
ClrScr;
end.
Исправление bormant, :
чтобы после каждого прохождения символа решётки по всей траектории, второй и последующие циклы этого прохождения делались бы точно на тех же координатах, а не со смещением вниз
Так не смещайте. Удалите пересчет координат в конце MoveGrid().
когда сейчас нажимаю любую кнопку, программа в принципе останавливается, но с большой задержкой, помогите сделать без задержки
Завершайте анимацию по нажатии клавиши сразу.
uses Crt, SysUtils;
const
Width = 12;
Height = 12;
Delay = 100;
GridWidth = 10;
GridHeight = 10;
GridBack = '*';
GridRunner = '#';
procedure DrawGrid(x, y: Integer);
var
i, j: Integer;
begin
for i := 0 to GridHeight - 1 do
for j := 0 to GridWidth - 1 do begin
GotoXY(x + i, y + j);
Write(GridBack);
end;
end;
procedure MoveGrid(x, y: Integer);
procedure Animate;
var
i: Integer;
begin
for i := 0 to GridWidth - 1 do begin
GotoXY(x + i, y);
Write(GridRunner);
GotoXY(x + i, y);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := 0 to GridHeight - 1 do begin
GotoXY(x + GridWidth - 1, y + i);
Write(GridRunner);
GotoXY(x + GridWidth - 1, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridWidth - 1 downto 0 do begin
GotoXY(x + i, y + GridHeight - 1);
Write(GridRunner);
GotoXY(x + i, y + GridHeight - 1);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridHeight - 1 downto 0 do begin
GotoXY(x, y + i);
Write(GridRunner);
GotoXY(x, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
end;
begin
while not KeyPressed do begin
GotoXY(1, 1); Write('X:', x, ' Y:', y);
Animate;
end;
if ReadKey = #0 then ReadKey;
end;
var
x, y: Integer;
begin
ClrScr;
x := (ScreenWidth - GridWidth) div 2;
y := (ScreenHeight - GridHeight) div 2;
DrawGrid(x, y);
MoveGrid(x, y);
ClrScr;
end.
Исходная версия bormant, :
чтобы после каждого прохождения символа решётки по всей траектории, второй и последующие циклы этого прохождения делались бы точно на тех же координатах, а не со смещением вниз
Так не смещайте. Удалите пересчет координат в конце MoveGrid().
когда сейчас нажимаю любую кнопку, программа в принципе останавливается, но с большой задержкой, помогите сделать без задержки
Завершайте анимацию по нажатии клавиши сразу.
uses Crt, SysUtils;
const
Width = 12;
Height = 12;
Delay = 100;
GridWidth = 10;
GridHeight = 10;
GridBack = '*';
GridRunner = '#';
procedure DrawGrid(x, y: Integer);
var
i, j: Integer;
begin
for i := 0 to GridHeight - 1 do
for j := 0 to GridWidth - 1 do begin
GotoXY(x + i, y + j);
Write(GridBack);
end;
end;
procedure MoveGrid(x, y: Integer);
procedure Animate;
var
i: Integer;
begin
for i := 0 to GridWidth - 1 do begin
GotoXY(x + i, y);
Write(GridRunner);
GotoXY(x + i, y);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := 0 to GridHeight - 1 do begin
GotoXY(x + GridWidth - 1, y + i);
Write(GridRunner);
GotoXY(x + GridWidth - 1, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridWidth - 1 downto 0 do begin
GotoXY(x + i, y + GridHeight - 1);
Write(GridRunner);
GotoXY(x + i, y + GridHeight - 1);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
for i := GridHeight - 1 downto 0 do begin
GotoXY(x, y + i);
Write(GridRunner);
GotoXY(x, y + i);
Sleep(Delay);
Write(GridBack);
if KeyPressed then Exit;
end;
end;
begin
while not KeyPressed do begin
GotoXY(1, 1); Write('X:', x, ' Y:', y);
Animate;
end;
end;
var
x, y: Integer;
begin
ClrScr;
x := (ScreenWidth - GridWidth) div 2;
y := (ScreenHeight - GridHeight) div 2;
DrawGrid(x, y);
MoveGrid(x, y);
if ReadKey = #0 then ReadKey;
ClrScr;
end.