IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Бег трех звездочек
сообщение
Сообщение #1


Гость






Дословно: написать программу для трех звездочек...
выглядит эта прога примерно так: на экрани носятся три звездочки, начиная свой "бег" слевого края экрана и заканчивая правым краем (при этом звездочки не выходят за приделы экрана и не меняет своей строки) Каждая звездочка проходит эту дистанцию по разному, при чем скорость звездочки меняется с каждым новым "забегом".
*
*
*
Вот что то в этом роде...
Я конечно ща сяду сам писать эту прогу, но хотелось бы услышать совет профессионалов.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вот немного пописал эту прогу...
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

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






спасибо... good.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






тут не большая проблема возникла, две из звездочек в любом случае идут пораллельно, как исправить, что б все 3 шли асинхронно...
и еще что такое ink
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
как исправить, что б все 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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Слушай, агромное тебе спасибо... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






если я тебя еще не достал...
Скажи что за тип такой просто не первый раз встречаю 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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






clreol - это очищение экрана от лишних звездочек, я понял =)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
а как о остальных звездочках

так:
...
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
Указание программе удалить все символы от текущего положения курсора до конца строки (курсор при этом остается на том же месте...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






теперь уже толчно все работает и все рулез...
Короче спасибо тебе от всего Строительного Факультета АГТУ =)... good.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 11:20
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name