Помощь - Поиск - Пользователи - Календарь
Полная версия: Бег трех звездочек
Форум «Всё о Паскале» > 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
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.