Помощь - Поиск - Пользователи - Календарь
Полная версия: Использование модуля CRT
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость
Помогите написать программку. Вообще не имею понятия как ее написать...

Организовать вывод в окне заданного размера двух символов, "перепрыгивающих" друг через друга и двигающихся по горизонтали.
Bokul

uses crt;

const
  time=100;

procedure jump(r:byte; c:char; Var x,y:byte);//с помощью этой процедуры осуществляется прыжок
var i:byte;
begin
  for i:=1 to 2*r do begin
      gotoxy(x,y);  write(' ');
      inc(x);
      if i<=r then dec(y)
         else inc(y);
      gotoxy(x,y);  write(c);
      delay(time);
  end;
end;


var x1,y1,x2,y2:byte;//координаты символов
begin
  window(10,1,50,25);//наше окно
  TextBackGround(blue);//фоновый цвет окна
  clrscr;
  x1:=3; y1:=10;//---\
  x2:=6; y2:=10;//----\начальные координаты
  repeat//прыгаем
    jump(3,'a',x1,y1);
    jump(3,'b',x2,y2);
  until keypressed;//пока не надоест (нажимаем любую клавишу для выхода)
end.


volvo
Bokul, а ты в Турбо Паскале это запускать пробовал? smile.gif Попробуй, тебе понравится... smile.gif

А в FPC меня порадовало поведение программы, когда символы допрыгивают до края окна ... lol.gif
Bokul
Цитата
Bokul, а ты в Турбо Паскале это запускать пробовал? smile.gif Попробуй, тебе понравится...

Ну тоже самое что и в Fpc? Нет?

Цитата
А в FPC меня порадовало поведение программы, когда символы допрыгивают до края окна ...

smile.gif Им надоедает прыгать и они просто идут.. Все природно smile.gif
volvo
Попробуй вот это:
...
procedure jump(r:byte; c:char; Var x,y:byte);
var i:byte;
begin
  for i:=1 to 2*r do begin
      gotoxy(x,y);  write(' ');
      inc(x);

      if x > lo(windmax) - lo(windmin) then begin
	  x := 1;
      end;

      if i<=r then dec(y)
         else inc(y);
      gotoxy(x,y);  write(c);
      delay(time);

  end;
end;
...



Добавлено через 1 мин.
P.S. А курсор можно погасить: Курсор
Bokul
Можно и так:


procedure jump(r:byte; c:char; Var x,y,dir:byte);
var i:byte; b:boolean;
begin
  for i:=1 to 2*r do begin
      gotoxy(x,y);  write(' ');
      if (x=lo(windmax)-lo(windmin)) or (x=0) then
         dir:=-dir;
      inc(x,dir);
      if i<=r then dec(y)
         else inc(y);
      gotoxy(x,y);  write(c);
      delay(time);
  end;
end;



Добавлено через 17 мин.
Т.е. полный вариант выглядит так:

uses crt;

const
  time=100;

procedure jump(r:byte; c:char; Var x,y,dir:byte);
var i:byte; b:boolean;
begin
  for i:=1 to 2*r do begin
      gotoxy(x,y);  write(' ');
      if (x=lo(windmax)-lo(windmin)) or (x=0) then
         dir:=-dir;
      inc(x,dir);
      if i<=r then dec(y)
         else inc(y);
      gotoxy(x,y);  write(c);
      delay(time);
  end;
end;


var x1,y1,x2,y2:byte;
    dir1,dir2:byte;
begin
  window(10,1,50,25);
  TextBackGround(blue);
  clrscr;
  dir1:=1; dir2:=1;
  x1:=3; y1:=10;
  x2:=6; y2:=10;
  repeat
    jump(5,'a',x1,y1,dir1);
    jump(5,'b',x2,y2,dir2);
  until keypressed;
end.


Гость
Спасиба большое.
Я только одного не понял... что делает переменная dir?
volvo
Направление движения... Если dir > 0 , то символы перемещаются слева направо, если dir < 0 - то справа налево...

Естественно, dir1 и dir2 должны быть одинаковыми, иначе получится бред...
-Кошка-
А у меня такая же задача.Только жанные размера окна нужно ввести с клавиатуры. Как это организовать?Чтобы буквы перепрыгивали друг черег друга,но при любых данных размеров окна.
Алена
Изменяем только основную программу, все остальное - как и было:
...
var
  x1,y1,x2,y2:byte;
  w, h: integer;
begin
  {
  w := 20;
  h := 10;
  }

  write('ширина [10 .. 20] = '); readln(w); { можно добавить проверку введенных данных }
  write('высота [10 .. 20] = '); readln(h);

  window(10, 1, 10 + w, 1 + h);
  TextBackGround(blue);
  clrscr;
  x1:=3; y1:=10;
  x2:=6; y2:=10;
  repeat
    jump(3,'a',x1,y1);
    jump(3,'b',x2,y2);
  until keypressed;
end.
-Кошка-
Спасибо. Попробую...
Гость
А как например эта задача будет выглять в блок-схеме алгоритма?
Блок начала,блок ввода, 3 блока решения (процесс),блок решения(логический блок) и блок конец.
Так?
Гость
Если кто-то может, то выложите здесь лучше блок-схему к этой программе и её подпрограмме...
klem4
Программа построения блок-схем

Пробовал ?
Yulianna
А как создать программу,чтоб двигались два символа таким образом: чтоб один символ погасал,а другой появлялся и так они чередовались по всему размеру окна, двигаясь по горизонтали. Подскажите пожалуйста.
Zzzz...
Ты должна удалять и рисовать символы по-переменно.....
volvo
Yulianna, это что, для всей группы задания? Так и будет продолжаться? Тебе привели несколько решений, ты даже не соизволила отметиться в теме, рассказать, подошли ли они, только все время задаешь новые вопросы... Тут, извини, не роботы, которым все равно, кому-то подходит, то что они делают, или нет... dry.gif
Zzzz...
Ну вот такой сойдёт???

uses crt;
var
   a,b:char;
   i,x1,x2:integer;
begin
clrscr;
     a:='*';
     b:='@';
     x1:=1;
     x2:=2;
     for i:=0 to 38 do
         begin
              x1:=x2+1;
              delay(100);
              clrscr;
              gotoxy(x1,1);
              write(a);
              x2:=x1+1;
              delay(100);
              clrscr;
              gotoxy(x2,1);
              write(b);
         end;
         for i:=38 downto 0 do
         begin
              x1:=x2-1;
              delay(100);
              clrscr;
              gotoxy(x1,1);
              write(a);
              x2:=x1-1;
              delay(100);
              clrscr;
              gotoxy(x2,1);
              write(b);
           end;
end.

Yulianna
volvo,это одно моё задание. Я только учусь программированию на Паскале,поэтому не совсем пока разбераюсь. Спасибо, что вы помогаете. Просто то, что делаю я в последнее время постоянно не нравится преподавателю-вот только поэтому я начала спрашивать здесь. Извини, конечно, если получается что я задаю вопросы. Больше этого делать не буду. пасибо за помощь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.