Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.02.2009, 19:38   #1
Wi1D
Кибернетик
Форумчанин
 
Аватар для Wi1D
 
Регистрация: 22.10.2008
Сообщений: 142
Восклицание Движение Паскаль

Вот была задача:
Заполнить экран случайным набором символов (без пробела).
С помощью клавиш-стрелочек (<, >, ^, v) организовать движение по
экрану символа *, который должен оставлять за собой мигающие символы.

Вот мой код:
Код:
program DBuzheHue;
uses Crt;
var
 i:integer;
 ch:char;
 ex:boolean;
 Begin
 textcolor(red);
 textbackground(yellow);
 ClrScr;
 textbackground(black);
 window(2,2,79,24);
 clrscr;
 randomize;
	for i:=1 to 1998 do begin
	 write(chr(126-random(80)));
	 end;
	 write('*');
		repeat
		 if keypressed then
			 begin
				ch:=readKey;
				if ch=#27 then ex:=true;
				if ch=#0 then
				 begin
					ch:=ReadKey;
					 if (ch=#75) and (wherex-1<>1) then begin
						GOTOXY(wherex-1,wherey);
					 TextColor(blue+127);
					 Write(chr(126-random(80)));
						GOTOXY(wherex-2,wherey);
					 TextColor(15);
					 Write('*');
					 end;
					 if (ch=#77) and (wherex<>80) then begin
						GOTOXY(wherex-1,wherey);
					 TextColor(blue+127);
					 Write(chr(126-random(80)));
					 TextColor(15);
					 Write('*');
					 end;
					 if (ch=#72) and (whereY<>1) then begin
					 GOTOXY(wherex-1,wherey);
					 TextColor(blue+127);
					 Write(chr(126-random(80)));
					 GOTOXY(wherex-1,wherey-1);
					 TextColor(15);
					 Write('*');
					 end;
					 if (ch=#80) and (whereY+1<>26) then begin
					 GOTOXY(wherex-1,wherey);
					 TextColor(blue+127);
					 Write(chr(126-random(80)));
					 GOTOXY(wherex-1,wherey+1);
					 TextColor(15);
					 Write('*');
					 end;
				end;
		 end;
		until ex;
 end.
а вот как заставить символы мигать?
У меня с помошью
Код:
textcolor(red+128)
только выделет он(((
не существует идеальных программ...и людей тоже..
<== P.S. если я тебе помог нажми весы слева <==

Последний раз редактировалось Wi1D; 09.02.2009 в 22:41. Причина: смена задачи
Wi1D вне форума Ответить с цитированием
Старый 10.02.2009, 16:32   #2
pomoshnic
Форумчанин
 
Аватар для pomoshnic
 
Регистрация: 16.11.2008
Сообщений: 192
По умолчанию

Если еще нужно, тогда вот:
Код:
uses crt;
var cr:array[1..80,1..25] of char;
col:array[1..80,1..25] of byte;
x,y,i,j:byte;
c:char;
b:boolean;
procedure wri;
begin
 if b then b:=false else b:=true;
 for j:=1 to 25 do
 for i:=1 to 80 do
 begin
  textcolor(yellow);
  if col[i,j]=1 then
   if b then textcolor(red) else textcolor(GREEN);
  gotoxy(i,j);
  write(cr[j,i]);
 end;
textcolor(White);
gotoxy(x,y);
write('*');
delay(20000);
end;

procedure rand;
begin
 randomize;
 for i:=1 to 25 do
 for j:=1 to 80 do
 begin
  col[i,j]:=0;
  cr[i,j]:=chr(random(255-30)+30);
  if cr[i,j]=#32 then cr[i,j]:=#33;
 end;
end;


begin
x:=1;
y:=1;
clrscr;
rand;
wri;
repeat
while not keypressed do wri;
gotoxy(x,y);
write('*');
gotoxy(x,y);
if keypressed then
begin
 c:=readkey;
 if c=#27 then halt;
 if c=#0 then
 begin
  c:=readkey;
  case c of
  #75:if x in [2..80] then begin col[x,y]:=1; dec(x);end;
  #77:if x in [1..79] then begin col[x,y]:=1; inc(x);end;
  #72:if y in [2..25] then begin col[x,y]:=1; dec(y);end;
  #80:if y in [1..24] then begin col[x,y]:=1; inc(y);end;
  end;
 end;
end;
delay(20000);
until false;
end.
pomoshnic вне форума Ответить с цитированием
Старый 10.02.2009, 20:55   #3
Wi1D
Кибернетик
Форумчанин
 
Аватар для Wi1D
 
Регистрация: 22.10.2008
Сообщений: 142
По умолчанию

код не работает вообще
не существует идеальных программ...и людей тоже..
<== P.S. если я тебе помог нажми весы слева <==
Wi1D вне форума Ответить с цитированием
Старый 10.02.2009, 23:22   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Wi1D, у Вас практически рабочий код.
Только:
1) замените везде код
textcolor( ЦВЕТ +127);
на код:
Код:
TextColor( ЦВЕТ +Blink);
но это не главное... мигание у Вас появится ТОЛЬКО в полноэкранном режиме (нажмите при выполнении программы DOS клавиши ALT+ENTER)

Добавлено.
Кстати, при движении звёздочки Вы генерите новые случайные символы.
Думаю, что в задаче подразумевалось оставлять оригинальные (те, по которым "проходит" звёздочка)...

Последний раз редактировалось Serge_Bliznykov; 10.02.2009 в 23:24.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бегущая строка vitamin.rulez Помощь студентам 8 28.01.2009 21:48
Бегущая строка в заголовке приложения (Delphi 7) Sinx Помощь студентам 2 08.12.2008 02:35
Бегущая строка и about Патрон Общие вопросы Delphi 12 02.06.2008 22:31
"Бегущая строка" Канат Общие вопросы Delphi 6 24.12.2006 10:13