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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2008, 02:49   #1
Rifler
Пользователь
 
Регистрация: 15.12.2007
Сообщений: 44
По умолчанию Вывод на экран

Здрасьте
Написал Тетрис в текстовом режиме, и мне подсказали, что для вывода на экран без мерцания нужно создать массив 80x25x2(ширина, высота и цвет) и разместить его по адресу $b800:0000. Собственно сделал вот так
Код:
pl : array[1..25,1..80,1..2] of word absolute $b800:0000;
А что дальше делать? изменяю массив - на экране ничего. Делаю WriteLn(pl[i][j][1]) - тоже ничего.
Разъясните что к чему. Премного благодарен
Rifler вне форума Ответить с цитированием
Старый 15.07.2008, 06:06   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Вот пример случайного заполнения экрана символами "Х" случайного цвета
Код:
uses crt;
var
  pl : array[1..25,1..80,1..2] of byte absolute $b800:0000;
  i: integer;
procedure WriteXY(x, y, c: integer; s: string);
//(координата Х, коодината У, цвет символа, символ)
begin
  pl[y][x][1] := ord(s[1]);//символ
  pl[y][x][2] := c;//цвет
  write('')//команда на вывод
end;
begin
  clrscr;
  for i := 1 to 50 do begin
     writexy(random(80)+1, random(25)+1, random(16)+1, 'X');
     delay(10000);
  end;
  readln
end.
Не понятно какого рода данные будем выводить. Если буквы цифры, то указанный код подходит. Если нужна и псевдографика, то меняем процедуру на следующую
Код:
procedure WriteXY(x, y, c: integer; s: byte);
begin
  pl[y][x][1] := s;
  pl[y][x][2] := c;
  write('')
end;
Эта процедура будет выводить любой символ по его коду (не так удобно, но универсально).
Логично предположить, что для стирания символа нужно будет записать на его место пробел.
eoln вне форума Ответить с цитированием
Старый 15.07.2008, 08:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Rifler
Вообще-то по этому адресу не только символы а и атрибути символов.
Там первый байт - код символа, второй - цвет и фон его (хотя точно последовательностть байт не помню)

Я вот так раньше символ выводил:
Код:
 uses crt,dos;

PROCEDURE outs(x,y:BYTE;c:CHAR;b,d:BYTE);     {Вывод символа в видео и его атрибуты}
BEGIN
 mem[$b800:$0000+(y*160+(x)*2)]:=ORd(c);
 mem[$b800:$0000+(y*160+(x)*2)+1]:=b*16+d;
END;

begin
outs(10,10,'A',red,blue);
readln;
end.
b d - здесь фон и цвет символа.
I'm learning to live...

Последний раз редактировалось Stilet; 15.07.2008 в 08:25.
Stilet вне форума Ответить с цитированием
Старый 15.07.2008, 11:39   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

To eoln
Цитата:
for i := 1 to 50 do begin
writexy(random(80)+1, random(25)+1, random(16)+1, 'X');
delay(10000);
end;
Чтобы не было черных символов с фоном(они отличаются от других) лучше random(15)+1, и еще зачем задержка в 10 сек?
puporev вне форума Ответить с цитированием
Старый 15.07.2008, 11:47   #5
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
зачем задержка в 10 сек
Просто для наглядности.
10 секунд в данном случае зависит от скорости компьютера. У меня они длятся примерно как 0,2 - 0,3 сек
eoln вне форума Ответить с цитированием
Старый 15.07.2008, 23:33   #6
Rifler
Пользователь
 
Регистрация: 15.12.2007
Сообщений: 44
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Вообще-то по этому адресу не только символы а и атрибути символов.
Там первый байт - код символа, второй - цвет и фон его (хотя точно последовательностть байт не помню)

Я вот так раньше символ выводил:
Код:
 uses crt,dos;

PROCEDURE outs(x,y:BYTE;c:CHAR;b,d:BYTE);     {Вывод символа в видео и его атрибуты}
BEGIN
 mem[$b800:$0000+(y*160+(x)*2)]:=ORd(c);
 mem[$b800:$0000+(y*160+(x)*2)+1]:=b*16+d;
END;

begin
outs(10,10,'A',red,blue);
readln;
end.
b d - здесь фон и цвет символа.
а mem это что?
Rifler вне форума Ответить с цитированием
Старый 16.07.2008, 03:24   #7
Rifler
Пользователь
 
Регистрация: 15.12.2007
Сообщений: 44
По умолчанию

А, все, разобрался, норм рисует.
Тока один вопрос остался - раньше чуть ниже "стакана" была надпись
Код:
WriteLn('You score is ',points,' points');
Как мне теперь это сделать?
Rifler вне форума Ответить с цитированием
Старый 16.07.2008, 13:35   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

А куда эта надпись девалась?
Если ее символы перекрывают, то возьмите массив по высоте не 25, а меньше на количество строк для надписи.
puporev вне форума Ответить с цитированием
Старый 16.07.2008, 23:26   #9
Rifler
Пользователь
 
Регистрация: 15.12.2007
Сообщений: 44
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
А куда эта надпись девалась?
Если ее символы перекрывают, то возьмите массив по высоте не 25, а меньше на количество строк для надписи.
Не, просто если просто выводит РайтЛн'ом, то она будет сверху и белым цветом. Но я уже разобрался, сделал.
Теперь новый вопрос - получается что "разрешение" 25х80. Как можно сделать хотя бы 40х80? А то если запускать с ехешника, немного плохо выглядит
Rifler вне форума Ответить с цитированием
Старый 17.07.2008, 07:02   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Откройте Турбо Паскаль, в левом верхнем углу окошка есть символ командной строки. Кликните по нему, в выпавшем списке выберите "Свойства" и экспериментируйте с размерами.
puporev вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод на экран Nikolai_90 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 02.05.2012 09:25
Вывод на 2-ой экран DShiller Общие вопросы Delphi 0 26.05.2008 15:25
вывод массива на экран Неясыть Общие вопросы Delphi 9 20.01.2008 20:18
вывод файла на экран! Шушелла Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 29.10.2007 09:34