Помощь - Поиск - Пользователи - Календарь
Полная версия: Бег трех звездочек
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
JoB
Дословно: написать программу для трех звездочек...
выглядит эта прога примерно так: на экрани носятся три звездочки, начиная свой "бег" слевого края экрана и заканчивая правым краем (при этом звездочки не выходят за приделы экрана и не меняет своей строки) Каждая звездочка проходит эту дистанцию по разному, при чем скорость звездочки меняется с каждым новым "забегом".
*
*
*
Вот что то в этом роде...
Я конечно ща сяду сам писать эту прогу, но хотелось бы услышать совет профессионалов.
Guest
Вот немного пописал эту прогу...
uses crt;
var i,i1,i2,s,mesto:integer;
begin
clrscr;
 randomize;
 i:=2;i1:=1;i2:=1;mesto:=1;
 repeat
 s:=random(2);
 delay(50);
 If s=0 then
  begin
  i:=i+1;
  textcolor(white);
  gotoxy(i,1);
  write('*');
  end
 else
  if s=1 then
   begin
    i1:=i1+1;
    textcolor(white);
    gotoxy(i1,1);
    write('*');
   end
  else
   begin
    i2:=I2+1;
    textcolor (white);
    gotoxy(i2,3);
    write('*');
   end;
 if i=80 then
  begin
   mesto:=mesto+1;
   gotoxy(1,mesto+3);
   writeln ('tochka1 zanila1',mesto,'mesto');
   end;
  if i=1 then
   begin
    mesto:=mesto+1;
    gotoxy(1,3+mesto);
    writeln ('tochka2 zanila',mesto,'mesto');
    end;
   begin
   if i2=80 then
   mesto:=mesto+1;
   gotoxy(1,mesto+3);
   write ('3 tochka zanila' ,mesto,'mesto');
   end;
until(i>=80)and(i1>=80)and(i2>=80);
readln
end.



но проблема осталась почему то она выводит только результат третьей звездочки, и только ее перемещения по экрану... blink.gif Причем от звездочки остаются сдеды... а мне б хотелось что б она бежала, конечно я подозреваю что бы это сделать надо просто заменить цвет звездочки на черный. но вот только как это сделать.....
помогите!!!

М
теги для кода ставь
Altair

volvo
Guest, вот тебе программа... Добавь вывод результатов и все готово blum.gif
uses crt;

const
  n = 3;
var
  delta, pos: array[1 .. n] of integer;
  finish: boolean;
  i: integer;

begin
  clrscr;
  randomize;
  for i := 1 to n do begin
    pos[i] := 1;
    delta[i] := random(3) + 1;
  end;

  finish := false;
  repeat
    i := 1;
    delay(125);
    repeat
      gotoxy(1, 10+i); clreol;
      gotoxy(pos[i], 10+i); write('*');
      inc(pos[i], delta[i]);
      finish := pos[i] >= 80;
      inc(i)
    until (i > n) or finish;
  until finish;
end.
JoB
спасибо... good.gif
JoB
тут не большая проблема возникла, две из звездочек в любом случае идут пораллельно, как исправить, что б все 3 шли асинхронно...
и еще что такое ink
volvo
Цитата
как исправить, что б все 3 шли асинхронно...

Вот так:
uses crt;

const
  n = 3;
var
  delta, pos: array[1 .. n] of integer;
  finish: boolean;
  i, plus: integer;
  T: set of byte;

begin
  clrscr;
  randomize; T := [];
  for i := 1 to n do begin
    pos[i] := 1;

    { Генерируем НЕповторяющиеся числа}
    repeat
      plus := random(4) + 1;
    until not (plus in T); { Число еще не было сгенерировано ранее }

    {
      Добавить его во множество, в следующий раз
      оно не должно повториться
    }
    T := T + [plus];
    delta[i] := plus + 1;
  end;

  finish := false;
  repeat
    i := 1;
    delay(125);
    repeat
      gotoxy(1, 10+i); clreol;
      gotoxy(pos[i], 10+i); write('*');
      inc(pos[i], delta[i]);
      finish := pos[i] >= 80;
      inc(i)
    until (i > n) or finish;
  until finish;
end.


А Inc(X) это то же самое, что и X := X + 1;
JoB
Слушай, агромное тебе спасибо... smile.gif
Guest
если я тебя еще не достал...
Скажи что за тип такой просто не первый раз встречаю set of byte;
и еще что такое clreol
А можно сделать так что б все точки добегали до финиша и еще тут попытался сделать вывод, но понятно как сделать вывод о победителе,а как о остальных звездочках - какое они место заняли...=)
...
gotoxy(1, 10+i); clreol;
gotoxy(pos[i], 10+i); write('*');
inc(pos[i], delta[i]);
finish := pos[i] >= 80;
i:=i+1;
until (i > n) or finish;
until finish;
writeln;
i:=i-1;
writeln('pobeda ', i ,' tochki');
readln
end.
Guest
clreol - это очищение экрана от лишних звездочек, я понял =)
volvo
Цитата
а как о остальных звездочках

так:
...
  until finish; { это - окончание соревнования, то что было у меня }

  writeln;
  dec(i);
  writeln('#', i, ' первое место');

  if i = 1 then plus := 2
  else plus := 1;

  if pos[plus] > pos[6 - (plus + i)] then
    writeln('#', plus, ' второе; #', 6 - (plus + i), ' третье')
  else
    writeln('#', 6 - (plus + i), ' второе; #', plus, ' третье');
end.



Цитата
что за тип такой просто не первый раз встречаю set of byte;
Это множество, сожержащее значения типа Byte. Подробнее про множества читай здесь:
FAQ: Множества, и работа с ними

Цитата
что такое clreol
Указание программе удалить все символы от текущего положения курсора до конца строки (курсор при этом остается на том же месте...)
JoB
теперь уже толчно все работает и все рулез...
Короче спасибо тебе от всего Строительного Факультета АГТУ =)... good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.